我最近在我的Linux机器上设置了我的Apache2服务器。现在我想要执行一个PHP脚本(index.php),它运行一个shell脚本(foo.sh),它在我的主目录中创建一个文件夹,但是没有创建该目录。
这是原始的两个文件:
foo.sh:
#!bin/bash
mkdir /home/lorenzo/testDir
的index.php:
<?php
exec('sh test.sh');
?>
所以,我认为问题可能是因为特权或某事而发生的,事实上我将文件更改为:
foo.sh:
#!bin/bash
echo "Hello world"
的index.php:
<?php
$temp=exec('sh test.sh');
echo $temp;
?>
我在网站上看到了输出Hello World
。
因此执行PHP脚本并运行shell脚本。但是为什么shell脚本不能执行mkdir命令?
答案 0 :(得分:1)
这确实很可能是一个许可问题。
首先必须确定运行哪个用户apache。这通常是www-data
(在Debian-ish Linux上,例如Ubuntu)或apache
(在RedHat-ish Linuxes上)或类似的东西。 ps -eF | grep apache
将显示用户。
确定后,请确保apache用户在您的主目录中具有相应的权限。您可以将其添加到您的用户组(使用usermod -a -G ...
然后chmod g+w ~
)或允许为所有用户(chmod o+w ~
)撰写。
但,这两个都是糟糕的主意。你的php脚本(或者作为apache用户运行的任何其他东西)可以被破解和破解,让你的主目录开放供恶意攻击者修改和rm -rf
。
此外,如果你正在运行一个RedHat-ish Linux,你将运行到SELinux,它通过defaut阻止apache访问用户目录。在这种情况下,您还必须设置setsebool -P httpd_enable_homedirs on
。
相反,我建议您使用其他目录,并为您的用户提供完全访问权限。像/var/www/testDir
那样将apache作为所有者和组,并将自己添加到apache用户组可能是一个理智的想法。
答案 1 :(得分:0)
看起来像是一个权限问题。确保Apache具有该目录的写权限
答案 2 :(得分:-1)
您可能在服务器上遇到权限问题。尝试在ssh命令行中使用chmod -R 775 <dirname>(or 777)
。您也可以使用chmod()
在PHP代码中执行此操作,但我不建议您,因为它会在每次运行php代码时运行它并且更改它的次数是没有意义的。它可以输出到屏幕但我打赌脚本想要使文件具有权限的目录755.尝试检查它。