小能豆

无法使用 PHP 的 Unlink 函数从文件夹中删除图像

php

我正在尝试在包含此 php 文件和其他文件(可以是图像、文本文档、pdf、其他代码文件等)的文件夹中执行 php 进程文件

我需要生成一个过程来检测主要图像格式并自动删除它。

我有这个代码:

$dirPath = '.';
$files = scandir($dirPath);  
foreach ($files as $file) {
    $filePath = $dirPath . '/' . $file;
    if (is_file($filePath)) {
        //echo $file . "<br>";
        $file_parts = explode(".", $file);
        $file_extension = $file_parts[1];

        $image_extensions = array( "jpg", "png", "jpeg", "tiff", "webm", "jpeg", "gif" );

        echo "<br />Found this file: ".$file;
        foreach($image_extensions as $i_e){
            if (strcmp($file_extension, strval($i_e)) === 0) {
                chmod ($file, 0777);
                unlink($file);
                echo 'Deleted for being an image.';
            }
        }

    }
}

但永远不会删除它。文件的权限级别为 0644。这是一个问题吗?我可以更改权限吗?可能是另一个原因。

所有文件都在同一个文件夹中。为什么文件没有被删除?

提前致谢。

我试图删除文件夹中的所有图像,但不起作用。


阅读 193

收藏
2024-02-23

共1个答案

小能豆

将文件的权限设置为 644 应该不是问题,因为所有者在 PHP 中同时具有读取和写入权限。但是,请检查该文件是否属于运行 PHP 脚本的用户所有。

以下是您代码中的一些调整,可能会有所帮助!

$dirPath = '.';

$files = scandir($dirPath);

$image_extensions = array("jpg", "png", "jpeg", "tiff", "webm", "jpeg", "gif");

foreach ($files as $file) {

    $filePath = $dirPath . '/' . $file;

    if (is_file($filePath)) {

        $file_parts = explode(".", $file);

        //The function strtolower() ensures case-insensitive comparison of file extensions
        //The function end() moves the internal pointer to the last element in the array
        $file_extension = strtolower(end($file_parts));

        if (in_array($file_extension, $image_extensions)) {
            if (unlink($filePath)) {
                echo '$file has been deleted';
            } else {
                echo '$file has not been deleted';
            }
        }
    }
}
2024-02-23