Php &引用;“取消链接”;在本地Wordpress实例上不工作?
我正在尝试修改一个插件,以便使用html链接删除目录中的图像文件。我的代码弹出一个表,其中包含图像缩略图、图像链接和删除文件的链接:Php &引用;“取消链接”;在本地Wordpress实例上不工作?,php,wordpress,file-permissions,unlink,Php,Wordpress,File Permissions,Unlink,我正在尝试修改一个插件,以便使用html链接删除目录中的图像文件。我的代码弹出一个表,其中包含图像缩略图、图像链接和删除文件的链接: <?php $dirname = "../wp-content/themes/teenclub/images/slider/"; $images = scandir($dirname); $ignore = array(".", "..
<?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>";
};
}
?>
delete.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';
}
?>
我收到消息说我没有权限,但我已将所有文件复制到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
[01-Feb-2012 21:10:13]PHP警告:取消链接(../wp-content/themes/teenclub/images/slider/kids.png)[]:第4行的/Users/edmcmanwich/Desktop/TEMP/dev.teenclub.com/wp-content/plugins/wp-easy-uploader/delete.PHP中没有这样的文件或目录
目录和文件名是正确的,所以我不明白问题出在哪里…您的目录一定是错的
取消链接
显示。/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()
要查看删除脚本在哪个目录下运行,您应该看到文件路径不正确。或者,该文件已被删除,因此不存在
而且,这是非常不安全的,因为任何人都可以传递他们想要的任何东西
$\u获取['file']
,并可能删除该文件。例如,如果您使用了/etc/passwd
上的权限,有人可以使用删除它。/../../../../../../../../../../../../../../../../../../etc/passwd
好吧,您已经知道这是一种不好的做法,但是您遇到的问题很可能涉及使用相对路径
尝试将文件路径包装为
看看这是否能解决问题。还要注意,如果使用空参数调用realpath
,它将返回您肯定不想删除的当前目录
有关更多信息,请参阅和协议的文档。哦,天哪。永远不要用GET请求删除文件。只是为了增加理由,这几乎打破了我所知道的所有最佳实践。对于有副作用的操作,永远不要使用GET。有关更多信息,请参见
约定,GET和HEAD方法不应具有除检索以外的其他操作的重要性
好吧,我知道这不是一种非常安全的方法。你们能给我指出一个更合适的方向吗?一个通过JavaScript和XSS预防的POST请求。