Tach!
Nicht abfangen, vermeiden lautet die Devise. Es gibt die Option CURLOPT_FILE und auch CURLOPT_WRITEFUNCTION.
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
Beim RETURNTRANSFER war doch das Problem, dass die Datei vollständig in den Speicher geladen wurde und der dann platzte. Das gilt es doch grade zu vermeiden. Und deswegen meinte ich, du sollst das gleich in eien Datei schreiben lassen.
function curl_write_function($handle, $data) {
global $curl_data_string;
$curl_data_string .= $data;
if (strlen($curl_data_string) > 100000) {
return 0;
}else {
return strlen($data);
}
}
Damit jedenfalls hast du nichts gewonnen. Diese Funktion legt nun global einen String mit dem Inhalt an. Der wird ständig stückchenweise länger und muss dazu gegebenenfalls umkopiert werden. Es kann sein, dass du nun bei kleineren Dateien schon auf das Speicherlimit stößt.
Verstehe ich das richtig, die Anfrage wird gestoppt, wenn die Länge des z.B. angefragten XML-Dokumentes mehr als 100000 Zeichen hat und gibt dann nix zurück? Wenn die Bedingung erfüllt wird bekomme immer eine 1 zurück.
Vermutlich. Probier es aus. Aber, hmm? Wenn dir das Dokument zu groß ist, dann lässt du es einfach bleiben, es zu verarbeiten?
Das klappt auch, muss ich also diese Bedingung abfragen und bei 1 den Curl Request erneut ohne CURLOPT_WRITEFUNCTION absetzen?
Was ist mit dem Inhalt von $curl_data_string?
Was ist denn dein eigentliches Ziel? Müssen die Daten unbedingt vollständig im Speicher sein?
XML sagst du. Willst du das dann noch auswerten? Das belegt dann unter Umständen noch mehr Speicher, wenn du daraus einen DOM-Baum erstellst. Wenn dir nun keine Methode einfällt, das Teil häppchenweise zu verarbeiten, wirst du um ein höheres Speicherlimit nicht umhin kommen.
dedlfix.