我正在尝试执行一个 php 进程文件,在一个包含该 php 文件和其他文件(可以是图像、文本文档、pdf、其他代码文件等)的文件夹中
我需要生成一个过程来检测主要图像格式并自动删除它。
我有这个代码:
$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。 这是一个问题吗?我可以更改权限吗? 可能是另一个原因。
所有文件都在同一个文件夹中。 为什么文件没有被删除?
提前致谢。
我试图删除文件夹中的所有图像,但不起作用。
将文件的权限设置为 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)) {
echo "<br />Found this image file: " . $file;
if (unlink($filePath)) {
echo '$file has been deleted';
} else {
echo '$file has not been deleted';
}
}
}
}