2016-09-03 5 views
2
while (($line = fgets($handle)) !== false) { 
//look for the first payor block 
if(strpos($line, 'N1*PR*') !== false || $block_start) { 
$header_end = true; $block_start = true; 
    //see if the block finished 
if(strpos($line, 'CAS*CO*45*20.43**253*1.27~') !== false) { 
$block_start = false; 
$payor_blocks[$count] .= $line; 
$count++; 
} 
    $payor_blocks[$count] .= $line; 
    } else { 
    //append to the header 
    if($header_end) { 
    $footer .= $line."\n"; 
} else { 
$header .= $line."\n"; 
} 
    } 
} 

//get payor blocks and create a file foreach payor 
$new_files = array(); 
foreach($payor_blocks as $block) { 
$filename = $file . "_" . $count; 
$count++; 
$new_files[] = array(
'name' => $filename, 
'content' => $header."\n".$block."\n".$footer 

); 

//loop through new files and create them 
    foreach($new_files as $new_file) { 
    $myfile = fopen($file, "x"); 
    fwrite($myfile, $new_file['content']); 
    //close the file 
    fclose($myfile); 

ich den Code oben haben, wird es angenommen, der Lage sein, eine Originaldatei "$file" genannt zu öffnen und eine neue Datei erstellen sie dann schließen, seine jedoch nicht zu schaffen, und wenn ich es laufen, Ich erhalte diesen Warnfehler:Erstellen neuer Dateien aus einem alten

Warning: fopen(362931550.1a): failed to open stream: 
File exists in /script2.php on line 90 Warning: 
fwrite() expects parameter 1 to be resource, 
boolean given in /script2.php on line 94 Warning: 
fclose() expects parameter 1 to be resource, boolean 
given in /script2.php on line 96 

Jede Hilfe wird freundlich geschätzt.

Ich habe eine Datei mit dem Namen: 362931550.1a ich einen Code haben, der sie in bestimmten Bereichen aufteilt, (es ist ziemlich lang zu schreiben), wenn ich das Skript ausführen ich es in meinem Browser sehen, aber es schafft keine 2 neue Dateien im Ordner.

+0

lesen, dass mit 'X' Modus - 'Wenn die Datei bereits vorhanden ist, wird fehlschlagen der fopen() Aufruf von FALSE zurückkehren und einen Fehler von Ebene zu erzeugen E_WARNING.' –

+0

ich aber zu setzen versucht, w i erhalten didnt die Ausgabe, die ich wollte., irgendwelche Ideen, was ich sonst setzen könnte? @u_mulder –

+0

Wir wissen nicht, welche Ausgabe Sie wollen und was Sie bekommen, also bearbeiten Sie bitte Ihre Frage und klären Sie. –

Antwort

1

Der Dateiöffnungsmodus ist nicht korrekt.

Von php.net documentation:

'x' Create and open for writing only; place the file pointer at the beginning of the file. If the file already exists, the fopen() call will fail by returning FALSE and generating an error of level E_WARNING [...]

Sie sollten wahrscheinlich 'w' Modus verwenden:

'w' Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.

+0

Was kann ich anstelle von x, das gibt mir die Ausgabe, die ich will? –

+0

Ich habe versucht, dass es nur eine Datei statt der alten setzt, es erstellt nicht 2 neue. –

+1

Ihr Beispiel enthält keinen Code zum Erstellen von zwei Dateien. Bitte klären Sie Ihr Problem in Frage. – madneon

0

Das Skript einen Strom mit der fopen() Funktion zu öffnen, ist fehlgeschlagen und einen boolean zurück. Die Funktion fwrite() wird zum booleschen Wert, benötigt aber eine Ressource.

Der Grund ist, dass Sie nur Dateien mit dem X-Modifikator im Stream erstellen.

Create and open for writing only; place the file pointer at the beginning of the file. If the file already exists, the fopen() call will fail by returning FALSE and generating an error of level E_WARNING. If the file does not exist, attempt to create it.

Sie sehen in dem PHP-Handbuch weitere Informationen über den Stream-Modi (PHP manual).

Um diese Meldung zu verhindern, prüfen Sie, ob der Wert nicht falsch ist.

$stream = fopen("file.txt", "x"); 
if($stream === false) { 
    echo "Error while open stream"; 
} 

//here your code 
Verwandte Themen