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

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にchmodしました。さらに、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 に答える