【问题标题】:Why is this shell script not running as expected from PHP?为什么这个 shell 脚本没有按照 PHP 的预期运行?
【发布时间】:2015-04-14 10:54:45
【问题描述】:

我在 /var/www 文件夹中有这个 PHP 程序来运行 shell 脚本并加载由该 shell 脚本创建的 HTML 文件。如果我从命令行手动运行 shell 脚本,那么它就像魅力一样工作,但是当从浏览器通过 PHP 程序运行时,它只会创建一个空文件。

PHP 代码

$a = './script.sh '.$foo.' '.$bar;
$b = shell_exec($a);
include '/var/tmp/reports/r.html';

外壳脚本

cat file.ext | awk <something with $foo and $bar> | command > /var/tmp/reports/r.html

(Edit ^ "file.ext" 实际上是一个 .log 文件。它位于 /var/log/.. 而 "command" 是另一个从该日志文件创建 .html 文件的程序)

我的文件的权限是:

-rw-r--r-- 1 abc    www-data   848 Feb 13 10:43 php.php
-rwxr-xr-x 1 ubuntu www-data   230 Feb 13 10:51 script.sh*

并且 /var/tmp/reports/r.html 在 PHP 执行之前不存在。 通过命令行直接执行脚本后,它会创建 r.html 文件,如:

-rw-rw-r-- 1 ubuntu ubuntu 121884 Feb 13 11:42 r.html

但是当从浏览器通过 PHP 执行脚本时,它会创建一个像这样的空文件

-rw-r--r-- 1 www-data www-data      0 Feb 13 11:43 r.html

Edit1:在@lurker 的建议中,我尝试将 script.sh 更改为

#!/bin/sh

cat file.log | awk '{if(substr($5,2)>="'$1'" && substr($5,2)<="'$2'")print $0}' | awk 'gsub(",", "", $1);' | /usr/bin/command > /var/tmp/reports/r.html

它也只生成了一个空文件。

Edit2 :我将脚本更改为 ->

#!/bin/bash
sudo echo "sdfsf" > /var/tmp/reports/r.html

即使它不会工作。

【问题讨论】:

  • shell_exec($output) ...$output 是什么?不应该是shell_exec($a)吗?
  • @lurker 哎呀!我更正了!
  • file.ext 在哪里? command 是否在 PHP 运行的 PATH 中定义?看起来./script.sh 正在执行,但脚本内的命令字符串出现故障,因此&gt; ... 正在创建文件,但填充它的执行失败。
  • "file.ext" 实际上是一个 .log 文件。它位于 /var/log/.. 而“command”是另一个从该日志文件创建 .html 文件的程序
  • 请通过将其添加到您的问题陈述中来展示您尝试过的内容。我不清楚您更新的代码是什么样的。另外,不知道PHP中的PATH是什么,也许它也找不到awk?很难说不知道 PATH 是什么。也可以尝试一个测试用例,方法是暂时从脚本中删除awk,然后将cat 文件添加到输出中,看看是否可行。换句话说,通过消除过程分解问题,以便确定问题所在。

标签: php linux bash shell shell-exec


【解决方案1】:

对于命令cat file.ext | awk &lt;something with $foo and $bar&gt; | command &gt; /var/tmp/reports/r.html,当我直接从script.sh 执行它时,它以ubuntuuser 的身份接近file.extubuntu 用户被授权访问file.ext,因为它属于可以读取它的组。但是当我通过浏览器执行命令表单php.php 脚​​本时,它以abc 用户的身份访问file.extabc 实际上是www-data apache2 的用户)。 abc 用户(我的意思是 www-data 用户)都不属于可以访问该文件的组,该文件也不允许 other users 读取它。因此 php 脚本无法产生正确的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多