[php-src] Issue #8597: Warning messages when rename() fails are stupidly vague
| From: | php4fan | Date: | Fri, 20 May 2022 16:43:35 +0000 |
| Subject: | [php-src] Issue #8597: Warning messages when rename() fails are stupidly vague | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-241567@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/8597
Author: php4fan
### Description
**The following code:**
```php
<?php
// Let /path/to/this-file-exists.txt be a file that exists
// Let /path/to/this-file-does-not-exist.txt be a path that does _not_ exist.
// Let /this/directory/exists be a directory that exists
// Let /this/directory/does/not/exist be a path that does _not_ exist
rename('/path/to/this-file-exists.txt',
'/this/directory/does/not/exist/newfilename.txt');
rename('/path/to/this-file-does-not-exist.txt',
'/this/directory/exists/newfilename.txt');
```
**Resulted in this output:**
```
Warning: rename(/path/to/this-file-exists.txt, /this/directory/does/not/exist/newfilename.txt): No
such file or directory
Warning: rename(/path/to/this-file-does-not-exist.txt, /this/directory/exists/newfilename.txt): No
such file or directory
```
That is, the **EXACT SAME ERROR MESSAGE** in both cases, saying "no such file or
directory", but without clarifying WHAT file or directory is missing.
**But I expected this output instead:**
A different error message in each case, allowing me to distinguish whether the rename failed
because:
- the source file doesn't exist, or
- the target directory doesn't exist, preventing the creation of the target file
Correct error messages in this example could be something like:
```
Warning: rename(/path/to/this-file-exists.txt, /this/directory/does/not/exist/newfilename.txt):
Couldn't write destination file. No such file or directory:
'/this/directory/does/not/exist'.
Warning: rename(/path/to/this-file-does-not-exist.txt, /this/directory/exists/newfilename.txt):
Couldn't read source file. No such file or directory:
'/path/to/this-file-does-not-exist.txt'
```
The **exact same issue** happens when the error is **"permission denied"**: it does not
specify on which file the permission was denied, what permission was denied (reading or writing) or
whether it was on the source or target side of the operation.
I'm not exactly sure what the best and most elegant way to phrase the message is, that covers
all the possible cases with the least variations, but the important thing is that it conveys all the
information, and the current message definitely doesn't.
### PHP Version
PHP 8.1.6
### Operating System
debian 10