Datei erzeugen mit fopen; mal ja, mal nein

original Thema anzeigen

30.04.15, 12:12:48

AranankA

Warum erzeugt
PHP:
1:
 fopen('d:\dateiname.txt''w+'); 
eine Datei, aber
PHP:
1:
2:
 $d_name 'd:\dateiname.txt';
$d_offen fopen($d_name'w+'); 
keine? Wobei ich alle Möglichkeiten für den Dateinamen probiert habe:
PHP:
1:
2:
3:
4:
5:
6:
 $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';
... 
30.04.15, 18:34:46

Lighty

Beitrag geändert von: Lighty - 30.04.15, 18:35:46

Hallo AranankA !

Zitat von AranankA:

PHP:
1:
2:
 $d_name 'd:\dateiname.txt';
$d_offen fopen($d_name'w+'); 


... mmmh !?
Warum doppelt !?

PHP:
1:
 $d_offen fopen('d:\dateiname.txt''w+'); 

30.04.15, 21:10:23

AranankA

Beitrag geändert von: AranankA - 30.04.15, 21:36:16

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:
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
 $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;
} 
03.05.15, 00:49:47

Lighty

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

Hast du es mal so versucht !?

PHP:
1:
2:
 $d_name 'dateiname.txt';
$d_offen fopen($d_name'w+'); 

04.05.15, 10:05:21

AranankA

Habe ich mal umgesetzt:
PHP:
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
 <?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;
    }
     ?>
Ausgabe siehe Anhang...
04.05.15, 15:53:03

Lighty

Beitrag geändert von: Lighty - 04.05.15, 15:57:19

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

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

PHP:
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
 <?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;
    }
 ?>


... könnte es an Xampp liegen !?
04.05.15, 20:44:17

AranankA

Beitrag geändert von: AranankA - 04.05.15, 20:59:55

Ich nehme an, du hast unter Linux gearbeitet?
Nach mehreren Versuchen unter Windows haben wir folgende Lösung gefunden:
PHP:
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
 <?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;
    }
 ?>
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.
04.05.15, 23:12:59

Lighty

Zitat von AranankA:
Ich nehme an, du hast unter Linux gearbeitet?

... jüpp ! ;)

Zitat:
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 !?