php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack (3) Themen-Optionen Thema bewerten
  3 links from elsewhere to this Post. Click to view. #1 (permalink)  
Alt 21-03-2012, 11:55
jtraser
 Registrierter Benutzer
Links : Onlinestatus : jtraser ist offline
Registriert seit: Mar 2012
Beiträge: 11
jtraser befindet sich auf einem aufstrebenden Ast
Standard Ausgabe eines großen Arrays

Hallo Forum,

heute ist meine Premiere, mein erster Eintrag.

Hier mein Problem:
Ich mache eine DB-Abfrage per ODBC. Das Ergebnis besteht aus 6500 Zeilen mit jeweils 10 Spalten aus einer MSSQL-DB.
Ich durchlaufe die Abfrage mit einer WHILE-Schleife und lasse mir alle Zeilen ausgeben. Nach ca. 2000 Zeilen ist der Aufbau der Webseite beendet. Allerdings ohne die Schleife komplett abzuarbeiten.
Wenn ich mir dann den Quelltext anzeigen lasse, hört die Seite mitten im Code einfach auf.
Weis jemand warum?

Ich verwende folgendes:
Windows Server 2008 R2 mit PHP 4.4.9
MSSQL 2008 per ODBC

Meine Vermutung ist eine Einstellung in der PHP.ini oder des IIS.
Ich habe bereits das memory_limit in der PHP.ini auf -1 (noLimit) gesetzt, ohne Erfolg.

Hier mein code:
$exec = odbc_exec($connect, $sql);

while ($row = odbc_fetch_array($exec)){
print_r($row);
}

Vielen Dank schon mal für die Hilfe.
Gruß Jörg
Mit Zitat antworten
  #2 (permalink)  
Alt 21-03-2012, 12:13
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Hast du das error_reporting an?

Wie lange dauert es, bis du diese ca. 2000 Zeilen angezeigt bekommst?
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #3 (permalink)  
Alt 21-03-2012, 13:36
jtraser
 Registrierter Benutzer
Links : Onlinestatus : jtraser ist offline
Registriert seit: Mar 2012
Beiträge: 11
jtraser befindet sich auf einem aufstrebenden Ast
Standard

Error-Reporting ist an.
Der Siteaufbau dauert ca. 2Sekunden.

Es wird kein Error angezeigt da die Seite nich zu ende gerendert wird.
Wenn ich in der Ausgabe eine Spalte weglasse, werden mehr Datenzeilen als vorher angezeigt. Ich vermute, dass die eingestellte Größe einer Webseite im IIS 7.5 überschritten wird.
Nur wo kann ich das einstellen?

Gruß Jörg
Mit Zitat antworten
  #4 (permalink)  
Alt 21-03-2012, 13:44
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Findet sich in den Error-Logs des IIS, von PHP oder vom DB-Server etwas?

Einen volllaufenden Speicher würde ich ohnehin ausschließen, da du mit _fetch_array() immer nur einen Datensatz aus dem Result holst und damit jedesmal $row überschreibst.
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #5 (permalink)  
Alt 21-03-2012, 14:23
jtraser
 Registrierter Benutzer
Links : Onlinestatus : jtraser ist offline
Registriert seit: Mar 2012
Beiträge: 11
jtraser befindet sich auf einem aufstrebenden Ast
Standard

Hier die Zeile des IIS-Log:
2012-03-21 12:16:09 10.91.84.23 POST /gbg/relevantCustomer/result.php - 80 - 10.81.80.68 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+Trident/4.0;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+InfoPath.1;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729) 200 0 0 1390

Gruß Jörg
Mit Zitat antworten
  #6 (permalink)  
Alt 21-03-2012, 15:01
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von jtraser Beitrag anzeigen
Hier die Zeile des IIS-Log:
2012-03-21 12:16:09 10.91.84.23 POST /gbg/relevantCustomer/result.php - 80 - 10.81.80.68 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+Trident/4.0;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+InfoPath.1;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729) 200 0 0 1390

Gruß Jörg
Das schaut nach einem (HTTP-)Access-Log-Eintrag aus. Error-Log-Einträge enthalten Fehlermeldungen, Warnungen usw.

Aber der HTTP-Status-Code 200 sagt zumindest, dass das Script bis zum Ende durchgelaufen sein muss ...
Mit Zitat antworten
  #7 (permalink)  
