php开发实战分析(5):文件和目录的操作

一、返回某目录下的所有文件(不包括子目录)

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 函数用于清除文件状态缓存。该函数可以清除对文件或目录进行的 statfile_existsis_readableis_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系统中创建文件夹时,主要区别在于路径分隔符和权限设置。

  1. 路径分隔符:

    • 在Windows系统中,路径分隔符是反斜杠(\)。例如,mkdir('C:\my_folder')
    • 在Linux系统中,路径分隔符是正斜杠(/)。例如,mkdir('/home/my_folder')
  2. 权限设置:

    • 在Windows系统中,mkdir函数会自动继承父目录的权限设置,并在所创建的文件夹中赋予当前用户完全控制权限。
    • 在Linux系统中,mkdir函数创建的文件夹默认权限为755(rwxr-xr-x),这意味着所有者对文件夹有读、写和执行权限,而组和其他用户只有读和执行权限。这个权限设置可以根据需求进行修改。

在使用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 '文件打开失败';
}

在打开文件后,你可以使用其他函数如 freadfwritefgetsfputcsv 等进行文件的读写操作。记得在完成文件操作后,使用 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;
    }
}

@漏刻有时

猜你喜欢

转载自blog.csdn.net/weixin_41290949/article/details/131703740
今日推荐