Via PHP hochgeladene Fotos bekommen die Dateiberechtigung 644

leicht-debil

Neu angemeldet
Registriert
13 Aug. 2013
Beiträge
57
Ort
Kassel
Servus Leute!

Folgendes Problem:
Ich lade Fotos via PHP (HTML-Formular, enctype=multipart/form-data) auf meinen Webserver. Dem Zielverzeichnis habe ich zuvor die Berechtigungs-Attribute "777" eingeräumt.
Der Upload und das Speichern der Fotos klappt auch problemlos, allerdings kann ich die Dateien nachfolgend nicht mit "unlink" löschen, da die Dateien mit der Attribute "644" im Zielverzeichnis abgelegt werden. Das ganze ist mir erst aufgefallen, nachdem folgendes kleine Skript dauerhaft fehl schlug:

[src=php]if(file_exists("zielverzeichnis/datei.jpg")) {
echo "Datei existiert!";
// unlink sobald das Rechteproblem gelöst ist
}[/src]

Auf "php.net" finde ich zu file_exists folgenden Hinweis:
Warnung
Diese Funktion gibt FALSE für Dateien zurück, die wegen safe mode Einschränkungen nicht zugänglich sind

Der "Savemode" steht auf meinem Webserver auf "off", was also konkret ist mit der Warnung gemeint?
Ich tippe mal auf serverseitig falsch vergebene User-Rechte, weiß aber nicht so Recht, was ich konkret überprüfen soll.
Wenn es hilft: Der Webserver läuft unter Apache 2.2.22, die installierte PHP-Version ist 5.4.36.
 
777? Bist du dir sicher, dass du die Dateien ausführen können möchtest?

7 read, write and execute
6 read and write
5 read and execute
4 read only
3 write and execute
2 write only
1 execute only
0 none

Die Dateien in dem Verzeichnis und insbesondere das Verzeichnis brauchen sicherlich nicht das execute-bit!
644 ist definitiv die korrekte Berechtigungsrichtlinie, ggf. sogar 640 oder sogar 600.

Bist du dir sicher, dass die Dateien auch dem Nutzer gehören, der PHP ausführt? (z.B. www-data)

Lade mal bitte 2 Dateien hoch:
1. Die erste Datei per FTP test_ftp.jpg
2. Die zweite Datei via PHP test_php.jpg

Anschließend führst du im Verzeichnis folgendes aus:
[src=bash]ls -lA[/src]

Außerdem könntest du eine PHP Datei mit folgendem Inhalt hochladen:
[src=php]<?php phpinfo(); ?>[/src]
und einen Screenshot des Outputs posten, wenn du die Datei aufrufst.

In einigen meiner Meinung nach kaputten Konfigurationen laufen Webserver/PHP und FTP unter unterschiedlichen Nutzern.
Ggf. noch mit interessanten Manipulationen der Berechtigung von Dateien, je nachdem von welchem Nutzer sie erstellt wurden.

Vielleicht hilft dir das:
Es erfordert jedoch shell_exec und das steht nicht immer zur Verfügung.
[src=php]<?php
/**
* @output string username
*/
function WHOAMI(){
return shell_exec("whoami");
}

/**
* takes ownership of any file
* @output true on success
* false otherwise
*/
function takeOwn($file){
$me = WHOAMI();
return chown($file, $me);
}
?>[/src]
 
Wenn du auf den Server schaust und die Datei ist da, aber PHPs "file_exists" gibt dir false aus, dann ist wahrscheinlich der Pfad falsch.
 
Hast du das mit SetGID probiert?

* Verzeichnis Group auf Apache User ändern: chown deinuser:www-data verzeichnisname
* Write Permission und SetGID setzen: chmod g+rws verzeichnisname

Danach sollten alle Files im Verzeichnis als Gruppe www-data zugewiesen bekommen und rw für diese erlauben.
 
Zurück
Oben