Datei erzeugen mit fopen; mal ja, mal nein

( HTML, PHP, Javascript & Co ... )
Antworten
AranankA
Beiträge: 1558
Registriert: 11.09.2006, 10:12

Beitrag von AranankA »

Warum erzeugt
[PHP]
fopen('d:\dateiname.txt', 'w+');
[/PHP]eine Datei, aber
[PHP]
$d_name = 'd:\dateiname.txt';
$d_offen = fopen($d_name, 'w+');
[/PHP]keine? Wobei ich alle Möglichkeiten für den Dateinamen probiert habe:
[PHP]
$d_name = 'd:\dateiname.txt';
$d_name = ("d:\dateiname.txt");
$d_name = 'd:\\dateiname.txt';
$d_name = "d:\\dateiname.txt";
$d_name = 'd:/dateiname.txt';
...
[/PHP]
Benutzeravatar
Lighty
Beiträge: 8394
Registriert: 24.08.2006, 02:28

Beitrag von Lighty »

Hallo AranankA !
AranankA hat geschrieben: [PHP]
$d_name = 'd:\dateiname.txt';
$d_offen = fopen($d_name, 'w+');
[/PHP]
... mmmh !?
Warum doppelt !?

[PHP]$d_offen = fopen('d:\dateiname.txt', 'w+');[/PHP]
LG, Lighty
AranankA
Beiträge: 1558
Registriert: 11.09.2006, 10:12

Beitrag von AranankA »

Danke für das Interesse! :smile:

War klar, daß diese Frage kommt... :wink:

Nicht doppelt! Eher vereinfachend: Der Dateiname wird später aus einer Datenbank ausgelesen und je nach Anforderung angelegt. Nimm das Ganze als Teil einer Funktion, der ein belibiger Name übergeben wird und die dazu eine Datei anlegt. Deshalb eine Variable, die diesen Namen trägt.

Beispiel (ohne Wert auf Vollständigkeit oder Schönheit!):
[PHP]
$dat_name = 'vierter_name_aus_datenbank'; // paul
$ausg_message = 'irgendwas_aus_einer_anderen_datenbank'; // drei

$string = 'Hallo ' .$dat_name .$ausg_message;
// erzeugt --> Hallo pauldrei
$ausg_dat = "d:\" .$dat_name . ".txt";
// soll erzeugen --> d:\paul.txt
// was auch gemacht wird. lt. Debuger ist $ausg_dat
// an dieser Stelle --> "d:\paul.txt"

