我们有一个运行 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 中的 shell 脚本来执行解压缩功能。所以基本上,它需要 2 个参数(存档文件和文件目标)。
- 当我用简单的用户在命令行中调用它时,它工作正常。
- 当我用 PHP 脚本调用它时,它没有运行(错误代码 127)
Shell 脚本具有以下权限:-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;