无法在exec目录中执行shell脚本

时间:2012-06-26 10:10:14

标签: shell php4 safe-mode

我们有一台运行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;

1 个答案:

答案 0 :(得分:0)

检查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'

/ usr / local / bin / php /

中不存在sh文件

为了解决这个问题,我已经从exec命令中删除了“sh”,它运行正常!