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



@漏刻有时

相关文章
|
3月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
3月前
|
PHP
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
本文介绍了解决PHP常见问题的步骤,包括定位和创建`php.ini`文件,以及解决`mb_strlen()`函数未定义和DLL模块加载错误的具体方法。
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
|
13天前
|
编译器 PHP 开发者
PHP 8新特性解析与实战应用####
随着PHP 8的发布,这一经典编程语言迎来了诸多令人瞩目的新特性和性能优化。本文将深入探讨PHP 8中的几个关键新功能,包括命名参数、JIT编译器、新的字符串处理函数以及错误处理改进等。通过实际代码示例,展示如何在现有项目中有效利用这些新特性来提升代码的可读性、维护性和执行效率。无论你是PHP新手还是经验丰富的开发者,本文都将为你提供实用的技术洞察和最佳实践指导。 ####
25 1
|
27天前
|
自然语言处理 安全 PHP
深入浅出PHP编程:从基础到实战
【10月更文挑战第36天】本文将带你走进PHP的奇妙世界,无论你是初学者还是有一定经验的开发者,都将从中获益。文章首先介绍PHP的基础概念和语法,然后通过实际代码示例,展示如何利用PHP进行高效的Web开发。最后,我们将探讨一些高级主题,如面向对象编程、数据库操作以及安全性问题。让我们一起开启PHP的学习之旅吧!
|
28天前
|
存储 Serverless PHP
PHP编程入门:从基础到实战
【10月更文挑战第35天】本文将带你走进PHP的世界,从最基本的语法开始,逐步深入到实际应用。我们将通过简单易懂的语言和实际代码示例,让你快速掌握PHP编程的基础知识。无论你是初学者还是有一定经验的开发者,都能在这篇文章中找到你需要的内容。让我们一起探索PHP的魅力吧!
|
1月前
|
前端开发 中间件 PHP
PHP框架深度解析:Laravel的魔力与实战应用####
【10月更文挑战第31天】 本文作为一篇技术深度好文,旨在揭开PHP领域璀璨明星——Laravel框架的神秘面纱。不同于常规摘要的概括性介绍,本文将直接以一段引人入胜的技术剖析开场,随后通过具体代码示例和实战案例,逐步引导读者领略Laravel在简化开发流程、提升代码质量及促进团队协作方面的卓越能力。无论你是PHP初学者渴望深入了解现代开发范式,还是经验丰富的开发者寻求优化项目架构的灵感,本文都将为你提供宝贵的见解与实践指导。 ####
|
1月前
|
存储 Java PHP
PHP编程之旅:从基础到实战
【10月更文挑战第23天】本文将带你走进PHP的世界,探索这个流行的服务器端脚本语言的魅力。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的信息和实用的代码示例。我们将从PHP的基本概念开始,然后深入到实际应用中,最后通过一个实战项目来巩固所学知识。让我们一起开启这段激动人心的PHP编程之旅吧!
24 0
|
3月前
|
前端开发 PHP
php学习笔记-php文件表单上传-day06
本文介绍了PHP文件上传处理流程、预定义变量`$_FILES`的使用、文件上传状态代码以及文件上传实现函数。同时,通过一个文件上传的小例子,演示了文件上传表单的创建、文件上传表单处理的PHP页面编写以及运行测试输出。
php学习笔记-php文件表单上传-day06
|
3月前
|
前端开发 PHP 数据库
PHP编程入门:从基础到实战
【9月更文挑战第23天】本文将引导你进入PHP编程的世界,从基础知识到实际项目应用,逐步深入。我们将一起探索PHP的基本语法、常用函数和框架使用,以及如何在实际项目中运用PHP进行开发。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的参考和启示。让我们一起踏上PHP编程的学习之旅吧!
|
3月前
进入靶场,出现一张照片,右击查看源代码,发现有一个注释的source.php文件
这段代码实现了一个网站上弹出的促销海报动画效果,包含一个关闭按钮。当促销海报弹出时,会在三秒后开始抖动一两下。海报使用固定定位居中显示,带有阴影和圆角,关闭按钮位于右上角。可以通过修改时间参数调整弹出时间。
20 0