我最近在我的Linux机器上安装了我的Apache2服务器。现在我想要执行一个PHP (index.php),它运行一个shell脚本(foo.sh),它在我的主目录中创建一个文件夹,但是目录没有创建。
这些是原始的两个文件:
foo.sh:
#!bin/bash
mkdir /home/lorenzo/testDirindex.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命令呢?
发布于 2014-10-02 11:06:01
事实上,这很可能是一个许可问题。
首先,您必须弄清楚apache运行的是哪个用户。这通常是www-data (在Debian上,如Ubuntu)或apache (在RedHat上)或类似的东西。ps -eF | grep apache将显示用户。
在您了解了这一点之后,请确保apache用户在您的主目录中拥有适当的权限。您可以将它添加到您的用户组中(使用usermod -a -G ...,然后使用chmod g+w ~),或者允许为所有用户编写(chmod o+w ~)。
但是,这两者都是个坏主意。您的php脚本(或任何其他以apache用户身份运行的脚本)可能会被破解,从而使您的主目录打开,供恶意攻击者修改和rm -rf使用。
此外,如果您运行的是RedHat,那么您将遇到SELinux,这完全阻止了apache访问用户目录。在这种情况下,还必须设置setsebool -P httpd_enable_homedirs on。
而不是,我建议您使用不同的目录,并让用户完全访问该目录。以apache作为所有者和组,并将自己添加到apache用户组中,这可能是一个明智的想法。
发布于 2014-10-02 10:58:40
看上去是个许可问题。确保Apache对该目录具有写权限。
发布于 2014-10-02 11:05:05
您可能在服务器上有权限问题。尝试在ssh命令行中使用chmod -R 775 <dirname>(or 777)。您也可以使用chmod()在php代码中这样做,但是我不建议您这样做,因为它每次运行它时都会运行它,并且修改它更多次是没有意义的。它可以输出到屏幕上,但我打赌脚本想要使文件具有权限755的目录。试着检查一下。
https://stackoverflow.com/questions/26159352
复制相似问题