Как получить результат ошибки unlink

Если вызов unlink () возвращает false для указанного пути, как вы узнаете, в чем причина отказа (т.е. EISDIR, ENOENT, ELOOP и т. Д.)? PHP 5.x работает на Redhat Linux.

вот один из способов

unlink("/path/that/does/not/exist"); print_r(error_get_last()); 

Дополнительную информацию см. В разделе Обработка ошибок.

Я не думаю, что можно вернуть код ошибки, выданный системой. Возможно, это связано с тем, что PHP должен быть переносимым, а разные ОС имеют разные методы отчетности об ошибках.

Разумеется, вы можете сделать exec('rm ....') и вернуть уровень ошибки, но это не очень портативно, и ваше приложение зависит от прав exec() .

В противном случае, если вам действительно нужно это, на ум приходит только очень хакерское обходное решение: создайте собственную функцию обработчика ошибок, которая пытается извлечь причину сбоя из предупреждений unlink throws – например, отметьте «Разрешить отказ» или просто вы получите полное сообщение об ошибке.

Создайте функцию обертки вокруг unlink которая устанавливает и повторно устанавливает обработчик ошибок. Что-то вроде этого:

 function my_unlink($file) { set_error_handler("my_error_handler"); unlink($file); restore_error_handler(); } 

вы получаете мой дрейф.

Если кто-то знает лучшее решение – мне было бы интересно услышать об этом тоже …

Боюсь, это невозможно. Вот код C, который обрабатывает unlink в php 5.3.

 ret = VCWD_UNLINK(url); <-- calls unlink(2) if (ret == -1) { if (options & REPORT_ERRORS) { php_error_docref1(NULL TSRMLS_CC, url, E_WARNING, "%s", strerror(errno)); } return 0; } 

как вы можете видеть, errno не возвращается, и нет доступа к нему позже.

Об этом уже сказано об ошибке , но, похоже, это не слишком привлекает внимание. 😉

См. Также эту дискуссию