Probleme datei schreiben...

ronaldl

Grünschnabel
Also ich habe eine csv Datei bearbeitet, bis zum letzten Teil macht er auch alles..
Aber nun dieser Teil wird nicht geschrieben... bis echo ist alles ok die anzeige der Datei ist korrekt.
Beim schreiben kommt er mit folgender Fehlermeldung:

Warning: fputs(): 15 is not a valid stream resource in /var/www/localhost/htdocs/import.reiter.php on line 128

Warning: fclose(): 15 is not a valid stream resource in /var/www/localhost/htdocs/import.reiter.php on line 129

Damit kann ich nix mit anfangen auch google hilf mir da irgendwie nicht...
Hier der code teil der Probleme macht.

Code:
// anfügen der Daten in den zeilen... 
$lines = file ($uploaddir.$filename);
foreach ($lines as $line_num => $line) {
$ln = sprintf ("%04d", $line_num);
$str = $line;
$str1 = strlen($line);
$str2 = $str1+11;
echo str_pad($line, $str2 , ';"'.$ln.'";"0"');
$datei2 = str_pad($line, $str2 , ';"'.$ln.'";"0"');
}
 // datei neu schreiben
$fp=fopen($uploaddir.$filename,"w");
for($i=0;$i<$l;$i++){
fputs($fp,$datei2[$i]);
fclose($fp);
}
THX schon mal Ronny
 
PHP:
$fp=fopen($uploaddir.$filename,"w");
for($i=0;$i<$l;$i++){
fputs($fp,$datei2[$i]);
fclose($fp);
}
Ab dem zweiten Durchlauf deiner for Schleife klappt das Skript nicht mehr, da du ja den Dateistream schließt.

PHP:
$fp=fopen($uploaddir.$filename,"w");
for($i=0;$i<$l;$i++){
  fputs($fp,$datei2[$i]);
}
fclose($fp);

So sollte es gehen.
 
Danke jetzt ist die Fehlermeldung wech ...
Aber speichert nur die letzte Zeile obwohl der echo Befehl korrekt darstellt, speichert er nur 2 mal die letzten Zeile grrrr woran iet das denn nu ? Und die nicht einmal korrekt:
es kommt raus : Line #0209 länge #11
Line #0209 länge #11 :

und es müste so aussehen: "";"9";"Zimny Marion" ;"0207";"0"
"";"9";"Zwingmann Michael" ;"0208";"0"

:confused:

Hier der Code:

Code:
// anfügen der Daten in den zeilen... 
$lines = file ($uploaddir.$filename);
foreach ($lines as $line_num => $line) {
$ln = sprintf ("%04d", $line_num);
$str = $line;
$str1 = strlen($line);
$str2 = $str1+11;
echo str_pad($line, $str2 , ';"'.$ln.'";"0"');echo "<br>\n";
$datei2 = str_pad($line, $str2 , ';"'.$ln.'";"0"');
}
 // datei neu schreiben
$fp=fopen($uploaddir.$filename,"w");
for($i=0;$i<$l;$i++){
fputs($fp,$datei2[$i]);
}
fclose($fp);

$lines = file ($uploaddir.$filename);
foreach ($lines as $line_num => $line) {
echo "Line #<b>{$ln} länge #{$str1}</b> : " . htmlspecialchars($line1) .   "<br>\n";
}

THX ronny
 
Also bevor die die routine läuft sieh der text so aus:
"";"9";"Zimny Marion"
"";"9";"Zwingmann Michael"

Dann nach der routine kommt der rest an jede zeile:
"";"9";"Zimny Marion" ;"0207";"0"
"";"9";"Zwingmann Michael" ;"0208";"0"

Die anzeige innerhalb der routine läuf korrekt, nur abspeichern macht er,
Line #0209 länge #11 :
Line #0209 länge #11 :

Das sind in dem beispiel 209 zeilen nur der name ändert sich, ich möchte dann im nächsten programmabschnitt die daten so aufbereitet in eine sql tabelle importieren.
 
hallo,
also bei mir geht das reinschreiben falsch also ich hab einen Chat da habe ich folgenden Script::
PHP:
<form method="post" action="">
<table width="150" border="0">
  <tr>
    <td width="144" scope="col">Name ::<?php echo "".$_SESSION['user'].""; ?></td>
  </tr>
  <tr>
    <td>Message ::</td>
  </tr>
  <tr>
    <td align="right" ><input type="text" name="text"></td>
  </tr>
  <tr>
    <td align="right" ><input type="submit" name="Button" value="Send"></td></tr>
</table>

</form>
<?php 
if ($_POST[text] == ""){
echo "You have to write a text!";}else{
$daten= "at ".$uhrzeit."<br>".$in." :: ".$_POST[text]."</br></br>";

$datenbank = "../extern-data/chat/".$datum.".dat";

$datei = fopen($datenbank,"w");

fwrite($datei, $daten);
fclose($datei);}
?>

eigentlich richtig aber bei mir wird in die nur eins geschrieben und das andere gelöscht!
wisst ihr woran das liegen kann?
Danke schon mal im voraus

MfG agent_x
 
Der Parameter "w" bei [phpf]fopen[/phpf] setzt den Dateizeiger auf den Anfang der Datei. Sprich er überschreibt alles andere.

Falls du etwas anhängen willst, benutze den Parameter "a".


Und zu ronald, besser spät als nie.

PHP:
<?php
$content = file('test.txt');

foreach($content as $key => $val)
{
  $array[] = trim($val).';"'.$key.'";"0"'."\n";
}

file_put_contents('test2.txt', $array);

foreach($array as $val)
{
  print $val.'<br>';
}
?>
Braucht allerdings PHP5.
 
hallo,
also der script mit "w" hat früher geklappt.
Ah ja und ich will nicht das der datenzeiger am ende steht.
Ich will das er am anfang steht und das eine datei wenn sie nicht vorhanden ist angelegt wird!
Und noch eins kann man auch 2 moduse setzen?

MfG agent_X
 
Zuletzt bearbeitet:
Dateimodi für fopen(): w hat gesagt.:
Öffnet die Datei nur zum Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert wird versucht sie anzulegen.

Also bezweifle ich das mal ganz vorsichtig.
Es ist nicht möglich, an den Anfang der Datei etwas zu schreiben, du hättest also zwei Möglichkeiten:

a) du liest alles aus der Datei aus, hängst deinen Eintrag vorne dran und speicherst es dann wieder in die Datei (Mehraufwand)
b) du hängst es einfach hinten dran (Modi "a") und beim auslesen (z. B. mit [phpf]file[/phpf]) drehst du den Array einfach einmal um ([phpf]array_reverse[/phpf]).
 
Zurück