Forum
Tipps
News
Menu-Icon

[PHP] fopen(): Dateicursor setzen.

Da sich mein Problem
ja nicht beheben ließ, hab ich es darauf beruhen lassen und
habe nun folgendes Problem:

Ich möchte, dass neue Einträge an den Anfang der Datei geschrieben werden, nicht ans Ende.

Mein Code momentan:

 

Zitat
      <?php
    if(isset($eintragen)){
       $datei=fopen ("news.txt","r+");
         $eintrag = ereg_replace("\n","<br>",$eintrag);
         $eintrag = stripslashes($eintrag);
         $daten = "$eintrag";
         fwrite($datei,$eintrag)    ;
         fclose ($datei);}
    if(file_exists("news.txt")){
       readfile("news.txt");
       }
    else {
       echo ("Momentan sind keine News vorhanden.");
         }





?>

Habe schon alle Attribute ( r+,w,w+) ausprobiert doch keines will so recht funktionieren.

LG
Dark_Dog

Antworten zu [PHP] fopen(): Dateicursor setzen.:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hi |

Das "Problem" ist bekannt. Wenn du den Pointer an den Anfang der Datei setzt, wird der nachfolgende Rest mit dem neuen String überschrieben. Du müsstest daher erst die Datei öffnen und den vorhandenen String auslesen. Diesen speicherst du in eine Variable, an die du von vorn den neuen String anhängst. Den fertigen Gesamtstring schreibst du dann so in die Datei.

greez 8)
JoSsiF

 

Zitat
und den vorhandenen String auslesen

Meinst du damit, den ganzen Inhalt der .txt auslesen? Ich weiss als blutiger Anfänger ja nich ob man auch das String nennt^^

LG

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Jo, den ganzen Inhalt meinte ich.

Ein String ist übrigens eine Zeichenkette, mehr nicht. Und da du ja Zeichenketten in die Datei schreibst, ist das auch ein String ;)

greez 8)
JoSsiF

und wie das ganze dann anstellen? readfile gibt den inhalt ja aus...Vllt so?:

 

Zitat

<?php
 .....blablabla
{$datei=fopen ("news.txt","a");
$datei=fread(fp,max);
$inhalt=$datei;
$daten=$eintrag.$inhalt;
fwrite ("datei",$daten);
fclose (datei);}
blablabla.......

??

LG

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Müsste so gehen (nicht getestet). Ist doch nichts anderes als simples Verknüpfen von Strings.

Hmm:

 

Zitat
Warning: fread(): supplied argument is not a valid stream resource in /usr/export/www/hosting/solo/Eike/news.php on line 27

Warning: fwrite(): supplied argument is not a valid stream resource in /usr/export/www/hosting/solo/Eike/news.php on line 30

Warning: fclose(): supplied argument is not a valid stream resource in /usr/export/www/hosting/solo/Eike/news.php on line 31

Will also heissen, das bei fopen was nich stimmt und der Rest folgefehler sind oder?

LG

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Die 2 Parameter in fread() sollen bei dir ganz sicher Variablen sein, also kennzeichne diese auch als solche.

Hi, ich hba mich mal eben im PHP Manual schlaugemacht, und nach dem hab ich mich orientiert:

 

Zitat
       <?php
    if(isset($eintragen)){
         $datei=fopen ("news.txt","w+");
   $datei=fread($fp, 23985798219384);
   $inhalt=$datei;
   $daten=$eintrag.$inhalt;
   fwrite ($datei,$daten);
   fclose (datei);}
    if(file_exists("news.txt")){
       readfile("news.txt");
       }
    else {
       echo ("Momentan sind keine News vorhanden.");
         }





?>

Gibt aber immer noch 

Zitat
Warning: fread(): supplied argument is not a valid stream resource in /usr/export/www/hosting/solo/Eike/news.php on line 27

Warning: fwrite(): supplied argument is not a valid stream resource in /usr/export/www/hosting/solo/Eike/news.php on line 30

Warning: fclose(): supplied argument is not a valid stream resource in /usr/export/www/hosting/solo/Eike/news.php on line 31
+


aus

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Das Problem ist, dass du deine Variante und die des Manuals zusammenmixt und nicht verstehst, was du da programmierst. Die Fehlermeldung ist die logische Konsequenz.

Wenn du dich schon einmal im Manual bewegst, dann schau dir doch mal an, was dir fopen() zurückgibt. Vielleicht entdeckst du Parallelen zu den Parametern, die fread(), fwrite() und fclose() erwarten. Muss ich mehr sagen?

greez 8)
JoSsiF

 

Zitat
Das Problem ist, dass du deine Variante und die des Manuals zusammenmixt und nicht verstehst, was du da programmierst.

Richtig. Eig sollte es ja auch mit der vorhergehenden Variante getan sein aber das wird ja nun doch etwas komplexer....

Ok, ich schau mal

THX

Eike

Also in 4 Manuals(Dokus bin ich auf denselben Text gestoßen, dadrin steht:

 

Zitat
Im Erfolgsfall gibt die Funktion einen Dateizeiger zurück. Sollte das Öffnen der
Datei scheitern, so wird false zurückgeliefert.

Naja...

Dafür bei SelfPHP dies hier:

 
Zitat
Will man die Daten in der Datei in einem einzigen String zur Verfügung haben, muss man dies mit  implode()  kombinieren:

Ist dies auch möglich?


LG

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

implode() hat mit deinem Problem wenig zu tun, denn es scheitert schon viel früher ;)

