当前位置:  开发笔记 > 编程语言 > 正文

如何在PHP中执行shell脚本?

如何解决《如何在PHP中执行shell脚本?》经验,为你挑选了3个好方法。

我在/var/www/myscript.sh中有一个脚本,它创建文件夹并运行svn update我的项目命令.我需要通过在浏览器中的PHP文件中调用它来执行此脚本(即Localhost/test.php).我尝试使用函数shell_exec(),exec()但那些不起作用.我在终端运行我的shell脚本su www-data && ./myscript.sh,它工作正常.我还缺少什么?



2011年5月4日更新:

我添加www-data ALL=(ALL) NOPASSWD:ALL到/ etc/sudoers并且它可以工作,但这是非常不安全的.还有另一种方法吗?



1> Residuum..:

几种可能性:

您已启用安全模式.这样,只有exec()工作,然后只有可执行文件safe_mode_exec_dir

execshell_exec在php.ini中被禁用

可执行文件的路径是错误的.如果脚本与php文件在同一目录中,请尝试exec(dirname(__FILE__) . '/myscript.sh');



2> Gabriel Poam..:

您可能已禁用exec权限,大多数LAMP包都禁用了这些权限.检查你的php.ini这行:

disable_functions = exec

并删除exec,shell_exec条目(如果有).

祝好运!


对于OP来说,检查他们试图执行的目录中的`rwx`权限也是明智之举.

3> Pharaoh Tool..:

Residuum确实为你应该如何让shell exec找到你的脚本提供了正确的答案,但是在安全方面,有几点.

我想你不希望你的shell脚本在你的web根目录中,因为任何有web访问你服务器的人都可以看到它.

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

    

关于:

我添加了www-data ALL =(ALL)NOPASSWD:ALL到/ etc/sudoers的工作原理

您可以将其修改为仅涵盖脚本中需要sudo的特定命令.否则,如果sh脚本中的所有命令都不需要执行sudo,则无论如何都不需要执行此操作.

尝试以apache用户身份运行脚本(使用su命令切换到apache用户),如果没有提示你输入sudo或者给予权限拒绝等,那就没关系了.

即:

sudo su apache (or www-data)
cd /var/www
sh ./myscript

另外......带给我的是我想使用动态生成的命令运行多行shell脚本.我希望我的所有命令都在同一个shell中运行,使用多次调用shell_exec()时不会发生这种情况.这个问题的答案是像Jenkins一样 - 创建动态生成的多行命令,将其放入变量中,将其保存到临时文件夹中的文件中,执行该文件(使用shell中的shell_exec,因为Jenkins是Java),然后对输出执行任何操作,并删除临时文件

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有