# php datei erstellen über php-script



## curi (17. Juli 2004)

wie der titel schon sagt.

nur ich will halt ein formular hab textarea wo ich den code eintrage was nachher in der datei stehen soll. und name per input nur die datei an die des geschickt wird und die .php datei erstellt weis ich nicht wie des geht

ich hoffe ihr versteht mich greetz curi


----------



## Kerwin (17. Juli 2004)

ganz normal wie eine Textdatei behandeln nur das diese dann *.php heisst.

fputs lautet da eine Variante um Daten in eine Datei zu schreiben


----------



## curi (17. Juli 2004)

hast du mit ein beispiel script weil ich bin zwar am suchen aber ich find grad keins


----------



## ludz (17. Juli 2004)

Folgendes sollte funktionieren:


```
<?php
$dateiname = 'script'; //ggf. dann hier die Daten aus dem Formular beziehen
$code = "<?php echo 'Hallo Welt!'; ?>";
$datei = fopen($dateiname.'.php', 'w');
fwrite($datei, $code);
fclose($datei);
?>
```

Hier wird dann also die Datei script.php angelegt, welche wiederum nach einem Aufruf 'Hallo Welt!' ausgeben sollte.

Ergänzende Lektüre für Dateioperationen: http://www.php.net/filesystem/
Oder auch mal bei schattenbaum.de nachschauen oder oder oder...

PS: Bitte achte das nächste mal auf eine korrekte Groß- / Kleinschreibung und Zeichensetzung (siehe auch die Netiquette).


----------



## curi (17. Juli 2004)

ich habe das gerade mal probiert und so zusammengeschrieben würde das auch gehen?

<?
$dateiname = touch("$dateiname.php");


$datei = "$dateiname"; // Datei in die wir schreiben wollen 
$fp = fopen($datei,"w");  //Datei wird zum schreiben geöffnet 

fwrite($fp,"$inhalt"); // Daten werden jetzt mit fwrite in die php Datei geschrieben. 
fclose($fp);
?>

?


----------



## ludz (17. Juli 2004)

Ok, hierzu mal ein paar Anmerkungen:

1.


> [...]würde das auch gehen?


Warum probierst dus nicht aus?  
Na gut, es sollte eigentlich schon funktionieren, aber...

2.
Warum die Datei erst mit touch() anlegen und danach wieder zum Schreiben öffnen, wenn der alleinige Zugriff durch [phpf]fopen[/phpf] mit dem Modus 'w' die Datei, falls noch nicht vorhanden, anlegt? touch() wäre hier also redundant.

3.

```
fwrite($fp,"$inhalt");
```
Obwohl das Ganze natürlich syntaktisch richtig ist, so machst du hier allerdings einen logischen Fehler, sofern du wirklich $inhalt (die Variablenbezeichnung, nicht deren Wert!) in die Datei schreiben willst. PHP würde den String zwischen " und " parsen und versuchen $inhalt durch den Wert der gleichnamigen Variable zu ersetzen. Da aber keine Variable $inhalt existiert, wird leider auch nichts in die Datei geschrieben.
Wenn du wirklich den Wert von $inhalt speichern willst, dann ignoriere obiges (aber mach dann bitte auch die Anführungszeichen um die Variable weg).


----------



## curi (17. Juli 2004)

ok hatte es schon ausprobiert aber ging nicht ganz jetzt habe ioch meins nochmal editiert es sieht jetzt so aus

<?
$datei = "$name"; 
$fp = fopen($datei,"w");

fwrite($fp,$inhalt); 
fclose($fp);
?>

das problem:

Warning: fwrite(): supplied argument is not a valid stream resource in /home/export/www/vhosts/funnetwork/hosting/curi/datei erstellen/datei_erstellen.php on line 5

Warning: fclose(): supplied argument is not a valid stream resource in /home/export/www/vhosts/funnetwork/hosting/curi/datei erstellen/datei_erstellen.php on line 6


----------



## ludz (17. Juli 2004)

Könnte sein, dass die Dateierstellung an fehlenden Rechten scheitert. Versuche mal, dem Ordner, in dem du das Script erstellst einen CHMOD von 777  zu geben.


----------



## curi (17. Juli 2004)

hatte ich gemacht und der ordner hat chmod 777

edit: alles hat nur chmod 777 und immernoch der gleiche fehler


----------



## KristophS (17. Juli 2004)

```
$datei = "$name";
$fp = fopen($datei,"w");

fwrite($fp,$inhalt);
fclose($fp);
```

Du willst eine Datei mit dem Namen $name erstellen?
Oder dem Inhalt von $name?
Ich glaube nicht das ein Sonderzeichen wie $name erlaubt ist.
Wenn du allerdings den Inhalt der Variabel $name willlst :


```
$datei = $name;
$fp = fopen($datei,"w");

fwrite($fp,$inhalt);
fclose($fp);
```


