【问题标题】:How do I execute a shell script from php/html?如何从 php/html 执行 shell 脚本?
【发布时间】:2016-05-03 22:48:43
【问题描述】:

如何从 PHP 或 HTML 执行 shell 脚本文件。 sh文件位于localhost目录之外,还有很多其他sh文件都是由第一个sh文件发起的。

说本地主机目录是 /opt/lampp/htdocs/xampp/test sh 文件的位置是/home/user/scripts/run.sh

run.sh 将从/opt/lampp/htdocs/xampp/test/upload 上传的一些文件复制到/home/user/scripts/file 并执行其他一些.sh 文件。

我尝试了很多 PHP 方法都没有成功 喜欢

<?php $output = shell_exec('sh /home/user/script/run.sh'); echo "$output"; ?>

<?php
shell_exec("/home/user/server/run.sh");
?>

但没有运气。 我无法将 sh 文件放在 CGI 目录中,因为它依赖于其他脚本和文件。如何从它当前显示的目录运行脚本。

【问题讨论】:

  • 您是否尝试过在执行 shell 脚本之前更改 php 中的工作目录,方法是使用 chdir("/home/user/scripts/") 或 shell_exec('cd /home/user/script/ sh /home/user/script/run.sh')?
  • 不工作它没有执行任何事情。

标签: php html linux bash shell


【解决方案1】:

很可能是您没有设置任何环境变量作为从 php.ini 执行脚本的用户。可能是用户名组 apache:apache。您应该为 PATH 设置一些环境变量,以便它知道可执行文件的位置。您也可以将sh 指向/usr/bin/sh

&lt;?php $output = shell_exec('/usr/bin/sh /home/user/script/run.sh'); echo "$output"; ?&gt;

或登录服务器和echo $PATH。然后将其复制粘贴到putenv 函数中:

putenv('PATH={your_paths}');
$output = shell_exec('sh /home/user/script/run.sh'); echo "$output";

【讨论】:

  • 我将变量设置为 putenv,但它只执行 run.sh 中的 echo 命令,但 run.sh 具有运行其他 bash 脚本的链接(使用 ./ 而不是 sh as sh won' t 适用于该文件)但未执行
  • 太好了,你现在可以执行它了。现在是关于找出你在 bash 脚本中的相对路径:unix.stackexchange.com/questions/17717/…,你可能正在处理你在 bash 和 apache 中调用的脚本的相对路径,调用 run.sh 脚本,不知道它们在哪里。我想我的回答回答了你的问题,你现在有了一个正在执行的脚本。
最近更新 更多