权限被拒绝在服务器上写入文件

问题描述:

我希望从我的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

,而不是下面的原代码:

<!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你可以尝试创建文件并尝试这个? –