У нас есть сервер под управлением 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;