【问题标题】:Unable to execute bash script and programs through apache2 using php?无法使用 php 通过 apache2 执行 bash 脚本和程序?
【发布时间】:2016-02-10 18:24:44
【问题描述】:

如图所示,我有两台 PC 相互连接

PC1PC2

PC2 运行着 apache2,有两个可执行的 python 程序文件,分别是 python1.py 和 python2.py

我想要创建一个 php 脚本,它会生成一个带有两个按钮 button1 和 button2 的简单网页。当 button1 被点击时,python1.py 应该在 PC2 上执行,如果 button2 被点击而不是 python2.py 所以他们在 PC2 上显示数据并且不向 PC1 发送输出。

我开始创建以下基本脚本,该脚本成功运行“ls”等命令,并成功运行这些命令并在 PC1 上显示结果作为测试,

我有以下问题:

1)如何在PC2上运行命令并在自己的终端上显示数据? 2)我无法执行像'firefox'这样的单个命令,因为它没有给出任何错误但也没有启动firefox..因此我如何执行python文件?

<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>

上面的工作,但是当我把它修改成下面的 id 不起作用:

<?php
shell_exec('firefox');
?>

<?php
shell_exec('/var/www/html/test.sh');
?>

其中 ./test.sh 是可执行的并且具有:

#!/bin/bash
firefox

如果我单独在 bash 脚本之上运行,它会启动 firefox。我希望通过按网页上的按钮远程完成此操作。

我试过这段代码:

<?php
echo exec('/usr/bin/firefox');

?>

它给出了:

root@astitva-Vostro-3446:/var/www/html# ./page1.php 
./page1.php: line 2: ?php: No such file or directory
./page1.php: line 3: syntax error near unexpected token `('
./page1.php: line 3: `echo exec('/usr/bin/firefox');'

因为 firefox 是 GUI,所以尝试了以下操作:

<?php
echo exec('/var/www/html/test.sh');

?>

它给出了:

root@astitva-Vostro-3446:/var/www/html# ./page1.php 
./page1.php: line 2: ?php: No such file or directory
./page1.php: line 3: syntax error near unexpected token `('
./page1.php: line 3: `echo exec('/var/www/html/test.sh');'

【问题讨论】:

  • 尝试包含firefox的路径,例如/etc//firefox
  • 带有 GUI 的程序可能无法执行,因为运行 apache 的用户通常没有图形桌面。
  • 要在 PC2 上运行命令并在其自己的终端上显示数据,您可以在 python 中创建一个套接字。我不明白你为什么要通过 php 命令启动 firefox。
  • 这篇文章可以帮助你 - cyberciti.biz/faq/howto-run-firefox-from-the-command-line,正如@maxhb 提到的,你必须在当前登录的 gui 用户下编写相同的 Firefox 午餐命令

标签: php python bash apache


【解决方案1】:

您没有将page1.php 作为 PHP 脚本执行。如果没有 shebang 行(例如 #!/usr/bin/env bash),则无法正确解释脚本。您收到的这些错误之所以出现,是因为 bash 试图解释您的文件,而不是 PHP。你有两个选择:

  1. 在脚本的开头添加一个 shebang 行:#!/usr/bin/env php
  2. 使用 PHP cli 执行文件:php ./page1.php

如果你还打算通过 apache、nginx 等使用脚本,我建议 #2。否则 #1 更有意义。

【讨论】:

  • 感谢您的回复....我将代码更改为:#!/usr/bin/env php 但它仍然没有做任何事情,相反,当通过网页上的 PC1 访问时,它会在网页上显示 #!/usr/bin/env php。
猜你喜欢
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 2020-08-18
  • 2016-02-18
  • 1970-01-01
  • 2016-09-26
  • 2018-03-29
  • 2018-09-15
相关资源
最近更新 更多