Alicja: datei erzeugen

Ich weiß, dass ich mit tempnam ("/txt", "foo") eine temporäre Datei anlegen kann, wobei "/txt" ist das Verzeichnis und "foo" prefix für den Dateinamen. Damit kann ich eine Datei erzeugen deren Dateiname generiert wird und Extension tmp ist.
Was wenn ich aber eine Datei erzeugen möchte, die ganau bsp.txt heißt. Geht das?

  1. $fp  = fopen ("bsp.txt","a+")

    a+/r/rw...

    wenn dich richtig verstanden habe

  2. Ich weiß, dass ich mit tempnam ("/txt", "foo") eine temporäre Datei anlegen kann, wobei "/txt" ist das Verzeichnis und "foo" prefix für den Dateinamen. Damit kann ich eine Datei erzeugen deren Dateiname generiert wird und Extension tmp ist.
    Was wenn ich aber eine Datei erzeugen möchte, die ganau bsp.txt heißt. Geht das?

    mit fopen kannst du beliebige Dateien anlegen (eigentlich öffnen, aber wenn sie nicht da ist, wird sie eben neu angelegt).
    Allerdings ist die so angelegte Datei nicht temporär, d.h. sie wird nicht automatisch wieder gelöscht.

  3. Hallo Alicja!

    Ich weiß, dass ich mit tempnam ("/txt", "foo") eine temporäre Datei anlegen kann, wobei "/txt" ist das Verzeichnis und "foo" prefix für den Dateinamen. Damit kann ich eine Datei erzeugen deren Dateiname generiert wird und Extension tmp ist.
    Was wenn ich aber eine Datei erzeugen möchte, die ganau bsp.txt heißt. Geht das?

    Aber natürlich! Zum Beispiel so:

    $fp = fopen("bsp.txt","a");

    Dadurch wird eine neue Datei namens bsp.txt angelegt und der Dateizeiger an das Ende der Datei gesetzt. Über das Handle $fp kannst du dann auf die Datei zugreifen. Du kannst aber nur in die Datei schreiben, wenn du sie auch lesen möchtest, ersetzt du "a" durch "a+".

    Viele Grüße
      Patrick Canterino

  4. Hallo Alicia,

    so ganz schemenhaft ahne ich, was Du vorhaben könntest.

    Temporärdateien sind dafür da, dass die Datei automatisch wieder gelöscht wird, wenn das Handle zurückgegeben wird oder der Parentprozess endet (dann wird das Handle automatisch wieder zurückgegeben).

    $longPath = tempnam($pfad,$namebase);

    erzeugt aber nur eine "normale" Datei mit einem speziellen eineindeutigen Namen. Der Name wird auf "Hardwarebene" von PHP ausgewürfelt. Die Datei wird angelegt und muss dann ganz normal mit fopen() und unlink() benutzt werden.

    Der Sinn?
    Stell Dir vor, Dein Server hat pro Sekunde hundert Besucher und alle benutzen das selbe Skript, Dann würde es ganz viele Fälle geben, wo ein von Dir über das langsame Skript ausgewürfelter Dateiname bereits vergeben ist. Der Server würde sich durch diesen konkurrierenden Betrieb selber lahm legen. Also hat man diese Funktion gebaut, die in der untersten Betriebssystemeben gecodet ist und ungefähr 1000 bis 10000 mal schneller abläuft, als eine selbstgeschriebene.

    Die Chance, einen gültigen Dateinamen zu ergattern ist also selbst bei 100 Besuchern die Sekunde noch sehr gut.

    Wenn Du eine Temporärdatei anlegen willst, musst Du tmpfile() benutzen und bekommst ein Handle zurück. Das verleirt seine Gültigkeit leider schon nach dem Ende des Scriptes.

    Ich würde mir Dateien wünschen, die automatisch nach der ersten Auslieferung an den Client verschwinden. Also "selbstlöschende Dateien". Das kann man nur über einen Trick erreichen.

    Wann man die braucht? Bei CRM-Systemen...

    Liebe Grüße

    Tom