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

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

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


权限设置:


在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;
    }
}



@漏刻有时

相关文章
|
6月前
|
缓存 大数据 PHP
PHP性能优化实战:告别缓慢脚本
PHP性能优化实战:告别缓慢脚本
253 89
|
6月前
|
安全 PHP
PHP 8 新特性实战:提升开发效率的利器
PHP 8 新特性实战:提升开发效率的利器
217 87
|
6月前
|
SQL 缓存 大数据
PHP性能优化实战:4个立竿见影的技巧
PHP性能优化实战:4个立竿见影的技巧
242 88
|
6月前
|
安全 PHP
PHP 8 新特性实战:提升开发效率的利器
PHP 8 新特性实战:提升开发效率的利器
228 88
|
7月前
|
API PHP
PHP 8新特性:Match表达式与联合类型实战指南
PHP 8新特性:Match表达式与联合类型实战指南
|
3月前
|
设计模式 安全 PHP
PHP 5与PHP 7的主要区别分析
综上所述,PHP 7相比于PHP 5,不仅在性能上有显著提升,还增加了许多新特性和改进,使得PHP语言更加强大和现代化。同时,弃用了一些过时的特性和函数,更加注重代码的健壯性和安全性。然而,这些改变也意味着从PHP 5迁移到PHP 7可能需要一些代码的调整和优化。
161 10
|
6月前
|
安全 大数据 PHP
PHP 7+ 新特性实战指南:提升开发效率
PHP 7+ 新特性实战指南:提升开发效率
231 87
|
4月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
消息中间件 缓存 前端开发
PHP性能优化:从新手到高手的实战指南###
【10月更文挑战第21天】 本文将深入探讨PHP性能优化的策略与技巧,涵盖从基础代码优化到高级缓存机制的应用。通过具体案例分析,展示如何有效提升Web应用的响应速度和处理能力,帮助开发者在面对高并发场景时更加从容应对。无论你是初学者还是有经验的开发者,都能从中获得实用的建议和启发。 ###
214 8
|
前端开发 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
576 0