[英]“exec('sh foo.sh')” in PHP not working
我最近在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命令?
这确实很可能是权限问题。
您首先必须确定运行哪个用户apache。 这通常是www-data
(在Debian-ish Linux,例如Ubuntu)上或apache
(在RedHat-ish Linuxes上)或类似的东西。 ps -eF | grep apache
ps -eF | grep apache
将向用户展示。
在弄清楚之后,请确保apache用户在您的主目录中具有适当的权限。 您可以将其添加到用户组(使用usermod -a -G ...
然后使用chmod g+w ~
),也可以允许所有用户写入( chmod o+w ~
)。
但是 ,这都是一个坏主意。 您的php脚本(或以apache用户身份运行的任何其他脚本)可以被破解,从而使您的主目录打开,恶意攻击者可以对其进行修改和rm -rf
。
另外,如果您运行的是RedHat-ish Linux, 则将运行SELinux,默认情况下,这将阻止apache访问用户目录。 在这种情况下,还必须在上设置setsebool -P httpd_enable_homedirs on
。
相反 ,我建议您使用其他目录,并为您的用户提供对该目录的完全访问权限。 在/var/www/testDir
,以apache作为所有者和组,并将您自己添加到apache用户组可能是一个明智的想法。
它看起来像是权限问题。 确保Apache具有对该目录的写权限
您可能在服务器上有权限问题。 尝试在ssh命令行中使用chmod -R 775 <dirname>(or 777)
。 您也可以使用chmod()
在php代码中执行此操作,但我不建议您这样做,因为它会在每次php代码运行时都运行它,并且更改它多次都没有意义。 它可以输出到屏幕,但是我敢打赌,脚本要使文件具有目录755的权限。请尝试对其进行检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.