2016-07-06 11 views
1

Ich möchte eine Datei von meinem Android-Handy auf einen Server auf einem Raspberry Pi mit Apache2 hochladen. Ich möchte dies über PHP tun, die nicht funktioniert, also habe ich das Problem auf ein minimales Beispiel reduziert, das auch fehlschlägt. Ich denke, das Problem betrifft die Berechtigungen.Berechtigung verweigert Schreiben einer Datei auf einem Server

haben folgende wtest.php Datei auf dem Server:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/s$ 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 

<?php 
echo 'Current script owner: ' . get_current_user(); 
echo "\n"; 

$file2 = fopen('testfile2', 'w'); 
if ($file2 === false) 
{ 
    print_r(error_get_last()); 
} 
$fwrite2 = fwrite($file2, 'hello'); 
if ($fwrite2 === false){ 
    echo "\n"; 
    echo "write 2 error\n"; 
} 
else{ 
    echo "write2 OK\n"; 
} 
fclose($file2); 
?> 
</html> 

Wenn ich diese Datei von einem Browser auf dem PC zugreifen, bekomme ich

Current script owner: pi Array ([type] => 2 [message] => fopen(testfile2): failed to open stream: Permission denied [file] => /var/www/gcm/wtest.php [line] => 8) write 2 error 

Wenn ich laufe, was im Inneren der ist PHP-Tags als Skript auf dem Raspberry Pi-Server, funktioniert es OK. Vorübergehend Ich habe die Berechtigungen in der wtest.php und dem gcm-Ordner auf 777 geändert. Ich weiß, dass dies eine schlechte Idee für eine Permananet-Lösung ist, aber ich habe es kurz versucht, um das Problem einzugrenzen.

Bis jetzt hat nichts funktioniert. Jede Hilfe wird viel

geschätzt werden
+0

Sind Sie sicher, dass der Webserver-Benutzer und der Dateibesitzer identisch sind? Möchten Sie 'chmod 777' für die Datei schreiben, die geschrieben werden soll? –

+0

@PraveenKumar Die zu schreibende Datei existiert erst, wenn der Code ausgeführt wurde. Der PHP erstellt es. Es funktioniert im Skript auf dem Server, aber nicht über einen Browser. – NickT

+0

Überprüfen Sie, welcher Besitzer/Gruppe php läuft unter [get_current_user()] (http://php.net/manual/en/function.get-current-user.php), dann legen Sie den Besitzer/Gruppe des Web-Verzeichnisses auf die gleich. – Novocaine

Antwort

1

Anstelle des unter den ursprünglichen Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/s$ 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 

<?php 
echo 'Current script owner: ' . get_current_user(); 
echo "\n"; 

$file2 = fopen('testfile2', 'w'); 
if ($file2 === false) 
{ 
    print_r(error_get_last()); 
} 
$fwrite2 = fwrite($file2, 'hello'); 
if ($fwrite2 === false){ 
    echo "\n"; 
    echo "write 2 error\n"; 
} 
else{ 
    echo "write2 OK\n"; 
} 
fclose($file2); 
?> 
</html> 

Bitte ersetzen Sie die oben mit file_put_contents wie es ist:

dem Aufruf dieser Funktion fopen(), fwrite() identisch ist und fclose() nacheinander Daten in eine Datei schreiben.

<?php 
if (file_put_contents("testfile2", "hello") !== false) 
    echo "File Written"; 
else 
    echo "Failed"; 
?> 

Auch

Wenn Dateiname nicht vorhanden ist, wird die Datei erstellt. Andernfalls wird die vorhandene Datei überschrieben, sofern das Flag FILE_APPEND nicht gesetzt ist.

Hinweis: Ersetzen Sie einfach die gesamte Datei durch den obigen Inhalt. Keine Notwendigkeit von DocType Definition.

+0

Lief es, die Ausgabe war 'Failed' – NickT

+0

Ich versuchte es auf meinem Ubuntu Laptop mit PHP 7 und Apache2. Ich habe einen Ordner erstellt und die wtest.php installiert. Es ist auch auf dieser Maschine gescheitert. Es muss ein Apache-Problem sein, ich hatte gehofft, dass es eine Raspbian-Seltsamkeit sein könnte, aber anscheinend nicht. – NickT

+0

@NickT Können Sie versuchen, die Datei zu erstellen und dies zu versuchen? –

Verwandte Themen