权限被拒绝在服务器上写入文件
问题描述:
我希望从我的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解决方案来说是个坏主意,但我试图简单地试图缩小问题的范围。
到目前为止,没有任何工作。任何帮助将非常感激
答
,而不是下面的原代码:
<!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
。
确定Web服务器用户和文件所有者是否相同?你想在应该写入的文件上执行'chmod 777'吗? –
@PraveenKumar要写入的文件在执行代码之前并不存在。 PHP创建它。它在服务器上运行的脚本中运行正常,但不能通过浏览器运行。 – NickT
检查[get_current_user()](http://php.net/manual/en/function.get-current-user.php)下正在运行的所有者/组的php,然后将Web文件夹的所有者/组设置为相同。 – Novocaine