Seite 1 von 1

Verfasst: 30.04.2015, 12:12
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]

Verfasst: 30.04.2015, 18:34
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]

Verfasst: 30.04.2015, 21:10
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]

Verfasst: 03.05.2015, 00:49
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]

Verfasst: 04.05.2015, 10:05
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...

Verfasst: 04.05.2015, 15:53
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 !?

Verfasst: 04.05.2015, 20:44
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.

Verfasst: 04.05.2015, 23:12
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 !?