Gibt es eine Alternative zu PHP ReadFile () auf dem Server des abgesicherten Modus?
-
27-10-2019 - |
Frage
Ich hoste meine Website auf einem gemeinsam genutzten Hosting, der den Server in letzter Zeit in den abgesicherten Modus änderte (ohne dies auch nur zu benachrichtigen). Ich verwende eine Funktion, die Dateien vom Server herunterladen, indem ich die ReadFile () Funktion (ich verwende PHP). In Safe_Mode ist diese Funktion nun nicht mehr verfügbar. Gibt es einen Ersatz oder eine Problemumgehung, um die Situation zu bewältigen, in der die Datei vom Benutzer heruntergeladen werden kann?
Vielen Dank
Lösung
Wie ich in Kommentaren schrieb, readfile()
ist deaktiviert, indem es in einbezogen wird disable_functions
Php.ini Richtlinie. Es hat nichts mit zu tun Sicherheitsmodus. Überprüfen Sie, welche Funktionen deaktiviert sind, und prüfen Sie, ob Sie eine andere Dateisystemfunktion (-s) verwenden können, um was zu tun, was readfile()
tut.
Um die Liste der deaktivierten Funktionen anzuzeigen, verwenden Sie:
var_dump(ini_get('disable_functions'));
Sie könnten verwenden:
// 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);
}
Andere Tipps
Ich nehme an, Sie verwenden readfile
So laden Sie Remote -Dateien, wie Sie "vom Server" sagten. Wenn dies korrekt ist, ist Ihr Problem nicht der abgesicherte Modus, sondern das Öffnen von URLs mit normalen PHP -Dateifunktionen ist nicht mehr zulässig (Einstellung allow_url_fopen
deaktiviert).
In diesem Fall können Sie PHPs verwenden Lockenfunktionen Dateien herunterladen. Ebenfalls, file_get_contents
ist eine gültige Alternative.