2012-06-26 6 views
1

У нас есть сервер под управлением PHP 4.3.9 с safe_mode ON и safe_mode_exec_dir выставиться в/USR/местные/бен/PHP/Невозможно выполнить скрипт в ехес директории

Так, как написано на php.net, мы не может выполнить какой-либо скрипт, который не находится в safe_mode_exec_dir.

Я хочу вызвать команду unzip system (не иметь zip-библиотеки), которая находится внутри/usr/bin. Поэтому я не могу вызвать скрипт PHP.

Я создал сценарий оболочки, который помещается в/usr/local/bin/php для выполнения функции unzip. Итак, в основном, он принимает 2 аргумента (файл архива и файл).

  • Когда я вызываю его в командной строке с простым пользователем, он отлично работает.
  • Когда я называю это с PHP скрипт, он не работает (код ошибки 127)

Shell скрипт с разрешения следующего: -rwxr-хт-х Так может быть запущено от апача пользователей.

Я не могу понять, почему он не работает.

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; 

ответ

0

После проверки апачский журнал ошибок, я видел следующее сообщение:

ш:/USR/местные/bin/php/sh: Нет такого файла или каталога

Итак, это не ясно, но команда exec уже вызывает команду оболочки. Моя команда начинается с sh. Поэтому PHP выполнить следующую команду:

ш ш /usr/local/bin/php/myscript.sh '/ мой/назначения/путь' '/my/path/to/archive/file.zip'

ш файл не существует в/USR/местные/бен/PHP/

Чтобы исправить это, я Жюст удален «ш» из ехес команды и он отлично работает!