PHP unlink () обработка исключения

Ну, мне было интересно, могу ли я unlink()правильно обработать эту функцию. Я не хочу, чтобы unlink()функция выдавала какую-то неприятную ошибку, если она не может попробовать { unlink ( "secret / secret.txt" ); } catch ( Исключение $ e ) { print "whoops!" ; // или даже оставляя его пустым, поэтому ничего не отображается } файл (может быть, из-за того, что файл не найден).

Я попробовал что-то вроде

if(unlink($file)){
  //leaving here empty must ensure that nothing is displayed
}else{
  //leaving here empty must ensure that nothing is displayed
}

Но это не работает. Я не эксперт в PHP. Я искал и нашел этот код обработки исключений где-то в Интернете. Но, насколько я помню, мои школьные дни, то же самое использовалось для Java. Так должно было сработать. Я не знаю, что не так с кодом.

Или я могу просто использовать оператор if..else, например

unlink

Но этот код не работает. Где я делаю ошибку? Каковы другие способы правильного его решения?

Можно ли скрывать ошибки, манипулируя сообщением об ошибках (PHP) (среда разработки и разработки)?

php,exception-handling,unlink,

17

Ответов: 6


17 принят

unlinkне генерирует исключений, генерирует ошибки. Правильный способ сделать это - проверить, существует ли файл, прежде чем пытаться его вызвать unlink. Если вы просто беспокоитесь о том, что у вас нет ошибок, вы должны просто отключить, display_errorsчто вы всегда должны делать в производственной среде. Затем они будут только зарегистрированы.

Не подавляйте ошибки с помощью @, редко ее рекомендуется.

Можете ли вы описать @

Я не уверен, что вы имеете в виду. Но документация здесь . Что касается того, почему вы не хотите его использовать ... Это потому, что вы никогда не знаете, что код не работает или проблематичен. Даже если код по-прежнему работает с функциональной точки зрения, у него все еще есть проблема, и эта проблема потенциально может сделать что-то еще совсем неработоспособным в какой-то момент. Если у вас никогда не было ошибки, вы, вероятно, потратите много времени на отладку.

Его штраф, чтобы изменить уровень журнала или отключить отображение ошибок, но вы никогда не хотите полностью их подавлять.


18 ов

Если вы хотите только подавить ошибку, вы можете сделать это:

@unlink('your_file_name');

Как правило, в php @ будет подавлять любую ошибку.

Лучший способ - минимизировать вероятность ошибки. Вы говорите, что одна из возможностей ошибки вызвана несуществующим файлом. Если бы я был вами, я сделаю это:

if(file_exists('your_file_name')){
    unlink('your_file_name');
}else{
    echo 'file not found';
}

Удачи :)


9

Этот метод может показаться странным, но я считаю, что это самый надежный

if(is_file($file) && @unlink($file)){
    // delete success
} else if (is_file ($file)) {
    // unlink failed.
    // you would have got an error if it wasn't suppressed
} else {
  // file doesn't exist
}

Зачем?

Во-первых, is_file - это правильный метод проверки того, существует ли файл FILE не file_exists . file_exists проверяет как каталоги, так и файлы, поэтому может возвращать TRUEдля каталога с тем же именем файла, вы не можете удалить каталог с отключением, и это приведет к ошибке.

Проверка файла существует ( is_file ), прежде чем вы отсоединяете это правильный / лучший способ удаления файла.

if(is_file($file) && unlink($file)){

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

Но это лучший способ.

Таким образом, вы можете сделать все правильно и все равно получить сообщение об ошибке!

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

разъединить

Возвращает TRUEуспех или FALSEнеудачу.

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

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

EDIT: обновленные URL-адреса ссылок


4

Вы можете использовать is_writableдля проверки наличия у вас надлежащих разрешений для изменения или удаления файла.

http://php.net/manual/en/function.is-writable.php

try {
  if(!is_writable($file))
      throw new Exception('File not writable');

  unlink($file);
}
catch(Exception $e) { /* do what you want */ }

0

Использовать PHP_Exceptionizer https://github.com/DmitryKoterov/php_exceptionizer/blob/master/lib/PHP/Exceptionizer.php

$exceptionizer = new PHP_Exceptionizer(E_ALL);
try {
        unlink($file)
    }  catch (E_WARNING $e) {
        return false;
    }
PHP, обработки исключений, разъединить,
Похожие вопросы