PHP中的“exec('sh foo.sh')”无效

时间:2014-10-02 10:55:33

标签: php linux apache bash shell

我最近在我的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命令?

3 个答案:

答案 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.尝试检查它。