Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

PHP: Speicher voll?

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 24.10.2007, 19:42

Hi. Ich habe ein PHP-Script, was die gesamte Ausgabe mittels ob_start zurückhält, da zum Schluß noch ein paar Ersetzungen über den gesamten Text gemacht werden müssen. Das funktioniert lokal auch gut, nun habe ich jedoch eine etwas größere Seite (nunja, 280 KB html), da erhalte ich nun bei 1und1 auf dem Server einen Error 500. Lokal auf nem testrechner gehts.

Dies scheint mit der Ausgabe zusammenzuhängen, denn reduziere ich diese etwas, gehts auch bei 1und1.

Das Memory-Limit liegt dort laut phpinfo() bei 40 MB, laut memory_get_usage verbraucht mein Script aber nur ca. 1.9 MB (es werden ca. 200 Datensätze aus einer DB geholt und gespeichert. Dies umzustellen wäre nicht so gut..).

Jetzt bin ich etwas ratlos, was ich machen soll...?!?!?!? Ich habs schon mit init_set("memory_limit", 64) versucht, gab aber gleich einen 500er. Und nach meiner Rechnung müssten ja noch 40MB-1.9MB = 38.1MB frei sein.

Added: Habe lokal mal mein memory_limit auf 1 MB gesetzt: Das Script läuft immer noch. Argh.

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

everflux
PostRank 8
PostRank 8
Beiträge: 939
Registriert: 01.05.2006, 17:15

Beitrag von everflux » 24.10.2007, 22:51

Mal so eine Frage: Könntest du es nicht irgendwie geschickter anstellen mit der Ausgabe und so, statt mit roher Gewalt?

Zu abstrakt? Um dir besser helfen zu können wären ein paar mehr Informationen nicht schlecht.
https://everflux.de/ blogging about life, programming, seo and the net

wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 25.10.2007, 07:55

Danke für Deine Antwort. Ja, ich habe auch schon drüber nachgedacht: Man kann ih PHP ja Output-Handler definieren, die z.B. nach jedem Zeilenumbruch aufgerufen werden. Ich ersetze aber z.B. auch Links aus Templates, die ich nicht beeinflussen kann und bricht so ein Link über eine Zeile um, würde das entsprechende preg_replace nicht mehr ansprechen.

Ich finde das Problem ja selbst sehr abstrakt ;-) Ich versuche schon seit gestern, ein Szenario zu schaffen, das leicht nachvollziehbar ist, das ist aber leider nicht so einfach :-? Ich dachte, es gäbe evtl. noch ein paar allgemeine Tipps, wie ich eher an den Fehler kommen oder ihn einkreisen kann.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


SloMo
PostRank 10
PostRank 10
Beiträge: 4880
Registriert: 04.01.2005, 18:26

Beitrag von SloMo » 25.10.2007, 08:12

Vielleicht die maximale Ausführungszeit?

Ansonsten würde ich mal im Error- und Exceptionhandling nachschauen. Wenn ein Errorhandler wiederum einen Fehler verursacht, könnte auch mal der Server abschmieren.

wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 25.10.2007, 09:48

Danke nochmal für die Antworten. Sorry: Ausführungszeit hatte ich hochgesetzt, der error_handler hat nichts ausgespuckt.

Ich habe es aber geschafft, das Problem zu isolieren: Es liegt doch nicht am Speicher (zumindets nicht an dem des Output-Buffers), sonderm am preg_replace. Folgendes Script bringt den Fehler auf einem Webhosting bei 1und1 (andere noch nicht getestet) sowohl auf php 4.4.7 als auch auf 5.2.6.:

Code: Alles auswählen

<?php
	$txt = "";
	for &#40;$i = 0; $i < 2000; $i++&#41;
	&#123;	$txt .= "<a href=\"helloworld.htm\" title=\"my title\"><img src=\"/mypic.jpg\"></a><br />\n";
	&#125;
	$txt = preg_replace&#40;"/<a&#40;.*&#41;href=\"\\index.htm\">/isU", "<a$1href=\"\\\">", $txt&#41;;
	print $txt;
?>
Das Script geht, wenn die Schleife nur bis 1000 läuft.

everflux
PostRank 8
PostRank 8
Beiträge: 939
Registriert: 01.05.2006, 17:15

Beitrag von everflux » 25.10.2007, 13:28

Mußt du das denn on-the-fly machen? Sonst bereite die daten doch in ruhe auf und lad sie auf die 1&1 kiste.
https://everflux.de/ blogging about life, programming, seo and the net

CIX88
PostRank 3
PostRank 3
Beiträge: 90
Registriert: 11.05.2007, 11:45

Beitrag von CIX88 » 28.10.2007, 11:23

Zuwas ist denn preg_replace dort überhaupt gut ?
Dein Pattern haut nicht ganz nicht.
Du ersetzt Leerzeichen wieder mit <a ... href...

Airport1
PostRank 10
PostRank 10
Beiträge: 4489
Registriert: 16.08.2004, 18:50
Wohnort: Backnang / bei Stuttgart

Beitrag von Airport1 » 28.10.2007, 11:41

Sicher dass es nicht doch mit dem Speicher zusammenhaengt? PHP pflegt einen grob sehr verschwenderischen Umgang mit Speicher, insbes. sobald man mit Arrays arbeitet. Je nachdem welche PHP Version laeuft und wie diese konfiguriert ist, kanns dann schonmal 100mal mehr SPeicher belegen als auf nem anderen Server mit anderer PHP Version. Alles schon erlebt ;) Aber bei nem 500er sollte der erste Gang der sein, sich das (meist zumindest so aehnlich lautende) error.log vom Apache anzusehen, damit Du ueberhaupt die tats. Ursache erkennen kannst.
Linktauschanfragen zwecklos
https://www.bot-trap.de/ Spamschutz fuer Webmaster - zentrale Meldestelle fuer Web Spam
https://www.airport1.de/blog/ Lombagruschd Blog mid Gardadierle
https://www.ranking-hits.de/ Counter & PR Service

CIX88
PostRank 3
PostRank 3
Beiträge: 90
Registriert: 11.05.2007, 11:45

Beitrag von CIX88 » 28.10.2007, 11:50

> mit dem Speicher zusammenhaengt

Nö, das Script stirbt regelrecht durch das falsche Pattern bei preg_replace ab.
Da hängt sich preg_replace auf, schaut mal genau hin !

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 28.10.2007, 12:16

Anstatt (.*) würde ich ([^>]*) schreiben ... oder (.*?) ...

Im Übrigen muss ein . escaped werden.

cu, Robo :)

Antworten