-1

我正在尝试修改插件,以便可以使用 html 链接删除目录中的图像文件。我的代码输出了一个包含图像缩略图、图像链接和删除文件链接的表格:

<?php                                                   
   $dirname = "../wp-content/themes/teenclub/images/slider/"; 
   $images = scandir($dirname); 
   $ignore = array(".", "..", ".DS_Store");

   foreach($images as $curimg){ 
       if(!in_array($curimg, $ignore)) {
       echo "<tr ><td><img width='200' src='$dirname$curimg'/></td><td><a href='$dirname$curimg'/>$curimg</a></td><td><a href='../wp-content/plugins/wp-easy-uploader/delete.php?file=$curimg'>Delete</a></td></tr>"; 
       };
   }                         
?>      

删除.php:

<?php
$dir = '/Users/edmcmanwich/Desktop/TEMP/dev.teenclub.com';
$file = $dir.'/'.$_GET["file"];

if(is_writable($file)) {
  unlink($file);
} else {
  echo 'you dont have perms dude';
}
?>

我收到消息说我没有权限,但我已将所有文件 chmod 到 777。此外,MAMP 的 php_error.log 给我这个:

[01-Feb-2012 21:10:13] PHP Warning:  unlink(../wp-content/themes/teenclub/images/slider/kids.png) [<a href='function.unlink'>function.unlink</a>]: No such file or directory in /Users/edmcmanwich/Desktop/TEMP/dev.teenclub.com/wp-content/plugins/wp-easy-uploader/delete.php on line 4

目录和文件名是正确的,所以我只是不明白问题是什么......

4

2 回答 2

0

您必须有错误的目录。

unlink显示文件位置,../wp-content/themes/teenclub/images/slider/kids.png但您的目录设置为/Users/edmcmanwich/Desktop/TEMP/dev.teenclub.com. 因此,您的完整路径应该是/Users/edmcmanwich/Desktop/TEMP/dev.teenclub.com/../wp-content/themes/teenclub/images/slider/kids.png(或/Users/edmcmanwich/Desktop/TEMP/dev.teenclub.com/kids.png根据您的来源),根据您的错误消息,情况并非如此。

运行echo getcwd();看看你的删除脚本在哪个目录运行,你应该看到文件路径不正确。或者,该文件已被删除,因此不存在。

此外,这是非常不安全的,因为任何人都可以传递他们想要的任何东西$_GET['file']并可能删除文件。例如,如果你搞砸了 的权限/etc/passwd,有人可以用 . 删除它../../../../../../../../../../../../etc/passwd

于 2012-02-02T05:42:40.060 回答
0

好吧,您已经知道这是不好的做法,但是您遇到的问题很可能涉及您使用相对路径。

尝试包装文件路径,realpath 看看是否能解决问题。另请注意,如果realpath使用 null 参数调用它,它将返回您肯定不想删除的当前目录。

unlink有关更多信息,请参阅file://协议的文档。

于 2012-02-02T05:47:00.603 回答