Bei der Dateiverarbeitung mit File_get_contents kommt es zu Speichererschöpfung
Wenn Sie mit großen Dateien in PHP arbeiten, verwenden Sie die Funktion „file_get_contents“, um den gesamten Dateiinhalt abzurufen Eine Variable kann Speicherauslastungsfehler verursachen. Dies liegt daran, dass sich die Variable, die den Dateiinhalt enthält, im Speicher befindet und bei großen Dateien das zugewiesene Speicherlimit überschritten werden kann.
Um dieses Problem zu lösen, besteht ein effizienterer Ansatz darin, Dateizeiger zu verwenden und die Datei zu verarbeiten in Stücken. Auf diese Weise wird jeweils nur der aktuelle Teil der Datei im Speicher gehalten.
Hier ist eine benutzerdefinierte Funktion, die diese Chunked-Dateiverarbeitung implementiert:
function file_get_contents_chunked($file, $chunk_size, $callback)
{
try {
$handle = fopen($file, "r");
$i = 0;
while (!feof($handle)) {
call_user_func_array($callback, [fread($handle, $chunk_size), &$handle, $i]);
$i ;
}
fclose($handle);
return true;
} catch (Exception $e) {
trigger_error("file_get_contents_chunked::" . $e->getMessage(), E_USER_NOTICE);
return false;
}
}
Um diese Funktion zu verwenden, definieren Sie eine Rückruffunktion, um jeden Datenblock zu verarbeiten:
$success = file_get_contents_chunked("my/large/file", 4096, function($chunk, &$handle, $iteration) {
// Perform file processing here
});
Darüber hinaus sollten Sie erwägen, Ihre Regex-Operationen umzugestalten, um native String-Funktionen wie strpos, substr, trim und explosion zu verwenden. Dies kann die Leistung beim Arbeiten mit großen Dateien erheblich verbessern.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3