"unlink" не работает на локальном экземпляре Wordpress? - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь изменить плагин, чтобы файлы изображений из каталога можно было удалить с помощью ссылки 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';
}
?>

Я получаю сообщение о том, что у меня нет разрешения, но я 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

Каталог и имя файла указаны правильно, поэтому я просто не понимаю, в чем проблема ...

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

Ну, вы уже знаете, что это плохая практика, однако проблема, с которой вы сталкиваетесь, скорее всего, связана с использованием относительного пути.

Попробуйте обернуть путь к файлу realpath и посмотрите, решит ли это проблему. Также имейте в виду, что если realpath вызывается с нулевым аргументом, он вернет текущий каталог, который вы наверняка не захотите удалять.

Для получения дополнительной информации см. Документацию для unlink и file:// протокола.

0 голосов
/ 02 февраля 2012

У вас должны быть неправильные каталоги.

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.

...