Alt 21-03-2012, 15:12
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Der 200er-Status heißt IMHO nicht unbedingt, dass PHP ohne Fehler oder sonst etwas durchgelaufen ist - zumindest bei Apache/PHP kommt eigentlich immer ein 200er zurück, auch wenn PHP einen Fehler meldet. Nur wenn etwas vollkommen schief läuft und PHP gar nicht starten kann oder sowas in der Richtung wird ein 500er ausgegeben.

Die Angabe "1390" wundert mich irgendwie - ich würde vermuten dass das die zu übertragenden Bytes sein sollen - aber das passt mal gar nicht damit zusammen, dass da doch ca. 2000 Datensätze rauskommen - selbst mit gzip.
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #8 (permalink)  
Alt 21-03-2012, 15:51
jtraser
 Registrierter Benutzer
Links : Onlinestatus : jtraser ist offline
Registriert seit: Mar 2012
Beiträge: 11
jtraser befindet sich auf einem aufstrebenden Ast
Standard

ich hab nochmal gesucht.
Kein Eintrag in sämtlichen Errorlogs. Sorry.

Gruß Jörg
Mit Zitat antworten
  #9 (permalink)  
Alt 22-03-2012, 23:11
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von jtraser Beitrag anzeigen
ich hab nochmal gesucht.
Kein Eintrag in sämtlichen Errorlogs. Sorry.
Dann bricht dein Script irgendwo selbst mittels exit() oder return ab. Aber das halte ich für wenig wahrscheinlich.

Wenn du wirklich keine andere Möglichkeit siehst, den Fehler aufzuspüren, hilft nur, an den (möglichst) richtigen Stellen Debug-Ausgaben zu machen und die Stelle einzukreisen, wo das Script "abbricht".
Mit Zitat antworten
  #10 (permalink)  
Alt 23-03-2012, 08:29
jtraser
 Registrierter Benutzer
Links : Onlinestatus : jtraser ist offline
Registriert seit: Mar 2012
Beiträge: 11
jtraser befindet sich auf einem aufstrebenden Ast
Standard

Das PHP-Script verursacht keinen Abbruch. Es hört einfach auf zu parsen.
Ich hatte scho geschrieben: Wenn ich in der Ausgabe eine Spalte weglasse, werden mehr Datenzeilen als vorher angezeigt.
Mit Zitat antworten
  #11 (permalink)  
Alt 24-03-2012, 00:43
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von jtraser Beitrag anzeigen
Das PHP-Script verursacht keinen Abbruch.
[ ] Du hast die Anführungszeichen gesehen, die ich um das Wort "abbricht" gesetzt habe?

Zitat:
Es hört einfach auf zu parsen.
Bahnhof ...?

Der PHP-Interpreter parst das Script nicht mehr?
Das Script parst was nicht mehr?
Das Code-Teilstück, welches du veröffentlicht hast, "parst" nichts. Es holt nur wiederholt Daten und schreibt sie in den Ausgabekanal.

Zitat:
Ich hatte scho geschrieben: Wenn ich in der Ausgabe eine Spalte weglasse, werden mehr Datenzeilen als vorher angezeigt.
Das habe ich gelesen, aber es ergäbe wenig Sinn, in der (voreingestellten) Webserver-Konfiguration die Ausgabe auf einen Wert von weniger als 2 KBytes zu limitieren.

Zitat:
Wenn ich mir dann den Quelltext anzeigen lasse, hört die Seite mitten im Code einfach auf.
Weis jemand warum?
Weil das Script an dieser Stelle aufhört, Daten in den Ausgabekanal zu schreiben. Nur wenn dies immer an der gleichen Stelle (gleiche Anzahl ausgegebener Bytes, siehe dein Access-Log) geschieht und der Server nicht den HTTP-Status-Code 200 sendet, könnte das auf ein fest eingestelltes Byte-Limit hindeuten.

