XaraX: Script im Hintergrund ausführen

Beitrag lesen

Hallo Andreas,

vermutlich hast Du einen direkten Lesezugriff bsw. mit file() auf die verarbeitende Datei gemacht.

Ich hoffe es ist Dir recht, daß ich ein wenig aushole:

1.
    readfile() und Konsorten stellen von alleine einen formschönen
    HTTP-Request, wenn PHP mit allow_url_fopen On konfiguriert ist, über
    wrapper zusammen. Der Lesezugriff wird dabei automatisch mit einem
    Schema versehen und an den Server zugestellt.
    Jedoch sind diese Funktionen darauf ausgerichtet den Response zu
    verarbeiten.
    Bis zur vollständigen Ableistung des Response wird die Verarbeitung
    des Scripts gestoppt.
    Das macht auch Sinn, da davon auszugehen ist, das die über eine
    X-read()-Funktion eingelesenen Daten verarbeitet werden wollen
    (denken wir an das eigentliche Ziel DB-Daten irgendwann mal zu be-
    kommen).
    Im übrigen auch die Beschränkung mit ini_se('max_execution_time',1)
    bringt NULL Erfolg.

2.
    Prizipiell hast Du die Möglichkeit alle zu verarbeitende Datein mit
    einem reellen Request der verarbeitungs.php zukommen zu lassen.
    Daher kannst Du über Netzwerkfunktionen Dir einen Request selbst
    zusammen bauen. http://de3.php.net/manual/de/ref.network.php
    Alle zu verarbeitenden Daten mußt Du dabei von Hand anlegen.
    Nur läßt Du NICHT! aus der aufgebauten Verbindung Daten auslesen,
    da Du sonst nicht mehr getan hättest, als readfile() o. ä. zu
    emulieren.

3.
    In der Praxis ist mir das viel zu mühselig zu programmieren. Daher
    lege ich die zu verarbeitenden Dateien in eine Datei ab und schicke
    nur noch einen Request an die verarbeitungs.php. Diese ist der Abla-
    geort und der Name der Datei bekannt. Das verkürst die exakte
    Ausführung eines Request auf lediglich Drei zu sendende Zeilen.
    Deine beiden Scripte sollten folgendem Prinzip folgen:

ANFRAGE.PHP

<?php
header('Location: http://localhost/');
$s=fsockopen('localhost',80);
fputs($s,"GET /verarbeitungs.php HTTP/1.1\r\n");
fputs($s,"Host: localhost\r\n");
fputs($s,"Connection: close\r\n\r\n");
fclose($s);
?>

VERARBEITUNGS.PHP

<?php
sleep(60);
touch('zzzz.txt');
?>

Wobei sleep() die lange Wartezeit simuliert. Die Datei "zzzz.txt" wird irgendwann auch mal erstellt (nur 60 secunden waren es irgendwie nie ;)

Gruß aus Berlin!
eddi

--
Manchmal trifft es einen doch ganz unverhofft t86591:
> '..."Vorläufig abgebrochen" ist ungefähr so sinnvoll formuliert, wie "einstweilig erschossen" oder "temporär verbrannt"...'
Ich danke Sven für diese Erkenntnis - Gott, was habe ich gelacht ;)