Home-Produkte-Testarea-Kontakt-Datenschutz-Aktualisiert: 27-Apr-2006
< Voriger Tag   Nächster Tag >

Donnerstag, 27. April 2006

PHP: Dateizugriff via FTP auf Shared-Hosts

Auf Shared-Hosts gibt es das Problem, dass der Server unter dem einen User läuft, z.B. www oder nobody und die Zugriffsrechte der Dateien dem User des FTP-Zugangs zugeordnet sind.

Über fopen('path/to/file.txt', 'w') lassen sich dadurch keine neuen Dateien anlegen und mit der Zugriffsfreigabe für alle per chmod 0777 hätten auch alle anderen Webpräsenzen auf demselben Server Zugriff auf die Dateien.

Zugriff per ftp://...

Als Alternative kann in PHP über den FTP-Wrapper auf die Dateien zugegriffen werden:

$filename = 'ftp://user:password@ftp.example.com/path/to/file.txt';

$file = fopen($filename, 'w');
if($file)
{
    fputs($file, "Hello world!");
}

Beim Lesen mit readfile() und ähnlichen Funktionen funktioniert dies wie vom Dateisystem gewohnt. Beim Schreiben, wie im obigen Beispiel, geht es aber nur, wenn die Datei noch nicht existiert, ansonsten gibt es eine Fehlermeldung. Ab PHP 5 lässt sich dies mit der overwrite-Option lösen.

overwrite ab PHP 5

Diese kann entweder über den vierten Parameter an fopen() übergeben werden

$opts    = array('ftp' => array('overwrite' => true));
$context = stream_context_create($opts);

$file = fopen($filename, 'w', false, $context);

oder auch global für alle Dateisystemaufrufe gesetzt werden

$default = stream_context_get_default($opts);
$file = fopen($filename, 'w');

Vom Namen der Funktion stream_context_get_default() darf man sich dabei nicht verwirren lassen. Wenn als Parameter ein Array mit den gewünschten Einstellungen übergeben wird, dann werden die Einstellungen nicht nur ausgelesen, sondern auch gesetzt.

Durch das 'overwrite' => true verhält sich fopen() beim Schreiben von Dateien via ftp:// nun wie vom Dateisystem gewohnt und legt immer eine neue Datei an, wobei eine schon vorhandene überschrieben wird. Das funktioniert jedoch erst ab PHP 5.

Und ab PHP 5 funktionieren auch Funktionen wie unlink(), rename() und mkdir() über den FTP-Wrapper. Komplette Übersicht im PHP-Handbuch.

Und PHP 4?

Da kann man zum Überschreiben, Löschen und ähnlichen die FTP-Funktionen von PHP nutzen. Muss dann aber auf den FTP-Wrapper verzichten und mit ftp_login(), ftp_put(), ... arbeiten.

Zugangsdaten speichern?

Statt die FTP-Zugangsdaten auf dem Webserver zu speichern, könnten sie auch nach Bedarf eingegeben werden. Das macht z.B. Sinn, wenn diese Daten nur für eine Installation oder hin und wieder mal benötigt werden. Oder, da der Zugriff sowieso per FTP erfolgt, könnte das Skript auch auf dem eigenen Rechner laufen und das Schreiben aus der Ferne übers Netz erfolgen, statt direkt auf dem Webserver.

[Direktlink]

< Voriger Tag   Nächster Tag >

  RSS V0.91

<April 2006 >
     0102
03040506070809
10111213141516
17181920212223
24252627282930

Home-Produkte-Testarea-Kontakt-Datenschutz-Aktualisiert: 27-Apr-2006
(C) 2000-2018 by Sven Drieling