Ich erreiche den Servertimout machmal :(

Hallo zusammen,
manchmal, bei größeren Datenmengen, läuft mein Script nicht durch.
Ich denke es liegt an dem gesetzten Timeout für PHP- Scripte (meist 30 Sekunden CPU- Zeit, effektiv aber nur wenige Sekunden… egal).

Andererseites werden im Script zum Teil Textvariablen mit manchmal bis zu 100 KB oder mehr zwischen etlichen Funktionen hermumgeschoben.
Wieviel Hauptspeicher dabei drauf geht weis ich nicht.
Vielleicht 1 MB … oder doppeltsoviel oder nur halb.

Wenn ich mit Pointern, also verweisen auf Speicherplätze arbeiten würde könnte ich diese Menge vielleicht vierteln oder mehr.

Glaubt Ihr das dies was nützt ? Läuft das Script dann durch oder ist wenigstens schneller ?

Danke Sebasitan

Wenn du kannst setz doch den Timeout fuer dein Script auf undendlich: set_timeout(0);

Sollte man aber mit vorsicht benutzen :wink:

In der Regel sind die Timeouts für Scripte vom Provider eingestellt und lassen sich nicht einfach umbiegen.

Aber ich hatte gerade einen ähnlichen Fall in JavaScript. Natürlich bringt es etwas, wenn man solche häufigen und speicherintensiven umkopierereien vermeidet!! Auch wenn eine Stringvariable ständig benutzt wird um viele kurze Strings anzuhängen wird es schnell kritisch. (häufig der Fall, wenn die Ausgabe des PHP nochmal gepuffert wird. In so einem Fall würde ich mal das Puffern in einem File ausprobieren. Möglicherweise ist der IO schneller, als das ständige allocieren von neuem speicher & umkopieren).

Übrigens, der Begriff CPU-Zeit gibt soweit ich weiß die Zeit an für die die CPU wirklich mit deinem Prozess beschäftigt war. Wenn also die CPU-Zeit auf 30 Sekunden liegt, dann kann da real eine Laufzeit im Minutenbereich rauskommen, wenn sich gerade viele Prozesse die CPU teilen.

Gruß
Benky

undendlich: set_timeout(0);

Danke ! Übrigens die Funktion heißt:
set_time_limit(0);

Aber leider läuft PHP bei meinem Provider im
Safemode.
Die einzige Möglichkeit, dies zu umgehen, ist den Safemode im configuration file auszuschalten, was ich nicht darf.

Eine notlösung wäre den Bearbeitunsstand zwischenzuspeichern und das Script neu über die URL aufzurufen… ist aber sicher kompliziert… habs nämlich schon mit teilerfolgen versucht.

Gruß Sebastian

Legt die Zeit in Sekunden fest, die ein Script laufen darf. Ist diese Zeit abgelaufen,

wird ein Fehler zurückgegeben. Der Standard liegt bei 30 Sekunden,

es sei denn, max_execution_time ist configuration file eingetragen.

Bei einer Einstellung von 0 Sekunden ist die maximale Ausführungszeit nicht begrenzt.

Wenn set_time_limit() aufgerufen wird, dann startet der Zähler neu.

Das heisst, wenn die Standardeinstellung 30 Sekunden beträgt und nach 25 Sekunden durch ein Script ein Aufruf wie z.B. set_time_limit(20) erfolgt, darf das Script insgesamt 45 Sekunden laufen, bevor eine Fehlermeldung ausgegeben wird.

Achtung: Wenn PHP im Safemode läuft, hat set_time_limit() keinen Effekt.

Die einzige Möglichkeit, dies zu umgehen, ist den Safemode im configuration file auszuschalten.

Re^2: Ich erreiche den Servertimout machmal :frowning:
Ja den Timeout kann ich wohl nicht umbiegen(Puretec).

Ich habe jetzt festgestellt, das es anscheinend weniger mit der effizienten Speichernutzung, als vielmehr mit der Datensatzmenge (MySql-Select) und meinen damit verbundenen PHP-Funktionen zu tun hat.

Gebe ich bei 8 Datensätze alle Spalten (mediumtext etc.)
aus geht das ganz flott.
Gebe ich bei 15 Datensätze mit nur wenigen Spalten (nur varchar… aus) stoppt das Script schon bald.

Kannst auch gern mal selber ausprobieren:
http://l-cip.com/LCiP/MindTree/

a) Einmal Zeichenmenge auf „Gesamten Beitrag“ mit
Max.Anzahl „8“ stellen.

b) Und dann einmal Zeichenmenge auf „Nur Titel“ mit
Max.Anzahl „15“ stellen.

a) ist denke ich viel Speicherintensiver, zumindest siehts äußerlich so aus
b) dagegen anscheinden gar nicht. Trotzdem ist a) viel schneller.

P.S.: Das Ergebnis wird jedoch noch sehr durch einen ServerCache verfälscht. Im Fall a) wird aus dem Cache geladen im Fall b) kann noch nicht aus dem Cache geladen werden, weil der FAll noch niemals generiert wurde.

Tja auf jeden Fall wäre ein arbeiten mit Zeigern auf Speicherplatz ein besserer Programmierstiel.
Wird viel arbeit werden… puhh… was solls… bins ja gewohnt.
Hoffentlich bringts auch was.

Gruß Sebastian

Huch… jetzt hats doch einmal geklappt !
Mist, jetzt gehts doch.
Vielleicht war der Server gerade nicht besondern ausgelastet.

Blöd das das alles nicht so leicht rekonstruierbar ist und ich nicht recht Versuchsbedinungen definieren kann.

Was schneller: substr in MySql od. substr in PHP ?
Hallo zusammen,

in einem Selct verwende ich
SUBSTRING(CONCAT(a.mediumtext1,a.mediumtext2,a.mediumtext3),1, … )

Natürlich liese sich das auch in PHP machen.
substr( $text ,0, … )

Was ist schneller ? Zu empfehlen ?

Ich denke im Select ist zumindest speicherschonender, da kein überflüssiger Text mit übertragen wird.
Müsste dann auch schneller sein - oder ?

Wie ist es mit REPLACE ?
Schneller in MySql oder in PHP ?

Danke Sebasitan

Ich habs !
Mein Scrpt generierte ein Html-Output der ca. 1,5 MB groß war.
Das war soweit OK.
Aber am Ende durchsuchte und ersetzte es diesese riesen File noch mal… Das dauerte zu lange !

Ich hab jetzt eine Lösung gefunden :smile:

Danke

Sebastian