[英]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.ext
( abc
實際上是apache2的www-data
用戶)。 abc
用戶(我的意思是www-data用戶)都不屬於可以訪問該文件的組,該文件也不允許other users
讀取該文件。 因此,PHP腳本無法產生正確的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.