Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux机器上使用PHP上载文件_Php_Linux_Raspbian_User Permissions - Fatal编程技术网

在linux机器上使用PHP上载文件

在linux机器上使用PHP上载文件,php,linux,raspbian,user-permissions,Php,Linux,Raspbian,User Permissions,我正试图在一台无头raspbian机器上开发某种云应用程序。 测试在windows8.1上运行的wamp服务器上进行。PHP版本是5.6 该代码在我的测试窗口上运行良好,但在linux服务器上运行相同代码时遇到问题。我已经将问题缩小到(背后的linux用户)我的PHP代码对应该存储文件的文件夹没有写权限这一事实 我可以想出两种方法来解决这个问题:要么授予该php用户权限,要么更改php代码背后的用户。如果可以更改每个脚本,那么最后一个脚本将非常有趣 因此,对于我的具体问题: 1) 在哪里可以找到

我正试图在一台无头raspbian机器上开发某种云应用程序。 测试在windows8.1上运行的wamp服务器上进行。PHP版本是5.6

该代码在我的测试窗口上运行良好,但在linux服务器上运行相同代码时遇到问题。我已经将问题缩小到(背后的linux用户)我的PHP代码对应该存储文件的文件夹没有写权限这一事实

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

因此,对于我的具体问题:

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

2) 我是否可以更改PHP代码使用的用户,最好是基于每个项目

编辑:

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

编辑2:

使用
var_dump(posix_geteuid())时而不是
获取当前用户(),我得到UID 33,它匹配用户www数据

解决方案:


通过使用查看EUID,我能够验证实际用户,这与
get_current_user()不匹配。使用
sudo chown-R www-data:www-data
更改directroy和其中的所有文件时,我成功地设置了正确的权限。

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

编辑


出于安全目的,我更改了权限设置。

您是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 {} \;
文件权限也可能是一个问题。如果是这样,运行类似这样的程序

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 {} \;

你知道你在运行什么web服务器吗?如果是这样,您可以看到谁在运行它。例如,我运行了
ps aux | grep httpd
,它显示用户“apache”正在运行httpd。所以,我必须给apache读/写文件夹的权限。1)你可以试试2)好吧,nolike Sebastian说你可以让用户
echo获得当前用户()
以显示当前用户。您在初始tmp文件夹或目标文件夹中是否存在权限问题?要进行更改,您可以执行
chown user | chmod 755/var/www/html/myuploaddir
此外,您可能对owncloud项目感兴趣,该项目是一个开源的lamp cloud项目777是一个糟糕的建议,通常会使服务器面临安全漏洞。@Goose,有时,0755也可以工作。文件上的可执行位通常会导致安全问题。644个文件和755个文件夹更为标准。664和775有时是必要的。我要补充的是,777从来都不是必要的。此外,考虑到他正在上传文件,使用安全的文件权限更为重要@它解决了我的问题。他提到“如果有必要”,这对大多数人来说可能是一个足够的警告,而且很可能有一些使用案例。遗憾的是,您只能将一个答案标记为解决方案,因为您的答案也是有效的。看起来也是有效的解决方案。然而,我把它改成了www-data:www-data并加入了这个小组。考虑到我使用的帐户是一个与root(几乎)相同级别的完整管理员帐户,这是一种更好还是更糟糕的修复方法+1对于像这样使用find commando,我建议不要将自己添加到www数据中,通常最好将人类系统用户与Web服务器系统用户分开。最有可能不会有什么关系,但是假设你被黑客攻击了,最好知道他们是攻击了Web服务器还是只是攻击了你的ssh。是的,我个人更喜欢查找而不是递归标志。