----------



## Kerwin (18. Juli 2004)

> _Original geschrieben von KristophS _
> $datei = "$name";
> 
> Du willst eine Datei mit dem Namen $name erstellen?




Blödsinn, steht da ein " oder ein ' ? Ist nen großer Unterschied. 

$datei = '$name'; würde als String dann $name haben, weil die Ausführungen jeglicher Befehlszeichen ignoriert werden. Auch ein \n für Zeilenumbruch würde ignoriert werden und einfach ins echo kommen.

bei " ist das aber andersrum.


----------



## SilentWarrior (18. Juli 2004)

Warum lässt du die Anführungszeichen nicht einfach ganz weg?


----------



## Kerwin (18. Juli 2004)

das ist ne andere Frage, habe da nur die AUssage korrigiert.

möglich wäre es ja zum beispiel $datei = "user_$name"; um evtl eine gewisse übersicht hineinzubringen wenn man sehr viele datein hat etc.


----------



## curi (18. Juli 2004)

> _Original geschrieben von KristophS _
> 
> ```
> $datei = "$name";
> ...



immernoch die gleichen fehler alle haben chmod 777


----------



## EyeOfTheTiger (18. Juli 2004)

Dieser Code ist falsch, denn...


```
$datei = $name; 
$fp = fopen($datei,"w "); 

fwrite($fp,$inhalt); 
fclose($fp);
```

...wenn die Datei noch nicht besteht, funktioniert doch dies gar nicht.
Bei mir funktioniert das *nur* mit:


```
$datei = $name; 
$fp = fopen($datei,"w+ "); 

fwrite($fp,$inhalt); 
fclose($fp);
```

Denn dann wird die Datei erstellt, falls diese nicht besteht.
Ich hoffe ich schreibe hier nichts falsches, bitte verbessert mich
falls das oben genannte nicht stimmt.

Gruss, EyeOfTheTiger


----------



## Harrier (18. Juli 2004)

Stimmt schon! Wenn die Datei noch nicht existiert muss es w+ heißen!


----------



## ludz (18. Juli 2004)

> Stimmt schon! Wenn die Datei noch nicht existiert muss es w+ heißen!



Das dachte ich zwar auch immer, aber siehe [phpf]fopen[/phpf]

Modus *w*


> Ö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.*



Naja, vielleicht ist das php.net doch nicht allwissend


----------



## curi (18. Juli 2004)

ich hatte es als erstes mit meinem ersten script aber nach dem dann das erste von euch kahm hab ich mir gedacht ihr könnts besser als ich und hab halt das + weggemacht. ich hatte des auch gelesen mit dem w+ aber naja ich probier das jetzt mal mit dem + aus und erstatte bericht ^^

edit:


```
<?
$datei = $name; 
$fp = fopen($datei,"w+ "); 

fwrite($fp,$inhalt); 
fclose($fp);
?>
```

geht immernoch nicht immernoch der gleiche fehler


----------



## curi (18. Juli 2004)

brauche immernoch hilfe


----------



## ludz (18. Juli 2004)

Gibt es denn irgendwelche anderen Beschränkungen auf deinem Webserver in Bezug auf Verzeichnisse und das Anlegen von Dateien, z.B. SAFE MODE?


----------



## curi (18. Juli 2004)

gute frage mein host is funpic.de

edit: aber mit meinem scripot zum hochladen von dateien hat er kein problem


----------



## Aztech (24. Juli 2004)

> _Original geschrieben von curi _
> *ich hatte es als erstes mit meinem ersten script aber nach dem dann das erste von euch kahm hab ich mir gedacht ihr könnts besser als ich und hab halt das + weggemacht. ich hatte des auch gelesen mit dem w+ aber naja ich probier das jetzt mal mit dem + aus und erstatte bericht ^^
> 
> edit:
> ...



Klar, daß das nicht geht ... zumindest bei wenn der Qellcode als solches genommen wird, ohne daß die Variablen vorher gefüllt werden.


*$datei = $name;* ---> ändern nach ---> *$datei = "testname.txt";*
*$fp = fopen($datei,"w+ ");* ---> w bedeutet Schreibzugriff, w+ bedeutet Lese und Schreibzugriff, wobei die Datei sowohl bei w als auch bei w+ neu erstellt wird, wenn sie nicht existiert

*fwrite($fp,$inhalt);* ---> ändern nach ---> *fwrite($fp,"inhalt");* ---> bzw. vorher die Variable $inhalt mit Text füllen
*fclose($fp);*


----------



## curi (25. Juli 2004)

> _Original geschrieben von Aztech _
> *Klar, daß das nicht geht ... zumindest bei wenn der Qellcode als solches genommen wird, ohne daß die Variablen vorher gefüllt werden.
> 
> 
> ...



ich hab des inzwischen schon hinbekommen und so wie dus geschribene hast wärs auch nicht gegangen ...


----------

