Esiste un'alternativa a PHP ReadFile () nel server della modalità di sicurezza?
-
27-10-2019 - |
Domanda
Ospito il mio sito su un hosting condiviso, che recentemente ha cambiato il server in modalità provvisoria (senza nemmeno avvisarlo). Uso una funzione che scarica file dal server, utilizzando il readFile () funzione (uso php). Ora, in Safe_Mode, questa funzione non è più disponibile. Esiste una sostituzione o una soluzione alternativa per gestire la situazione in cui il file sarà in grado di essere scaricato dall'utente?
Grazie
Soluzione
Come ho scritto nei commenti, readfile()
è disabilitato includendolo in disable_functions
php.ini direttiva. Non ha nulla a che fare con modalità sicura. Prova a controllare quali funzioni sono disabilitate e vedi se è possibile utilizzare qualsiasi altra funzione del filesystem (-s) per fare cosa readfile()
fa.
Per vedere l'elenco delle funzioni disabilita, usa:
var_dump(ini_get('disable_functions'));
Potresti usare:
// for any file
$file = fopen($filename, 'rb');
if ( $file !== false ) {
fpassthru($file);
fclose($file);
}
// for any file, if fpassthru() is disabled
$file = fopen($filename, 'rb');
if ( $file !== false ) {
while ( !feof($file) ) {
echo fread($file, 4096);
}
fclose($file);
}
// for small files;
// this should not be used for large files, as it loads whole file into memory
$data = file_get_contents($filename);
if ( $data !== false ) {
echo $data;
}
// if and only if everything else fails, there is a *very dirty* alternative;
// this is *dirty* mainly because it "explodes" data into "lines" as if it was
// textual data
$data = file($filename);
if ( $data !== false ) {
echo implode('', $data);
}
Altri suggerimenti
Presumo che tu stia usando readfile
Per caricare file remoti, come hai detto "dal server". Se ciò è corretto, il tuo problema non è una modalità SECH ma che non è più consentito l'apertura degli URL con le normali funzioni di file PHP (impostazione allow_url_fopen
Disabilitato).
In tal caso, puoi usare PHP funzioni di ricciolo per scaricare file. Anche, file_get_contents
è un'alternativa valida.