error 500 statt timeout
Dieter Raber
- php
0 |project-sms.at|0 fastix®0 Dieter Raber0 fastix®0 Dieter Raber0 fastix®
Hallo zusammen,
auf der Seite eines Kunden wird eine Preisliste generiert. Die Seite besteht im Prinzip aus etlichen identischen Preistabellen nach dem Muster
| Artikel mit Link | Spezifikation | Preis |
Da an den Artikel die SessionId angehaengt wird, habe ich versucht, die ganze Seite in Heredoc-Syntax (print <<<END bis END;) auszugeben, was lokal auch funktioniert hat. Auf dem Live-Server bei 1 & 1 wird stattdessen ein Error 500 angezeigt. Das Problem laesst sich loesen, wenn ich auf Heredoc verzichte und anstatt dessen <?php print SID ?> an die Links anhaenge.
Noch ein paar Eckdaten
Kann mich vielleicht jemand über das warum, weshalb, wieso aufklaeren?
Dieter
Error 500: Bad Script Request (Internet Server Fehler) ist ein Error-Code bzw. ein HTTP-Fehler-Code. Der WebServer konnte das Script (das auf diesem Server läuft) nicht ausführen. die Ursachen können z.B. bei einem fehlerhaften (syntaktisch nicht korrektem) Perl-Script oder fehlenden Script-Ausführungsrechten liegen.
Hallo,
Error 500: Bad Script Request
Ich weiss natuerlich, was ein error 500 ist, aber die Gruende trffen definitiv nicht zu, deshalb auch meine Frage hier im Forum.
z.B. bei einem fehlerhaften (syntaktisch nicht korrektem) Perl-Script
Das Script funktioniert lokal und mach nichts ausser die SessionId auszugeben
oder fehlenden Script-Ausführungsrechten liegen.
Wie schon erwaehnt, bei einzelnen prints statt heredoc funktioniert's auch auch dem Server, also sind die Rechte vorhanden
Dieter
Moin!
- die Seite ist gigantisch (220Kb), was im Zusammenhang aber ok ist
Es ist vor allem bei dieser Größe egal. Ich hole unter Umständen größere Mengen an Daten aus der Datenbank und sende diese an den Browser. Das geht definitiv. (220 Kb sind zuwenig, als dass das Skript nicht in 30s abgearbeitet wird, mit der Zeit bis zum Empfang durch den Client hat das nichts zu tun.
- safe mode ist off, trotzdem scheitert set_time_limit()
Brauchst Du also nicht...
Kann mich vielleicht jemand über das warum, weshalb, wieso aufklaeren?
Du hast einen Typo. Oder richtige Syntax, leider falsche Sprache...
Wird Dir wirklich die Error 500 Seite angezeigt? Das ist bei PHP eher selten. Normalerweise erhältst Du eine Fehlermeldung...
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hi Fastix,
Es ist vor allem bei dieser Größe egal.
Ich stimme Dir da im Prinzip zu, mein Eindruck ist aber, dass heredoc damit nicht klar kommt. Wenn ich statt heredoc einzelne <?php print SID ?> nehme geht's ja ohne Probleme.
- safe mode ist off, trotzdem scheitert set_time_limit()
Brauchst Du also nicht...
War halt mal so'n Versuch, irgendwo muss man ja anfangen...
Du hast einen Typo. Oder richtige Syntax, leider falsche Sprache...
So verzweifelt waren meine Ausfluechte gestern abend auch, haettest Du mal sehen sollen ;-)
Aber leider negativ, das Script laeuft lokal wie eine 1, egal ob Apache oder IIS, aelteres oder aktuelles PHP, Linux oder Windows.
Wird Dir wirklich die Error 500 Seite angezeigt?
Wird Sie, darfst Du mir glauben und ich kann das todsicher immer wieder provozieren.
Das ist bei PHP eher selten. Normalerweise erhältst Du eine Fehlermeldung...
Offenbar gibt es keinen Fehler im Script, error_reporting ist 2047. Die fertige HTML-Seite (die ich lokal generiert habe) validiert als feinstes XHTML.
Es gibt bei Puretec uebrigens noch einen sicheren Weg, einen 500 zu provozieren, der eigentlich keiner sein sollte. Wenn Du mit phpmyadmin einen richtig dicken Batzen Daten einspielst, sagen wir mal so 1 Mb+, passiert das gleiche, bei geringeren Datenmengen hast Du keine Probleme. Steht auch in der 1+1 FAQ. Gleiches passiert auch, wenn Du ein Script hast, das _bergeweise_ Datenbankabfragen macht.
Dieter
Moin!
Das ist bei PHP eher selten. Normalerweise erhältst Du eine Fehlermeldung...
Offenbar gibt es keinen Fehler im Script, error_reporting ist 2047. Die fertige HTML-Seite (die ich lokal generiert habe) validiert als feinstes XHTML.
Das, als was die Seite validiert ist eigentlich unerheblich.
Sag mal... wie sieht die erste Zeile denn aus (im Skript!)?
<?xml....?> ???
Es gibt bei Puretec uebrigens noch einen sicheren Weg, einen 500 zu provozieren, der eigentlich keiner sein sollte. Wenn Du mit phpmyadmin einen richtig dicken Batzen Daten einspielst, sagen wir mal so 1 Mb+, passiert das gleiche, bei geringeren Datenmengen hast Du keine Probleme. Steht auch in der 1+1 FAQ. Gleiches passiert auch, wenn Du ein Script hast, das _bergeweise_ Datenbankabfragen macht.
+----------------------------------------------------------------------------------------------+
| Das Problem ist also nicht die Laufzeit, sondern die Speicherbegrenzung: Erkannt- verbannt :)|
+----------------------------------------------------------------------------------------------+
Darüber hinaus wäre es wünschenswert, wenn man ein wenig was von Quelltext hätte. Kannst Du es mit der Endung .txt irgendwo hin stellen?
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo Fastix,
Das, als was die Seite validiert ist eigentlich unerheblich.
Sag mal... wie sieht die erste Zeile denn aus (im Skript!)?<?xml....?> ???
Nee, sondern in der heredoc-Variante
<?php
session_start();
?>
<!DOCTYPE html .....
ohne heredoc:
<?php
session_start();
$sid = SID;
print <<<END
<!DOCTYPE html .....
also nichts Sensationelles
| Das Problem ist also nicht die Laufzeit, sondern die Speicherbegrenzung: Erkannt- verbannt :)|
Das klingt wie eine gute Antwort, kannst Du das naeher erklaeren? Ich hab mittlerweile rausgefunden, dass wenn ich das Script in heredoc-Variante etwa um die Haelfte kuerze, das Problem _nicht_ auftritt
Darüber hinaus wäre es wünschenswert, wenn man ein wenig was von Quelltext hätte. Kannst Du es mit der Endung .txt irgendwo hin stellen?
Tut mit leid, die Seite enthaelt so gut wie auschliesslich Daten aus dem Shop meines Kunden und ist noch nicht oeffentlich. Im Prinzip funktioniert sie aber so:
mit heredoc:
SID wird ganz oben $sid zugewiesen
<tr>
<td><a href="http://foo.htm?$sid" target="blank">Artikelname</a></td>
<td>Artikelvarianten</td>
<td>Bestellnummer</td>
<td>Preis</td>
</tr>
Das Ganze ist also nicht sehr spektakulaer bis auf die Groesse.
Mir gefaellt Deine Idee von der Speicherbegrenzung, das klingt jedenfalls sinvoll.
Dieter
Moin!
Mir gefaellt Deine Idee von der Speicherbegrenzung, das klingt jedenfalls sinvoll.
Vor allem wird sie 1und1 gefallen- in der php.ini kann folgendes stehen:
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 30 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)
Wenn ich mir die Zahl via phpinfo() ausgeben lasse (ich lasse auch bei 1und1 hosten), dann habe ich angeblich ein Speicherlimit vom 40M und eine max_execution_time von 50000. Dennoch denke ich mal, es liegt an einem von den 3 Werten.
1und 1 schreibt in der Faq:
<zitat quelle=["link:http://faq.1und1.de/hosting/skripte_datenbanken/3.html]">
Prozesse dürfen max. 6 Sekunden Rechenzeit beanspruchen
Prozesse dürfen max. 10 Megabyte Speicher belegen
Es dürfen max. 12 Prozesse gleichzeitig laufen
Bei Überschreitung einer der oben genannten Einschränkungen wird das Skript getötet. Dieses macht sich durch einen Internal Server Error (HTTP 500) oder durch die Fehlermeldung CGI Limits reached, please try later! bemerkbar.
</zitat>
Ich vermute auch, die lassen es nicht etwa PHP selbst entscheiden, sondern verwalten die Prozesse extern (PHP läuft bei 1und1 als CGI...(Server API: CGI))
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®