PHP: "无法打开流:权限被拒绝"

6
我在尝试通过某些函数访问任何目录或文件时,我的服务器上出现了一些有趣的结果。我已经将所有文件和目录权限设置为777,并将内容所有者更改为Apache,但我仍然会收到错误消息。代码如下:
move_uploaded_file($_FILES['file']['tmp_name'], '/var/www/html/fileContent_Site/userData/'.$_SESSION['username'].DIRECTORY_SEPARATOR.$_FILES['file']['name']);
file_put_contents('userData/userData.txt', $result,FILE_APPEND); mkdir("userData/".$register['username']); 对于“move_uploaded_file()”,我得到以下错误信息:

move_uploaded_file(/var/www/php/Site/userData/radi/110729.png):无法打开流:权限被拒绝,位于/var/www/php/Site/upload.php内

move_uploaded_file():无法将'/tmp/phpUFvMcn'移动到'/var/www/php/Site/userData/radi/110729.png',位于/var/www/php/Site/upload.php内

对于“file_put_content()”和“mkdir()”,我得到以下错误信息:

file_put_contents(userData/userData.txt):无法打开流:权限被拒绝,位于/var/www/php/Site/register.php内

mkdir():权限被拒绝,位于/var/www/php/Site/register.php内


我认为这是一个所有者错误。PHP所有者是deamon,所以请检查您的服务器配置。 - Hkachhia
3个回答

7
  1. 检查运行PHP的所有者。要检查-只需在PHP文件中的“file_put_contents”附近添加这些字符串:

    echo "当前用户:".get_current_user();

    echo "脚本是由用户执行的:".exec('whoami');

  2. 如果您看到当前用户和“脚本用户”之间的差异,则找到了问题所在。

输出示例:

current user: root
script was executed under user: www-data

只需将合适的用户设置为您的PHP文件目录/您想要从PHP脚本中写入的目录即可:

在Linux终端中执行:

chown -R www-data:www-data /path/to/the/folder

请注意,“www-data”用户仅为示例。您应该使用从“脚本在哪个用户下执行”的输出中获取的用户。
附注: 要检查文件夹所有者,您可以使用此Linux命令:
ls -ltr

附注: 检查你的文件夹是否拥有正确的访问权限:755, php文件的文件夹应该有“644”的访问权限。

要检查权限,请使用与所有者检查相同的命令:

ls -ltr

您会看到类似于:

drwxr-xr-x  10 www-data www-data 4096 Aug  5 15:18 api

"drwxr-xr-x"是访问权限。可以搜索谷歌以获得更多信息。


1
打开 http.conf 文件(在 /opt/lampp/etc/httpd.conf 中)。
编辑此部分:
<IfModule unixd_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.  
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User hostname
Group hostname
</IfModule>

看看,如果可以的话。


当我更改 .httpd 运行的用户时,即使使用一个在 sudoers 文件中的用户,我仍然会收到更多的错误。 - Radi
你的项目的用户和组名称是什么?是www-data吗? - Gaurav Dave
项目的路径是 /var/www/php/site。php 文件夹中所有文件和文件夹的所有者都是我的用户,组是 apache,但即使我运行 'chown -R apache:apache php' 命令,仍然没有任何变化,出现相同的错误。 - Radi
多年来,每次我将服务器文件与本地文件同步时都要执行chown命令,终于!我修改了apache2.conf文件中的以下行: # 这些需要在 /etc/apache2/envvars 中设置 User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} 现在它可以正常工作了。 具体操作是:将“myuser”添加到“www-data”组,并使用“User myuser”修改了apache配置文件。 - Roman

0

使用

$_SERVER["DOCUMENT_ROOT"]."/myFolder/path to upload folder". 

并且检查一次


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接