[英]Unable to execute shell script in exec dir
我們有一台運行PHP 4.3.9的服務器,其中safe_mode ON和safe_mode_exec_dir設置為/ usr / local / bin / php /
因此,正如它寫在php.net上一樣 ,我們無法執行任何不在safe_mode_exec_dir中的腳本。
我想調用/ usr / bin中的unzip系統命令(沒有zip庫)。 因此,我無法通過PHP腳本進行調用。
我創建了一個shell腳本,該腳本放在/ usr / local / bin / php中以執行解壓縮功能。 因此,基本上,它需要2個參數(歸檔文件和文件目標)。
Shell腳本具有以下許可權:-rwxr-xr-x因此,它可以由apache用戶運行。
我不明白為什么它不運行。
Shell腳本:
#!/bin/bash
DIR=$1
FILE=$2
# Write to file to check if shell script is running
echo "BANANA" > /my/path/to/app/banana-log.txt
# If file exists, run unzip
if [ -a $FILE ];
then
/usr/bin/unzip -u $FILE -d $DIR >> /my/path/to/app/banana-log.txt
else
echo "FILE_NOT_FOUND $1" >> /my/path/to/app/banana-log.txt;
fi
PHP腳本:
$output = array();
$return_value = -1;
//-- Get safe_mode_exec_dir value
$shell_script = ini_get('safe_mode_exec_dir') . "/myscript.sh";
$shell_cmd = sprintf("sh %s %s %s", $shell_script, escapeshellarg('/my/destination/path'), escapeshellarg('my/path/to/archive/file.zip'));
//-- Execute command
echo "COMMAND IS : ", $shell_cmd;
$output = exec($shell_cmd, $output, $return_value);
echo "RESPONSE IS : ", implode("<br />",$output);
echo "RETURN CODE IS : ",$return_value;
檢查apache錯誤日志后,我看到以下消息:
sh:/ usr / local / bin / php / sh:沒有這樣的文件或目錄
因此,目前尚不清楚,但是exec已經調用了shell命令。 我的命令以sh開頭。 因此,php執行以下命令:
sh sh /usr/local/bin/php/myscript.sh'/ my / destination / path''/my/path/to/archive/file.zip'
sh文件在/ usr / local / bin / php /下不存在
為了解決這個問題,我剛剛從exec命令中刪除了“ sh”,它可以正常工作!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.