php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 16.06.2011, 13:18  
Benutzer
 
Registriert seit: 25.02.2011
Beiträge: 42
PHP-Kenntnisse:
Fortgeschritten
MLang befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Zend FW: fgets bei Datei bringt Header already sent

Servus,

ich versuche eine Datein mittels Zend Framework zu verarbeiten. Das Laden der Datei funktioniert, doch sobald ich die Datein einlesen will kommt die Meldung das die Header bereits gesendet sind.

Je Zeile kommt eine Verarbeitungsroutine für den Aufbau eines Arrays, welches die Daten für einen mysql Insert vorhält.

Pro Zeile kommt ein Aufruf der Zend_Progress_Bar.

Woran könnte es liegen, dass nach dem ersten Aufruf die Fehlermeldung kommt ?

Hier der PHP Abschnitt im Controller.
PHP-Code:
                    while (!feof($ImportFile))
                    {
                        
$LineValues = Array();
                        
$line fgets($ImportFile);
                        foreach (
$toInsertFields as $Field)
                        {
                            
$LineValues[$Field['RecordLayout_Fieldname']] = substr($line, ($Field['RecordLayout_Position'] - 1) , $Field['RecordLayout_Length']);
                        }
                        
$Dataimport->insertLine($LineValues$tablename);
                        
$progressBar->update($dataset);
                        
$dataset++;
                    } 
MLang ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.06.2011, 13:40  
Erfahrener Benutzer
 
Registriert seit: 13.05.2011
Beiträge: 188
PHP-Kenntnisse:
Fortgeschritten
php1704 wird schon bald berühmt werden
Standard

Als der Code kann die Meldung nicht verursachen. Da muss irgendwo "header" mit im Spiel sein.

Zend_ProgressBar erzeugt ja eine Ausgabe. Wird wohl irgendwo in
$Dataimport->insertLine" die Funktion "header" aufgerufen.

Grüße.

php1704 ist offline   Mit Zitat antworten
Alt 16.06.2011, 13:46  
Benutzer
 
Registriert seit: 25.02.2011
Beiträge: 42
PHP-Kenntnisse:
Fortgeschritten
MLang befindet sich auf einem aufstrebenden Ast
Standard

Ich hab die Zeile mal auskommentiert und ohne den DB Insert getestet. Selber Fehler. Ich hatte auch schonmal ohne die Zeile
PHP-Code:
$line fgets($ImportFile); 
getestet und hier lief das Script durch, hat natürlich dann keine Zeilen zerlegt.

Edit:
Ich denke ich habe das Problem lokalisieren können. Die Zeile die ausgelesen wird, scheint Zeichen zu enthalten die das Problem verursachen. Ich habe jetzt über die Funktion file die Datei in ein Array eingelesen. Wenn ich dann das Script ohne Zeilenbearbeitung ablaufen lasse gibt es keine Probleme. Sobald aber die Zeile
PHP-Code:
$LineValues[$Field['RecordLayout_Fieldname']] = substr($line, ($Field['RecordLayout_Position'] - 1) , $Field['RecordLayout_Length']); 
aktiviert wird kommt der Fehler. die Variable $line enthält dabei die Zeile aus der Datei und wird dann mehrfach in die Datenfelder gesplittet.

Das Problem ist, dass der Inhalt der Datei eigentlich nicht verändert werden darf.

Geändert von MLang (16.06.2011 um 14:08 Uhr).
MLang ist offline   Mit Zitat antworten
Alt 16.06.2011, 14:06  
Erfahrener Benutzer
 
Registriert seit: 13.05.2011
Beiträge: 188
PHP-Kenntnisse:
Fortgeschritten
php1704 wird schon bald berühmt werden
Standard

Dann kommt irgendwo danach noch ein header-Aufruf.

Das Problem ist, dass Zend_ProgressBar Daten zum Browser schickt -> eine Ausgabe macht. Und irgendwo später sollen die Header noch geändert werden. Könnte auch das Setzen eines Cookies sein zb oder session_start.

Die Meldung sagt dir auch genau wo das passiert. Einmal wo die Ausgabe begonnen hat und dann wo die Header geändert werden sollten.

Grüße.
php1704 ist offline   Mit Zitat antworten
Alt 16.06.2011, 14:24  
Benutzer
 
Registriert seit: 25.02.2011
Beiträge: 42
PHP-Kenntnisse:
Fortgeschritten
MLang befindet sich auf einem aufstrebenden Ast
Standard