Ah ok, funzt:

 

Zitat
       <?php
    if(isset($eintragen)){
       $dateiinhalt = file_get_contents('news.txt');
         $datei=fopen ("news.txt","w+");
          $daten=$eintrag.$dateiinhalt;
   fwrite ($datei,$daten);
   fclose ($datei);}
    if(file_exists("news.txt")){
       readfile("news.txt");
       }
    else {
       echo ("Momentan sind keine News vorhanden.");
         }





?>

Einzigstes Problem jetzt: Ich poste mit dem Formular Daten wie diese:

<div style="border: 1px dashed; width: 500px;" ><div style="margin-left:10px; margin-right:10px"><div align="left">Datum & Titel</div><div align="left"><hr>Inhalt</div></div></div><br>

Es wird in der News.php aber nur <hr> angezeigt, die divs nicht! (Ging zuvor...)

Zu testen unter:


http://solo.so.ohost.de/phptest.php

LG

 

Edit: Geht doch,

 

Zitat
$eintrag = stripslashes($eintrag);

vergessen^^

Danke!

@ JoSsiF: Warum geht "r+" eigentlich nicht?

LG

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
@ JoSsiF: Warum geht "r+" eigentlich nicht?

Sorry, aber da fehlt mir jetzt der Zusammenhang. Und ohne Code.... du weißt schon ;)

 

Zitat
       <?php
    if(isset($eintragen)){
       $datei=fopen ("news.txt","a");
         $eintrag = ereg_replace("\n","<br>",$eintrag);
         $eintrag = stripslashes($eintrag);
         $daten = "$eintrag";
         fwrite($datei,$eintrag)    ;
         fclose ($datei);}
    if(file_exists("news.txt")){
       readfile("news.txt");
       }
    else {
       echo ("Momentan sind keine News vorhanden.");
         }





?>

Wenn ich oben bei fopen "a" einsetze, schreibt er den EIntrag ans Ende der bestehenden TXT. Wenn ich w einsetze überschreibt er es, aber wenn ich r+ einsetze sollte er ja eigentlich den Eintrag an den Anfang schreiben, er schreibt aber ans Ende!

LG

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
aber wenn ich r+ einsetze sollte er ja eigentlich den Eintrag an den Anfang schreiben, er schreibt aber ans Ende!

Also ich hab deinen Code mal nahezu 1:1 übernommen und mit "r+" getestet. Er schreibt's erwartungsgemäß an den Anfang.

nahezu?...

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
nahezu?...

Ja, nahezu. Weil ich net erst ein Formular nachbauen wollte und außerdem sinnfreien Ballast wie

$daten = "$eintrag";

weggelassen habe ;)

Was bei deinem Beispiel schief läuft, kann ich auch nicht sagen. Sicher, dass sich auch das angenommene Skript auf dem Server befindet?

ähm ja?!!^^

Ähm nochwas...:

Habe das ganze ein wenig umgestaltet um Shortnews auf meiner Seite anzeigen zu lassen:
Eintragen:

 

Zitat
<form action="shortnews.php" method="post">
 <textarea name="shortnewseintrag" rows="20" cols="60"></textarea><br>
 <input type="submit" name="shortnewseintragen" value="Shortnews Eintragen">
 </form>

Schreiben:

 
Zitat
<?php
    if(isset($shortnewseintragen)){
       $shortnewsinhalt = file_get_contents('shortnews.txt');
         $shortnews=fopen ("shortnews.txt","w");
         $shortnewseintrag = stripslashes($shortnewseintrag);
          $shortnewsdaten=$shortnewseintrag."<hr>".$shortnewsinhalt;
   fwrite ($shortnews,$shortnewsdaten);
   fclose ($shortnews);}

?>

Ausgeben:

 
Zitat
<?php
if(file_exists("shortnews.txt")){
       readfile("shortnews.txt");
       }
    else {
       echo ("Momentan sind keine News vorhanden!");
         }
?>

Anzeigen:
 
Zitat
<div style="overflow:auto" id="news">
      <p style="margin-top:5px; margin-left:5px;">
      <?php
         include "shortnewsausgabe.php";

      ?>

      </p>
      </div>


Beim Anzeigen allerdings wird nur der oberste Eintrag mti einem Abstand von oben 5px udn von links 5px dargestellt, die anderen sind ganz links am Rand, warum?


LG

« Batch-DateiWS FTP »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Auslagerungsdatei
Die Auslagerungsdatei, auch bekannt als virtueller Speicher, ist ein wichtiges Element im Windows-Betriebssystem. Sie dient als Erweiterung des physischen Arbeitsspeicher...

Dateiendungen
Die Dateiendung, auch Dateinamenerweiterung, Dateierweiterung oder einfach "Endung" genannt, besteht aus meistens drei oder vier Buchstaben und wird mit einem Punkt an de...

Dateisystem
Das Dateisystem eines Computers definiert, wie Daten auf einem Speichermedium organisiert werden. Es bestimmt dabei, wie die Informationen auf dem Medium gespeichert, gel...