PHP 实时服务器上的文件权限问题
PHP file permission issues on live server
最近,我把一个网站上线了,所有与文件相关的操作都停止了,例如,copy
、imagecreatefromjpeg
等,由于权限问题。
所有文件都创建在files/ 目录中。我递归地给了它 755 个目录权限和 644 个所有文件权限。 PHP 函数仍然不起作用。仅当我授予 777 权限(甚至 775 都不起作用)时它才有效。
我检查了其他实时项目的权限。他们有 755 个目录和 644 个文件,但它们似乎仍然可以正常工作,没有任何权限问题。
任何人都可以向我解释这个特定网站上出现此问题的原因吗?
谢谢
听起来像是所有权问题。
要进行测试,请在服务器上创建一个具有 777 权限的文件夹(例如 tmp,可能在您的文档根目录中)。
然后创建一个脚本(与 tmp 一起)对那个文件夹进行简单的写入。
<?php
file_put_contents(__DIR__ . '/tmp/test.txt', 'hello earth');
然后查看结果文件的所有权和权限。
在我的开发服务器上,我在 Linux (Debian) 上的 Web 服务器 Apache 下安装了 Php 运行ning(使用 mod php)。并作为用户 'www-data' 编写脚本 运行。所以这里的关键是用户 www-data
需要能够写入文件夹。
如果 Web 服务器无法写入该文件夹,则 Apache 错误日志中会出现类似以下错误的内容:
[Tue May 10 08:27:52.404959 2016] [:error] [pid 18] [client 172.17.42.1:59832] PHP Warning: file_put_contents(/var/www/Whosebug/tmp/test.txt): failed to open stream: Permission denied in /var/www/Whosebug/so_test.php on line 3, referer: http://localhost/
尝试了解您的服务器环境和 unix 权限。
最近,我把一个网站上线了,所有与文件相关的操作都停止了,例如,copy
、imagecreatefromjpeg
等,由于权限问题。
所有文件都创建在files/ 目录中。我递归地给了它 755 个目录权限和 644 个所有文件权限。 PHP 函数仍然不起作用。仅当我授予 777 权限(甚至 775 都不起作用)时它才有效。
我检查了其他实时项目的权限。他们有 755 个目录和 644 个文件,但它们似乎仍然可以正常工作,没有任何权限问题。
任何人都可以向我解释这个特定网站上出现此问题的原因吗?
谢谢
听起来像是所有权问题。
要进行测试,请在服务器上创建一个具有 777 权限的文件夹(例如 tmp,可能在您的文档根目录中)。
然后创建一个脚本(与 tmp 一起)对那个文件夹进行简单的写入。
<?php
file_put_contents(__DIR__ . '/tmp/test.txt', 'hello earth');
然后查看结果文件的所有权和权限。
在我的开发服务器上,我在 Linux (Debian) 上的 Web 服务器 Apache 下安装了 Php 运行ning(使用 mod php)。并作为用户 'www-data' 编写脚本 运行。所以这里的关键是用户 www-data
需要能够写入文件夹。
如果 Web 服务器无法写入该文件夹,则 Apache 错误日志中会出现类似以下错误的内容:
[Tue May 10 08:27:52.404959 2016] [:error] [pid 18] [client 172.17.42.1:59832] PHP Warning: file_put_contents(/var/www/Whosebug/tmp/test.txt): failed to open stream: Permission denied in /var/www/Whosebug/so_test.php on line 3, referer: http://localhost/
尝试了解您的服务器环境和 unix 权限。