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スクリプトで呼び出すことはできません。
/ usr / local / bin/phpに配置してunzip関数を実行するシェルスクリプトを作成しました。したがって、基本的には2つの引数(アーカイブファイルとファイルの宛先)を取ります。
- 単純なユーザーでコマンドラインで呼び出すと、正常に動作します。
- PHPスクリプトで呼び出すと、実行されません(エラーコード127)
シェルスクリプトは次の権限を持っています:-rwxr-xr-xしたがって、apacheユーザーが実行できます。
なぜ動かないのか理解できません。
シェルスクリプト:
#!/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;