php unlink.не возвращает сообщение об ошибке и не удаляет мой файл - PullRequest
4 голосов
/ 19 августа 2011

Я просто пытаюсь удалить файл, используя PHP unlink.Здесь я нашел ответ, который сказал мне лучший способ сделать это, и я реализовал его.Вот код, который я использую.

$log_path = realpath($log_file);
if (is_readable($log_path)){
    print file_exists($log_path);
    $deleted = unlink($log_path);
    print "Deleted:".$deleted;
    print "Exists:".file_exists($log_path);
}

Это просто печатает 1Deleted:exists:1.Я также пытался добавить в print_r(error_get_last()); под unlink, но это также ничего не вернул.Все файлы в каталоге chmod 777 * и другие обработчики файлов не открыты..... какого чёрта ...

Ответы [ 7 ]

4 голосов
/ 19 августа 2011

unlink возвращает либо true, либо false.Если вы попытаетесь напечатать false (print $deleted;), будет напечатана пустая строка.

Попробуйте вместо этого:

print $deleted ? "The file was deleted" : "The file was not deleted";
3 голосов
/ 19 августа 2011

Код, который вы использовали, излишне громоздок. Простой вызов unlink должен помочь:

unlink( $log_file );

Но давайте выясним, что происходит не так. Файл существует, потому что вы вводите цикл, в котором выполняются операторы печати. Вызов unlink, вероятно, возвращает false, потому что вывод «11», а не «111».

Итак, моя интуиция говорит, что это проблема с правами доступа к файлам. Вы уверены, что веб-пользователь имеет разрешение на удаление файла? Можете ли вы показать нам права доступа к папке, например, запустив ls -la в командной строке и вставив вывод?

2 голосов
/ 19 августа 2011

Я думаю, вам нужно проверить, является ли $ log_path файлом. Использование:

if( is_file( $log_path ) AND is_readable( $log_path ) )

Кроме того, добавьте следующую строку в начало вашего скрипта, чтобы показать все ошибки и предупреждения:

ini_set( 'error_reporting', E_ALL );
1 голос
/ 19 августа 2011

Я на самом деле не знаю проблемы, но вы должны проверить, доступен ли файл для записи, а не для чтения:;)).

1 голос
/ 19 августа 2011

Это не означает, что ваши файлы должны быть 0777. Также необходимо, чтобы ваш каталог был доступен. Какой мод вашей директории?

Далее: print $deleted; явно выведите false, что показано как ничто. Попробуйте это: echo $deleted ? 1 : 0;

0 голосов
/ 31 мая 2018

для меня это была проблема с обещаниями решить ее с помощью

  chown    -R www-data:www-data      /var/www/
  chmod    -R g+rwx                  /var/www/
  chmod    -R 0755                  /var/www/

убедитесь, что php работает под пользователем www-data в www.conf например, я использую PHP 7.2 nano /etc/php/7.2/fpm/pool.d/www.conf Измените эти значения: -

listen.owner = www-data
listen.group = www-data
0 голосов
/ 19 августа 2011

file_exists кэширует результат операции, вы должны вызвать clearstatcache () перед вторым вызовом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...