if(is_writable($ausg_dat)){
$file_p = fopen($ausg_dat, 'w+');
// so dass hier stehen müsste --> $file_p = fopen("d:\paul.txt", 'w+');"
// was aber die Datei nicht anlegt (Verzeichniss ist leer).
// Schreibe ich hier direkt --> $file_p = fopen("d:\paul.txt", 'w+');
// funktioniert alles (Datei im Verzeichniss mit "Hallo pauldrei" als
// Inhalt...

if((! $file_p){
echo 'Datei nicht gefunden!';
exit;
}
$file_s = fwrite($file_p, $string);

if(! $file_s){
echo 'Kein Schreiben möglich';
exit;
}

echo 'Datei geschrieben und gespeichert';
fclose($file_p);
}

else {
echo 'Datei nicht vorhanden!;
exit;
}[/PHP]
Benutzeravatar
Lighty
Beiträge: 8394
Registriert: 24.08.2006, 02:28

Beitrag von Lighty »

... na ja, so klar war es nicht, dass diese Frage kommt !? :D

Hast du es mal so versucht !?

[PHP]$d_name = 'dateiname.txt';
$d_offen = fopen($d_name, 'w+');[/PHP]
LG, Lighty
AranankA
Beiträge: 1558
Registriert: 11.09.2006, 10:12

Beitrag von AranankA »

Habe ich mal umgesetzt:[PHP]
<?php
error_log(E_ALL);

$dat_name = 'paul'; // paul
echo 'Dateiname: ' . $dat_name . '<br>';
$ausg_message = 'drei'; // drei
echo 'Message: ' . $ausg_message . '<br>';

$string = 'Hallo ' .$dat_name .$ausg_message;
echo 'Zusammen: ' . $string . '<br>';
// erzeugt --> Hallo pauldrei
$ausg_dat = ('"' . 'd:\\' .$dat_name . '.txt' . '"');
echo 'Ausgabepfad: ' . $ausg_dat . '<br>';
if(! file_exists($ausg_dat)){
fopen($ausg_dat, "w");
fclose($ausg_dat);
}

if(is_writable($ausg_dat)){
$file_p = fopen($ausg_dat, 'w+');


if (! $file_p){
echo 'Datei nicht gefunden!';
exit;
}
$file_s = fwrite($file_p, $string);

if (! $file_s){
echo 'Kein Schreiben möglich';
exit;
}

echo 'Datei geschrieben und gespeichert';
fclose($file_p);
}

else {
echo 'Datei nicht vorhanden!';
exit;
}
?>
[/PHP]Ausgabe siehe Anhang...
Benutzeravatar
Lighty
Beiträge: 8394
Registriert: 24.08.2006, 02:28

Beitrag von Lighty »

... also, das Script läuft soweit durch !
( habe es auf meinem Server - ohne Laufwerksnennung - getestet )

http://arananka.j-remmer.de/fopen-test.php

[PHP]<?php
error_reporting(E_ALL);

$dat_name = 'paul'; // paul
echo 'Dateiname: ' . $dat_name . '<br>';
$ausg_message = 'drei'; // drei
echo 'Message: ' . $ausg_message . '<br>';

$string = 'Hallo ' .$dat_name .$ausg_message;
echo 'Zusammen: ' . $string . '<br>';
// erzeugt --> Hallo pauldrei
$ausg_dat = ($dat_name . '.txt');
echo 'Ausgabepfad: ' . $ausg_dat . '<br><br>';
if(!file_exists($ausg_dat)){
fopen($ausg_dat, 'w');
fclose($ausg_dat);
}

if(is_writable($ausg_dat)){
$file_p = fopen($ausg_dat, 'w+');


if (!$file_p){
echo 'Datei nicht gefunden!';
exit;
}
$file_s = fwrite($file_p, $string);

if (!$file_s){
echo 'Kein Schreiben möglich';
exit;
}

echo 'Datei geschrieben und gespeichert';
fclose($file_p);
}

else {
echo 'Datei nicht vorhanden!';
exit;
}
?>[/PHP]

... könnte es an Xampp liegen !?
LG, Lighty
AranankA
Beiträge: 1558
Registriert: 11.09.2006, 10:12

Beitrag von AranankA »

Ich nehme an, du hast unter Linux gearbeitet?
Nach mehreren Versuchen unter Windows haben wir folgende Lösung gefunden:
[PHP]<?php
error_log(E_ALL);

$dat_name = 'paul';
echo 'Dateiname: ' . $dat_name . '<br>';
$ausg_message = 'drei';
echo 'Message: ' . $ausg_message . '<br>';

$string = 'Hallo ' .$dat_name .$ausg_message;
echo 'Zusammen: ' . $string . '<br>';

$ausg_dat = "d:\\" . $dat_name . ".txt";
echo 'Ausgabepfad: ' . $ausg_dat . '<br>';
if(! file_exists($ausg_dat)){
$s = fopen($ausg_dat, "w");
fclose($s);
}

if(is_writable($ausg_dat)){
$file_p = fopen($ausg_dat, 'w+');

if (! $file_p){
echo 'Datei nicht gefunden!';
exit;
}
$file_s = fwrite($file_p, $string);

if (! $file_s){
echo 'Kein Schreiben möglich';
exit;
}

echo 'Datei geschrieben und gespeichert';
fclose($file_p);
}

else {
echo 'Datei nicht vorhanden!';
exit;
}
?>[/PHP]Entscheidend war/ist hier Zeile 12. Anscheinend wird die Interpretation der Adresse unter den Systemen unterschiedlich gehandhabt. Diese Version der Zeile 12 funktioniert mit Windows, aber nicht mit Mac.
Benutzeravatar
Lighty
Beiträge: 8394
Registriert: 24.08.2006, 02:28

Beitrag von Lighty »

AranankA hat geschrieben:Ich nehme an, du hast unter Linux gearbeitet?
... jüpp ! ;)
Entscheidend war/ist hier Zeile 12. Anscheinend wird die Interpretation der Adresse unter den Systemen unterschiedlich gehandhabt. Diese Version der Zeile 12 funktioniert mit Windows, aber nicht mit Mac.
Mit Mac kenne ich mich nicht mit aus !
Unter Windows kann es aber erforderlich sein im Pfad die \ zu escapen oder / zu verwenden !?
LG, Lighty
Antworten

Zurück zu „Webdesign“