簡體   English   中英

為什么此Shell腳本無法按預期從PHP運行?

[英]Why is this shell script not running as expected from PHP?

我在/ var / www文件夾中有此PHP程序,可以運行外殼程序腳本並加載該外殼程序腳本創建的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

(編輯^“ 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

即使它不會工作。

對於命令cat file.ext | awk <something with $foo and $bar> | command > /var/tmp/reports/r.html cat file.ext | awk <something with $foo and $bar> | command > /var/tmp/reports/r.html cat file.ext | awk <something with $foo and $bar> | command > /var/tmp/reports/r.html ,當我直接從script.sh執行它時,它以ubuntu用戶身份進入file.ext ubuntu用戶被授權訪問file.ext ,因為它屬於可以讀取它的組。 但是當我通過瀏覽器執行命令形式php.php腳本時,它以abc用戶身份訪問了file.extabc實際上是apache2的www-data用戶)。 abc用戶(我的意思是www-data用戶)都不屬於可以訪問該文件的組,該文件也不允許other users讀取該文件。 因此,PHP腳本無法產生正確的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM