Я всюду искал эту проблему и не могу найти решение. У меня есть это:
<?php
$file_name = $_GET['name'];
$file_delete = '../u/' . $file_name;
unlink($file_delete);
//header("location: $file_delete");
?>
unlink
возвращает ошибку: No such file or directory
, но если я попробую header("location: $file_delete");
это открывает файл (изображение в этом случае).
Где я могу ошибаться?
У меня та же проблема с этим (упрощенным) кодом:
if(is_file($file)) {
unlink($file);
}
Где $ file — абсолютный путь к файлу.
Следующая ошибка генерируется в производстве (у провайдера), а не при локальном тестировании:
Got error 'PHP message: PHP Warning: unlink(/xxxx/yyyy/zzzz/abcdefg.txt): No such file or directory in /xxxx/yyyyy/zzzzz/phpfile.php on line 1234'
После некоторых исследований, unlink()
похоже, не позволяет использовать относительные пути (с «../»).
Вот альтернатива:
<?php
$file_name = $_GET['name'];
$file_delete = dirname(__FILE__, 2) . '\\u\\' . $file_name;
unlink($file_delete);
?>
$file_delete
здесь абсолютный путь к файлу, который вы хотите удалить.
Напоминание: /
используется для систем Unix, \
для Windows.
PHP документ:
— http://php.net/manual/en/function.unlink.php
— http://php.net/manual/en/function.dirname.php
У меня также была такая же проблема с моим кодом. Что я сделал, чтобы решить эту проблему:
Сначала выполните:
var_dump($image_variable) // var_dump($file_delete) in your case.
Выводит: string (23) (my-image-path)
Когда я начал считать строку, я нашел 22 символа. Я задавался вопросом, где 23-й?
Я проверил и тщательно просчитал, в конце я обнаружил, что в конце пути к моему изображению есть место. Поэтому я использовал функцию php trim () для удаления пробелов. Подобно,
$trimed_path = trim($image_variable) // trim($file_delete) in your case.
Второе: теперь выполните,
unlink($trimed_path).
ИЛИ ПРОВЕРИТЬ, КАК
if(unlink($trimed_path))
{
echo "File Deleted";
}
else
{
echo "Error Deleting File";
}
Мне понадобилось пару часов, чтобы разобраться. Как упоминалось выше, unlink () требователен к путям.
Решение:
1-й) Определите путь (вот как WordPress это кстати):
define( 'ROOTPATH', dirname(dirname(__FILE__)) . '/' );
2) Делать:
unlink(ROOTPATH.'public_html/file.jpg');