Ich denke ich habs gefunden. Habe jetzt den Code wie folgt geändert:
PHP-Code:
                    $lines = array();
                    
$lines file($this->registry['queueDir'] . $DataimportData->Dataimport_Filename);
                    
$dataset 0;
                    for(
$i 0$i count($lines); $i++)
                    {
                        
$LineValues = Array();
                        foreach (
$toInsertFields as $Field)
                        {
                            
$LineValues[$Field['RecordLayout_Fieldname']] = substr(rtrim($lines[$i], "\r\n") . PHP_EOL, ($Field['RecordLayout_Position'] - 1) , $Field['RecordLayout_Length']);
                        }
                        
print_r($LineValues);
                        exit;
                        
                        
//$Dataimport->insertLine($LineValues, $tablename);
                        
$progressBar->update($dataset);
                        
$dataset++;
                    } 
Jetzt habe ich den Insert nochmal deaktiviert und der String wird zerlegt. Eine Ausgabe des Arrays mit print_r hat mir gezeigt, dass ich wohl noch ein paar Mechnismen bauen muss um Sonderzeichen zu quoten. (Bsp.: ' " etc.).

Geändert von MLang (16.06.2011 um 14:54 Uhr).
MLang ist offline   Mit Zitat antworten
Alt 16.06.2011, 15:16  
Erfahrener Benutzer
 
Registriert seit: 11.04.2011
Beiträge: 260
PHP-Kenntnisse:
Fortgeschritten
lcrash wird schon bald berühmt werden
Standard

Wann führst du dass denn aus? Muss ja vor dem Dispatchen passieren, scheint aber überhaupt nicht sinnvoll zu sein.
lcrash ist offline   Mit Zitat antworten
Alt 16.06.2011, 16:10  
Benutzer
 
Registriert seit: 25.02.2011
Beiträge: 42
PHP-Kenntnisse:
Fortgeschritten
MLang befindet sich auf einem aufstrebenden Ast
Standard

Ich ruf über ein Formular ganz normal die Seite auf, die wird dann im IFRAME geladen und schickt dann die Daten an das Parent Fenster zurück. Oder was meinste ? Im Endeffekt war es dann wohl zum einen ein Problem mit dem fgets und zum anderen hatte ich dann noch ein Problem mit dem DB Insert welches sich natürlich nicht gescheit gemeldet hat und dann den Header gesendet hat.

Defakto ist die Sache jetzt erledigt und läuft.
MLang ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Zend Webinare robo47 Off-Topic Diskussionen 0 16.03.2010 10:02
[Erledigt] Cannot modify header information - headers already sent by Lachesis PHP Tipps 2009 10 30.04.2009 23:16
Wert in externer Datei speichern Abakay PHP Tipps 2008 6 04.12.2008 18:56
Zend Framework Und Datei Upload ! 7Style PHP Tipps 2008 7 28.09.2008 00:52
header() ??? TeazY PHP Tipps 2008 9 11.01.2008 15:40
Zend Optimizer - Zerstörte datei brian johnson Off-Topic Diskussionen 3 28.11.2007 15:07
Umbruch bei Auslesen einer Datei mit fgets wegmachen R.E.M. PHP Tipps 2006 3 16.09.2006 10:36
setcookie und "headers already sent by" nieselfriem PHP Tipps 2005-2 2 01.09.2005 14:51
fgets soll die GANZE datei einlesen DarkThunder PHP Tipps 2005 11 29.04.2005 23:34
Automatische Umleitung zu einer Datei (header) PHP Tipps 2005 3 18.03.2005 16:59
[Erledigt] Datei selber nach einer Abfrage senden, header() geht nicht? PHP Tipps 2005 2 23.02.2005 05:58
[Erledigt] header - Funktion - Datei speichern PHP-Fortgeschrittene 3 03.02.2005 14:38
[Erledigt] Datei speichern - via header - O Byte PHP-Fortgeschrittene 1 15.01.2005 17:13
header sent PHP Tipps 2004-2 5 18.12.2004 11:45
Cannot send session cookie - headers already sent... PHP Tipps 2004 12 23.07.2004 10:31

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
fgets header, zend send header, zend file in array laden, php fgets ohne header, php datei speichern headers already sent, zend progressbar headers already, zend textdatei einlesen, zend \datei speichern\, zend progress bar headers already sent in , line 0, zend progress bar headers already sent, fgets optimize, php header beim ersten aufruf fehler, zend datei speichern, fgets ohne header, zend header.html, zend progressbar cannot modify header information - headers already sent in

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:56 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum