【发布时间】: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正在执行,但脚本内的命令字符串出现故障,因此> ...正在创建文件,但填充它的执行失败。 -
"file.ext" 实际上是一个 .log 文件。它位于 /var/log/.. 而“command”是另一个从该日志文件创建 .html 文件的程序
-
请通过将其添加到您的问题陈述中来展示您尝试过的内容。我不清楚您更新的代码是什么样的。另外,不知道PHP中的PATH是什么,也许它也找不到
awk?很难说不知道 PATH 是什么。也可以尝试一个测试用例,方法是暂时从脚本中删除awk,然后将cat文件添加到输出中,看看是否可行。换句话说,通过消除过程分解问题,以便确定问题所在。
标签: php linux bash shell shell-exec