文件和目录的操作
一、返回某目录下的所有文件(不包括子目录)
function getfiles($dir)
{
if ($dir != '' && substr($dir, strlen($dir) - 1) != '') {
$dir .= '/';
}
$row = array();
if (is_dir($dir)) {
if ($di = opendir($dir)) {
while (($file = readdir($di)) !== false) {
if (is_file($dir . $file) && $file != '.' && $file != '..') {
$row[] = $file;
}
}
closedir($di);
}
}
return $row;
}
二、返回某目录下的所有目录
//返回某目录下的所有目录
function get_dir($dir)
{
if ($dir != '' && substr($dir, strlen($dir) - 1) != '') {
$dir .= '/';
}
$row = array();
if (is_dir($dir)) {
if ($di = opendir($dir)) {
while (($file = readdir($di)) !== false) {
if (is_dir($dir . $file) && $file != '.' && $file != '..') {
$row[] = $file;
}
}
closedir($di);
}
}
return $row;
}
三、删除文件-unlink
1.基本用法
在PHP中,unlink
函数用于删除文件。其用法如下:
bool unlink ( string $filename [, resource $context ] )
参数说明:
$filename
: 要删除的文件的路径和文件名。$context
(可选): 这是一个可传递给 unlink 函数的上下文资源(例如,一个打开的文件句柄)。
返回值:
- 如果成功删除文件,则返回
true
。 - 如果出现错误,例如文件不存在或没有足够的权限删除文件,则返回
false
。
使用示例:
$file = 'path/to/file.txt';
if (unlink($file)) {
echo '文件删除成功';
} else {
echo '文件删除失败';
}
需要注意的是,unlink
函数只能用于删除文件,而不能用于删除文件夹。如果你需要删除文件夹,可以使用rmdir
函数(用于删除空文件夹)或递归删除文件夹中的所有文件和子文件夹。
2.实战使用
function del_file($file)
{
$delete = @unlink($file);
clearstatcache();
if (@file_exists($file)) {
$filesys = str_replace("/", "\\", $file);
$delete = @system("del $filesys");
clearstatcache();
if (@file_exists($file)) {
$delete = @chmod($file, 0777);
$delete = @unlink($file);
$delete = @system("del $filesys");
}
}
clearstatcache();
if (@file_exists($file)) {
return false;
} else {
return true;
}
}
3.clearstatcache的用法
在 PHP 中,clearstatcache
函数用于清除文件状态缓存。该函数可以清除对文件或目录进行的 stat
、file_exists
、is_readable
、is_writable
以及其他文件相关函数所使用的缓存。
以下是 clearstatcache
函数的用法:
void clearstatcache( bool $clear_realpath_cache = false, string $filename = "" )
参数说明:
$clear_realpath_cache
(可选):如果设置为true
,会同时清除 realpath 缓存,也就是清除由realpath
函数缓存的路径解析结果。默认值为false
。$filename
(可选):要清除相关缓存的文件名。如果指定了文件名,则只清除与该文件相关的缓存。默认为空字符串,表示清除所有缓存。
使用示例:
$file = 'path/to/file.txt';
// 执行一些与文件状态相关的操作
echo file_exists($file); // 输出 1
// 清除缓存
clearstatcache();
// 重新执行文件不存在检查
echo file_exists($file); // 输出 0
当你在对文件状态进行多次操作且需要确保获取最新的文件状态时,可以调用 clearstatcache
函数来清除缓存。例如,当你修改了文件的属性或删除了文件时,调用该函数可以确保下一次操作能够获取最新的文件状态信息。
4.system(“del $filesys”)
在 PHP 中,system
函数用于执行系统命令。当你调用 system("del $filesys")
时,它将执行类似于在命令行中运行 del $filesys
命令的操作。该命令用于在 Windows 操作系统中删除指定的文件。
以下是 system
函数的用法:
string system( string $command [, int &$return_var ] )
参数说明:
$command
:要执行的系统命令。$return_var
(可选):一个用于存储命令的返回值的变量。如果提供了该参数,则在执行命令后,该变量将被设置为命令的返回值。
返回值:
- 返回命令的输出结果(如果有)作为字符串。
使用示例:
$filesys = 'path/to/file.txt';
$command = "del $filesys";
$output = system($command, $return_var);
if ($return_var === 0) {
echo '文件删除成功';
} else {
echo '文件删除失败';
}
需要注意的是,system
函数执行的命令可能会受到系统安全设置的限制,因此在使用该函数时要小心谨慎。确保 $filesys
参数的值是你期望删除的文件路径,并做好必要的安全验证和过滤,以防止潜在的安全问题。此外,system
函数会直接在终端上执行命令,因此请确保只调用可信任的命令,并避免使用用户动态输入的值,以防止命令注入攻击。
5.递归删除某个目录下的全部文件
function del_dir($directory)
{
if (is_dir($directory)) {
//递归删除某个目录下的全部文件
if ($dh = @opendir($directory)) {
while ($filename = readdir($dh)) {
if ($filename != "." && $filename != "..") {
//是文件则删除文件
if (is_file($directory . "/" . $filename)) {
unlink($directory . "/" . $filename);
} else {
//非空目录则递归删除子文件夹或文件
del_dir($directory . "/" . $filename);
rmdir($directory . "/" . $filename);
}
}
}
@closedir($dh);
//rmdir($directory);
}
} else {
//直接删除指定某个文件
if (file_exists($directory)) {
unlink($directory);
}
}
}
四、创建目录-mkdir
1.基本用法
使用PHP中的mkdir
函数在Windows和Linux系统中创建文件夹时,主要区别在于路径分隔符和权限设置。
-
路径分隔符:
- 在Windows系统中,路径分隔符是反斜杠(\)。例如,
mkdir('C:\my_folder')
。 - 在Linux系统中,路径分隔符是正斜杠(/)。例如,
mkdir('/home/my_folder')
。
- 在Windows系统中,路径分隔符是反斜杠(\)。例如,
-
权限设置:
- 在Windows系统中,
mkdir
函数会自动继承父目录的权限设置,并在所创建的文件夹中赋予当前用户完全控制权限。 - 在Linux系统中,
mkdir
函数创建的文件夹默认权限为755(rwxr-xr-x),这意味着所有者对文件夹有读、写和执行权限,而组和其他用户只有读和执行权限。这个权限设置可以根据需求进行修改。
- 在Windows系统中,
在使用mkdir
函数创建文件夹时,建议采用可移植的方式,即使用正斜杠作为路径分隔符,并在需要的情况下手动设置合适的权限。例如:
// 在Windows中创建文件夹
mkdir('C:/my_folder');
// 在Linux中创建文件夹,并设置权限为777
mkdir('/home/my_folder');
chmod('/home/my_folder', 0777);
请注意,对于某些特殊情况,如需要创建多层嵌套的文件夹,可能需要在代码中添加额外的逻辑来确保父级目录存在。
2.封装使用
//创建目录
function mdir($directoryName)
{
$directoryName = str_replace("\\", "/", $directoryName);
$dirNames = explode('/', $directoryName);
$total = count($dirNames);
$temp = '';
for ($i = 0; $i < $total; $i++) {
$temp .= $dirNames[$i] . '/';
if (!is_dir($temp)) {
$oldmask = umask(0);
if (!mkdir($temp, 0777)) exit("can't md dir $temp");
umask($oldmask);
}
}
return true;
}
五.写入文件
1.基本用法
在PHP中,fopen
函数用于打开文件或URL,并返回一个文件句柄,以便你可以对其进行读取、写入或其他操作。
以下是 fopen
函数的用法:
resource fopen ( string $filename , string $mode [, bool $use_include_path = FALSE [, resource $context ]] )
参数说明:
$filename
:要打开的文件的路径和文件名。$mode
:打开文件的模式。常用的模式有:r
:只读模式,从文件开头开始读取。w
:只写模式,将文件截断为零长度,如果文件不存在则创建。a
:追加模式,写入到文件末尾,如果文件不存在则创建。x
:独占创建模式,如果文件已经存在则打开失败。- 等等,还有其他模式可供选择,请参考 PHP 官方文档获取更多信息。
$use_include_path
(可选):如果设置为true
,则在打开文件时会搜索 include_path 中指定的路径。默认值为false
。$context
(可选):上下文资源,可以将其传递给fopen
函数,用于特定的文件操作设置。
返回值:
- 如果文件打开成功,则返回一个表示打开文件的资源句柄(resource),可以供后续对文件的操作使用。
- 如果出现错误,例如文件不存在或没有足够的权限打开文件,则返回
false
。
使用示例:
$file = 'path/to/file.txt';
$handle = fopen($file, 'r');
if ($handle) {
// 读取文件内容
$content = fread($handle, filesize($file));
echo $content;
// 关闭文件
fclose($handle);
} else {
echo '文件打开失败';
}
在打开文件后,你可以使用其他函数如 fread
、fwrite
、fgets
、fputcsv
等进行文件的读写操作。记得在完成文件操作后,使用 fclose
函数关闭文件句柄以释放资源。
2.实战使用
function write_file($filename, $contents)
{
if ($fp = fopen($filename, "w")) {
//fwrite($fp,stripslashes($contents));
$contents = trim($contents) == '' ? ' ' : $contents;
fwrite($fp, $contents);
fclose($fp);
return true;
} else {
return false;
}
}
@漏刻有时