簡體   English   中英

無法在exec目錄中執行Shell腳本

[英]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個參數(歸檔文件和文件目標)。

  • 當我以簡單的用戶在命令行中調用它時,它可以正常工作。
  • 當我使用PHP腳本調用它時,它無法運行(錯誤代碼127)

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.

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