Confermo il problema: ho provato a caricare un file via PHP, con due nomi diversi:
Codice:
senza-spazio.jpg 19.50KB 2023-01-21 18:08 0664 xxxxx 999
con spazio.jpg 19.50KB 2023-01-21 18:08 0600 48 999
xxxxx è il mio user id.
Visto che ad un certo punto anche il mio codice chiama move_uploaded_file(), ho provato a stampare il risultato di stat(), sia sul file temporaneo che sulla destinazione finale:
Codice PHP:
$tempname = $_FILES['image']['tmp_name'];
$target = self::IMAGES_ROOT . $path . $filename;
echo $filename;
echo "\tPrima di move_uploaded_file: {$campi_utili($tempname)}";
move_uploaded_file($tempname, $target);
echo "\tDopo move_uploaded_file: {$campi_utili($target)}";
$chown_result = var_export(chown($target, getmyuid()), true);
$chmod_result = var_export(chmod($target, 0644), true);
echo "\tDopo chown → {$chown_result} e chmod → {$chmod_result}: {$campi_utili($target)}";
Risultato? Sembra che move_uploaded_file() non riesca ad applicare owner e permessi corretti se il nome del file contiene almeno uno spazio. Inoltre, chown e chmod non riescono a risolvere il problema, ma sembrano completare con successo
Codice:
senza-spazio.jpg
Prima di move_uploaded_file: [ mode => o100600, uid => 48, gid => 999 ]
Dopo move_uploaded_file: [ mode => o100664, uid => xxxxx, gid => 999 ]
Dopo chown → true e chmod → true: [ mode => o100664, uid => xxxxx, gid => 999 ]
con spazio.jpg
Prima di move_uploaded_file: [ mode => o100600, uid => 48, gid => 999 ]
Dopo move_uploaded_file: [ mode => o100600, uid => 48, gid => 999 ]
Dopo chown → true e chmod → true: [ mode => o100600, uid => 48, gid => 999 ]
Rinonimare il file dopo averlo caricato non risolve quindi il problema :(
Il resto del mio codice PHP non ha problemi a leggere il file con proprietario 48, ma tentare di scaricarlo via FTP restituisce (correttamente, dal punto di vista del server) un errore:
Codice:
Command: RETR con spazio.jpg
Response: 550 Impossibile aprire con spazio.jpg: Permesso negato