Geändert von fireweasel (24-03-2012 um 00:53 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 24-03-2012, 12:31
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Ich würde jetzt mal folgendes probieren:

Kommentiere mal die Ausgabe des $row-Arrays aus und schreib einen Zähler in die Schleife rein, den du am Ende ausgibst.
Wenn es zu einer Ausgabe kommt und der Zähler bei den erwarteten 6000 steht, dann sollte man sich die Webserver-Konfiguration nochmal genauer ansehen.

Sollte es zu keiner Ausgabe kommen, würd ich als nächstes den Zähler schon bei jedem Schleifendurchlauf mal ausgeben lassen. Landet er dann wieder nur bei den ca. 2000 die du immer zurückbekommst, sollte man sich die Datenbank selbst bzw. die Anbindung der DB an PHP (ODBC-Treiber) mal näher ansehen, was es da alles zu konfigurieren usw. gibt. Evtl. ist die Datenmenge die der Datenbankserver an PHP übergibt irgendwo limitiert.
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #13 (permalink)  
Alt 26-03-2012, 08:43
jtraser
 Registrierter Benutzer
Links : Onlinestatus : jtraser ist offline
Registriert seit: Mar 2012
Beiträge: 11
jtraser befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

1. Das Datenarray ist mit 6335 Zeilen und 10 Spalten befüllt. Das bekomme ich auch angezeigt.
2. Wenn ich nur einen Zähler in der Schleife mitlaufen lasse. Bekomme ich alle Zählerstände bis zum Ende angezeigt.
3. Wenn ich nun wieder das Array durchlaufe, bekomme ich alle Zeilen angezeigt wenn ich maximal acht Spalten ausgebe. Bei allen 10 Spalten sind es immer nur 5550 Zeilen. Dann bricht das Script ab.

Ich bin langsam am Verzweifeln.
Gruß Jörg
Mit Zitat antworten
  #14 (permalink)  
Alt 26-03-2012, 11:12
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

Erscheint eine Ausgabe des Zählerstandes (nach der while-Schleife) wenn du alles (alle 10 Spalten) ausgeben lässt?

Um irgendeine Ursache mit der DB endgültig ausschließen zu können, würd ich mal die DB weglassen. Füll einfach mal ein Array mit den Werten einer typischen Datenbankzeile - lasse dieses Array nun in einer Schleife auch wieder ca. 7000 mal ausgeben. Läuft das Script durch, oder bricht es wieder nach x Durchläufen ab?

Mal so ganz nebenbei:
PHP 4.4.9? Schon mal ein Update in Erwägung gezogen?
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

Geändert von Quetschi (26-03-2012 um 11:32 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 26-03-2012, 12:42
jtraser
 Registrierter Benutzer
Links : Onlinestatus : jtraser ist offline
Registriert seit: Mar 2012
Beiträge: 11
jtraser befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

hier mein Qelltext:
<body>
<?php
$data = array();


for ($d = 0; $d < 10; $d++){
$data[$d] = 'Spalte'.$d;
}

for ($i = 0; $i < 6500; $i++){
echo $i.":";
for ($d = 0; $d < 10; $d++){
echo $data[$d];
}
echo "<br>"."\n";
}
?>
<h2>Fertig</h2>
</body>

Das Ergebnis ist, dass das Script bei Zeile 5461:Spalte0 einfach endet. "Fertig" wird nicht mehr ausgegeben.

Gruß Jörg

P.S.: Update ist leider nicht. Es handelt sich um eine Anwendung mit ca. 200 Seiten à 1000 Zeilen Code.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
abbruch, array, odbc, php


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/102780-ausgabe-eines-grossen-arrays.html
Erstellt von For Type Datum
Scriptabbruch bei Ausgabe in einer Schleife - php.de This thread Refback 27-07-2015 15:21
Scriptabbruch bei Ausgabe in einer Schleife - php.de This thread Refback 26-03-2012 15:33
Scriptabbruch bei Ausgabe in einer Schleife - PHP Forum: phpforum.de This thread Refback 26-03-2012 15:31

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ausgabe mehrere Arrays none PHP Developer Forum 5 02-11-2007 12:45
Ausgabe eines Arrays per for-Schleife partizan PHP Developer Forum 5 11-07-2006 13:03
Maximum aus Arrays, die in einer Liste eines Arrays stehen nixgut PHP Developer Forum 2 08-04-2005 00:07
Resourcenschonendes Lesen eines großen Textfiles kallculator PHP Developer Forum 7 27-03-2005 19:06
Ausgabe eines mehrdimensionalen Arrays MHeiss PHP Developer Forum 4 21-05-2002 21:17

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:52 Uhr.