2012-06-04 4 views
0

Когда я пытаюсь запустить сценарий оболочки с exec и shell_exe, ничего не происходит! Когда я бегу с этими командами ls или whoami все работы.Не удается запустить скрипт оболочки в PHP

Что это может быть?

+3

Пожалуйста, добавьте пример того, как вы пытаетесь запустить его. –

+0

Вы пробовали полностью квалифицированный PATH (EX: «/ usr/local/myscript»)? – paulsm4

+0

http: // whathaveyoutried.com/ –

ответ

1

Вы эхо выходе?

echo exec('ls'); 

У вас есть safe_mode включен?

phpinfo(); 

Когда да: (из инструкции)

Примечание: Когда безопасный режим включен, вы можете выполнять только файлы в safe_mode_exec_dir. По практическим соображениям в настоящее время не разрешено использовать .. на пути к исполняемому файлу.

Попытка вызвать Exec с

exec('...pathtoyourbashscript...', $out, $return); 

Тогда

echo $return; 

Если он показывает 127 подмигнули вероятно, что путь неправильно.

Также проверьте разрешения. Пользователь «nobody», вероятно, является пользователем Apache, которому необходимы права доступа и выполнения сценария.

Вы можете изменить права доступа, запустив

chmod 755 pathtouyourscript

Это означает что-то вроде: "Я не возражаю, если другие люди читают или запустить этот файл, но только я должен быть в состоянии изменить его.

+0

'echo exec ('ls');' работает хорошо. Я проверил с 'phpinfo()', и его показывает, что ** безопасный режим выключен **. В Configure Command я увидел ** '- enable-safe-mode' ** – Oleg

+0

, чем кажется, что путь неправильный. см. мои правки выше. –

+0

Его возврат ** 1 **. если это помогает, когда я проверяю, кто является пользователем (whoami), он показывает ** никому **. – Oleg

0

Если вы используете Apache, убедитесь, что у пользователя Apache есть необходимые разрешения для выполнения php-файла.

+0

Dale Smith, Как я могу проверить его? у меня есть все разрешения, которые я думаю ... – Oleg

0

Вы можете использовать отражение, чтобы выяснить, была ли функция отключена с помощью disable_functions.

+0

Я использовал 'ReflectionFunction' ... это показывает ** Включено ** – Oleg

0

Если программа основанная на веб-интерфейсе для Linux, попробуйте сделать php-файл для обработки оболочки. и файл оболочки для обработки PHP ..

Например: runAllShell.php файл может содержать цикл .:

<?php 
// Developed by A T. 
// Count the files 
$directory = '/put/directory/path_here/'; 
$files = glob($directory . '*.*'); 

if ($files !== false) 
{ 
    $filecounter = count($files); 

} 
else 
{ 
    echo "No Files were found"; 
} 
$fileCount = $filecounter; 

// Start the index 
$fileNumber = 1; 
while($fileNumber <= fileCount){ 
shell_exec('$fileNumber . ".sh"'); 
// get some feedback 
echo "The ".$fileNumber." file has been excecuted"; 
// increment file number 
$fileNumber++; 

} 
?> 

убедитесь, что все .sh файлы в директории numericaly заказана для это для работы, то есть: 1.sh 2.sh 3.sh и так далее.

С уважением, AT.

Смежные вопросы