首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell_exec不使用.sh脚本

问shell_exec不使用.sh脚本
EN

Stack Overflow用户
提问于 2013-12-11 16:14:50
回答 5查看 5.4K关注 0票数 2

我在Ubuntu的apache服务器上托管了一个php文件。除了shell_exec('myscript.sh')之外,一切都很好。

如果我执行任何类似shell_exec('dir')、shell_exec('ls')等的操作,它都可以正常工作。但是,只有当我通过shell_exec执行一个简单的shell脚本时,它才不能工作。

为了简单起见,我只在shell脚本中放置了一个echo命令。当我通过终端执行时,相同的脚本可以工作。比如:

代码语言:javascript
复制
# sh myscript.sh // works perfectly fine

但不是来自PHP,下面是我的php代码

代码语言:javascript
复制
<?php     
$result = shell_exec('myscript.sh');    
echo $result;     
?>

备注:

  • 安全模式关闭
  • shell_exec不在disable_functions列表中
  • php和.sh文件都位于同一个文件夹中。

谢谢

EN

回答 5

Stack Overflow用户

发布于 2013-12-11 16:35:42

尝试授予PHP对文件的所有权。

chown phpusername:phpusername myscript.sh或相同的apache用户。

如果这不起作用,请尝试chmod 777 myscript.sh,但这通常是一个非常糟糕的想法。

票数 2
EN

Stack Overflow用户

发布于 2013-12-11 16:39:50

我觉得应该是

代码语言:javascript
复制
$result = shell_exec('./myscript.sh');  
票数 0
EN

Stack Overflow用户

发布于 2013-12-11 16:43:25

这是因为您需要将命令转义为bash参数。为此,需要在命令中使用双引号,最后,将2>&1与所需的脚本函数命令一起用作结束部分。

即

代码语言:javascript
复制
   $xarg = escapeshellarg("./myscript.sh 2>&1");
   $result = shell_exec("$xarg");

记住,php和bash之间的交互是独一无二的。PHP总是挂掉等待bash的命令。即使触发了该脚本,您的php也应该希望在调用函数之后,无需等待bash就可以继续到脚本中的下一行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20524297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档