在Linux机器上使用PHP上传文件

时间:2017-03-31 18:00:36

标签: php linux raspbian user-permissions

我正在尝试在无头的raspbian机器上制作某种云应用程序。 测试发生在运行在windows8.1上的wamp-server上。 PHP版本是5.6

代码在我的测试窗口上工作正常,但是在我的linux服务器上运行相同的代码时遇到了问题。我已经把这个问题缩小到这样一个事实:(我的PHP用户背后)我的PHP代码对它应该存储文件的文件夹没有写权限。

我可以想出两种方法来解决这个问题:要么给予php-user权限,要么改变php代码背后的用户。如果可以更改每个脚本,那么最后一个将非常有趣。

所以,对于我的具体问题:

1)我在哪里可以找到我的PHP代码使用的用户?

2)我可以更改我的PHP代码使用的用户,最好是按项目更改吗?

编辑:

我的脚本以root身份运行,如echo get_current_user();所示。我将所有文件的所有权更改为root:webhosting,之前是ftpuser:ftpgroup。但是,当设置770的权限时,我会被拒绝访问

EDIT2:

使用var_dump(posix_geteuid());代替get_current_user();时,我会获得与用户www-data匹配的UID 33。

解决方案:

通过var_dump(posix_geteuid();查看EUID,我能够验证与get_current_user();不匹配的实际用户。使用sudo chown -R www-data:www-data <root of site>更改directroy及其中的所有文件我设法设置了正确的权限。

2 个答案:

答案 0 :(得分:1)

我不确定具体是什么,但通常当我遇到类似问题时我将所有权更改为www-data:www-data,如果需要上传文件夹,我将文件夹权限更改为0755,将文件内部权限更改为0644

修改

出于安全考虑,我更改了权限设置。

答案 1 :(得分:1)

您的PHP / Apache用户可能是www-data。你可能想要运行这样的东西。

sudo find path/to/project/ -exec chown www-data:root {} \;

文件权限也可能是个问题。如果是这样,运行这样的东西。

sudo find path/to/project/ -type d -exec chmod 775 {} \;
sudo find path/to/project/ -type f -exec chmod 664 {} \;