2016-07-06 177 views
1

我希望從我的Android手機上傳文件到運行apache2的Raspberry Pi上的服務器。我想通過不工作的PHP來做到這一點,所以我已經將問題簡化爲一個最小化的例子,它也失敗了。我認爲這個問題涉及到權限。權限被拒絕在服務器上寫入文件

在服務器上擁有以下wtest.php文件:

<!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> 

如果我從瀏覽器訪問我的電腦文件,我得到

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 

如果我跑裏面是什麼的php標記作爲Raspberry Pi服務器上的腳本,它工作正常。 暫時我已將wtest.php和gcm文件夾的權限更改爲777。我知道這對於permananet解決方案來說是個壞主意,但我試圖簡單地試圖縮小問題的範圍。

到目前爲止,沒有任何工作。任何幫助將非常感激

+0

確定Web服務器用戶和文件所有者是否相同?你想在應該寫入的文件上執行'chmod 777'嗎? –

+0

@PraveenKumar要寫入的文件在執行代碼之前並不存在。 PHP創建它。它在服務器上運行的腳本中運行正常,但不能通過瀏覽器運行。 – NickT

+0

檢查[get_current_user()](http://php.net/manual/en/function.get-current-user.php)下正在運行的所有者/組的php,然後將Web文件夾的所有者/組設置爲相同。 – Novocaine

回答

1

,而不是下面的原代碼:

<!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> 

file_put_contents代替上面,因爲它是:

此功能是相同的調用fopen()fwrite()fclose()先後將數據寫入文件。

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

此外,

如果文件名不存在,則創建該文件。否則,現有文件將被覆蓋,除非設置了FILE_APPEND標誌。

注意:只需用上述內容替換整個文件即可。不需要DocType Definition

+0

冉它,輸出是'失敗' – NickT

+0

我在我的Ubuntu筆記本電腦上用PHP 7和Apache2試了一下。我創建了一個文件夾並安裝了wtest.php。它在該機器上也失敗了。它一定是Apache的問題,我曾希望它可能是一些Raspbian的怪異,但顯然不是。 – NickT

+0

@NickT你可以嘗試創建文件並嘗試這個? –

相關問題