首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP中执行shell脚本?

如何在PHP中执行shell脚本?
EN

Stack Overflow用户
提问于 2011-05-04 19:30:10
回答 3查看 137.1K关注 0票数 24

我在/var/www/myscript.sh中有一个脚本,它为我的项目创建文件夹并运行命令svn update。我需要在浏览器的PHP文件(即Localhost/test.php)中调用这个脚本来执行它。我尝试使用函数shell_exec()exec(),但它们都不起作用。我用su www-data && ./myscript.sh在终端上运行我的shell脚本,它工作了。我还漏掉了什么?

代码语言:javascript
复制
<?php
$output = shell_exec("./myscript.sh");
?>

2011年5月4日更新:

我将www-data ALL=(ALL) NOPASSWD:ALL添加到/etc/sudoers中,它可以工作,但这是非常不安全的。有没有其他方法可以做到这一点?

EN

回答 3

Stack Overflow用户

发布于 2011-05-04 19:34:37

您可能禁用了exec权限,大多数LAMP程序包都禁用了这些权限。检查您的php.ini中是否有以下行:

代码语言:javascript
复制
disable_functions = exec

如果有exec和shell_exec条目,请将其删除。

祝好运!

票数 8
EN

Stack Overflow用户

发布于 2013-03-29 21:25:04

对于如何让shell exec找到您的脚本,Residuum确实提供了正确的答案,但是关于安全性,有几点。

我想你不希望你的shell脚本在你的web根目录下,因为它对任何访问你的服务器的人都是可见的。

我建议将shell脚本移到webroot之外

代码语言:javascript
复制
    <?php
      $tempFolder = '/tmp';
      $webRootFolder = '/var/www';
      $scriptName = 'myscript.sh';
      $moveCommand = "mv $webRootFolder/$scriptName $tempFolder/$scriptName";
      $output = shell_exec($moveCommand);
    ?>

关于以下内容:

我添加了www-data ALL=(ALL) NOPASSWD:ALL to /etc/sudoers works

您可以对此进行修改,使其仅涵盖脚本中需要sudo的特定命令。否则,如果sh脚本中的命令都不需要sudo来执行,则根本不需要执行此操作。

尝试以apache用户身份运行该脚本(使用su命令切换到apache用户),如果没有提示您输入sudo或授予权限被拒绝等,就可以了。

即:

代码语言:javascript
复制
sudo su apache (or www-data)
cd /var/www
sh ./myscript

还有..。让我来到这里的原因是,我想使用动态生成的命令运行一个多行shell脚本。我希望我的所有命令都在同一个shell中运行,这不会在多次调用shell_exec()时发生。答案是像Jenkins那样创建动态生成多行命令,将其放在一个变量中,将其保存到temp文件夹中的一个文件中,执行该文件(在() php中使用shell_exec,因为Jenkins是Java),然后对输出做任何您想做的事情,并删除临时文件

..。瞧!

票数 6
EN

Stack Overflow用户

发布于 2017-07-10 22:38:22

如果您有一个需要运行的小脚本(我只需要复制一个文件),我发现在PHP脚本上调用命令要容易得多,方法是调用

代码语言:javascript
复制
exec("sudo cp /tmp/testfile1 /var/www/html/testfile2");

并且通过编辑(或者更确切地说是添加)到sudoer的允许行来启用这样的事务,方法是首先调用sudo visudo并将以下行添加到它的最后

代码语言:javascript
复制
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/testfile1 /var/www/html/testfile2

我想要做的就是复制一个文件,但是由于root密码问题,我一直有这样做的问题,正如您所提到的,我不想让系统对所有root事务都没有密码。

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

https://stackoverflow.com/questions/5882650

复制
相关文章

相似问题

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