Problem mit doppeltem fopen auf gleiche Datei:

tomkn

Mitglied
Hallo,

ich stehe vor folgendem Problem:

Ich habe eine While schleife :while($line=fgets($fd,1024))

Darin wird nach Dateien mit einem bestimmten Attribut gesucht.

Zusätzlich ist darin noch eine Schleife die für den Fall das datei vom Typ X gefunden wird, nach weiteren Dateien vom Typ X sucht und alle in ein Array schreibt.

Das heisst aber : ich habe sowohl in der Internen als auch in der Externen Schleife ein fopen.
Wenn ich nun 1mal : $fd = fopen( $filename, "r" ); und dann in der Internen auch mit $fd arbeite bricht er nach erfolgreichem Durchlauf die gesamte Suche ab: D.h. alle Folgeelemente werde nicht gefunden.

In meinem zweiten Ansatz habe ich zusätzlich einen zweiten Filereader eingebaut:
$fddocs = fopen( $filename, "r" );

In diesem Fall läuft die Externe Schleife sauber - dafür findet die interne immer nur ein Element und bricht dann ab.

Ziemliches Chaos! Bin für jede Hilfe dankbar
 
Zuletzt bearbeitet:
Hi, du brauchst in der while-Schleife einen Vergleichsoperator und keinen Zuweisungsoperator.

z.B.

PHP:
while($y < 10 ) {
echo $y;
$y++;
}

Zeig doch mal deinen ganzen Code.

schiese
 
while($line=fgets($fd,1024))
{

$line_array = explode("|$|",$line);
$selMatnrTmp = $line_array[5];

// Zeilenumbrüche ignorieren
$selMatnrTmp = trim($selMatnrTmp);


if(strtoupper($selMatnrTmp) == strtoupper($selMatnr)){


if(strtoupper($line_array[2])=="V") {

$grafik=1;

$last_layer += 1;
$itemGrafik=$line_array[0];
$arr_atwrt[$count] = $line_array[1];
$materialNr= $line_array[3];
$materialBez= $line_array[4];

$count++;

}
else if(strtoupper($line_array[2])=="Z") {
$zoom = 1;
$itemZoom = $line_array[0];
}
else if(strtoupper($line_array[2])=="B") {
$pdf = 1;

$index= 0;

$itemPDF = $line_array[0];


// Prüfen ob mehrere Dokumente hinterlegt sind, falls ja: wird eine Liste mit allen per Popup ausgegeben

// Zweiter Filereader für das Durchsuchen nach mehreren Dokumentationen ( bei Benutzung
// eines einzigen kommt es zu Konflikten )

while(($line=fgets($fddocs,1024)))
{
if($index == 0)
{

$pdfarray[$index]=$itemPDF;

}
$line_array = explode("|$|",$line);
$selMatnrTmp = $line_array[5];
// Zeilenumbrüche ignorieren
$selMatnrTmp = trim($selMatnrTmp);

// Wenn Nummer & Typ gleich sind:
if((strtoupper($selMatnrTmp) == strtoupper($selMatnr))&&(strtoupper($line_array[2])=="B"))
{
$index++;
$pdfarray[$index] = $line_array[0];
echo 'var myarray = Array("'.implode('", "', array_map('addslashes', $pdfarray)).'");';
echo 'mytemp=myarray[1];';
$pdf= 2;
}
}
usw...
 
Zurück