Because of PHP’s unlink() not supporting exceptions natively, I’m making a wrapper function for it. It should throw a FileNotFoundException if, well, the given file could not be deleted because it doesn’t exist.
For this, I need to determine whether the error thrown by unlink() was caused by a missing file or something else.
This is my test version for a custom delete function:
public function deleteFile($path){
set_error_handler(function($errLevel, $errString){
debug($errLevel);
debug($errString);
});
unlink($path);
restore_error_handler();
}
For $errLevel and $errString I get 2 (E_WARNING) and unlink(/tmp/fooNonExisting): No such file or directory
A rather bold approach would be like this:
if( strpos($errString, 'No such file or directory') !== false ) {
throw new FileNotFoundException();
};
Question 1: How much can I rely on the error string being the same across different PHP versions? Question 2: Is there a much better way?
I would simplify the code:
Then you don’t have to catch the
$errstrand do complicated error catching. And it will work down to PHP 4 when exceptions were introduced.