PHP shell_exec не работает

Я пытаюсь запустить сценарий оболочки на своем MacOSX, но он не работает. Мой файл report.sh вызывает другой файл .sh (Sweave.sh), который хранится в /usr/local/bin.

<?php

shell_exec("./report.sh");
echo "Hello 123";

?>

В моем браузере печатается «Hello 123», но report.sh не выполняет свою работу. Почему это происходит? Вот отчет.ш:

# !/bin/bash
Sweave.sh -ld test_sweave.Rnw

Если вызвать ./report.sh из терминала, все работает нормально... спасибо за любую помощь!

РЕДАКТИРОВАТЬ: Если я позвоню ./report.php из терминала, он говорит:

./report.php: line 2: ?php: No such file or directory
./report.php: line 4: syntax error near unexpected token `"./report.sh"'
./report.php: line 4: `shell_exec("./report.sh");'

person Fernando    schedule 02.09.2012    source источник
comment
Используйте абсолютные пути для всего, затем попробуйте.   -  person Matthew Scragg    schedule 02.09.2012
comment
Я уже сделал, все равно ничего не происходит, и безопасный режим выключен.   -  person Fernando    schedule 02.09.2012
comment
вы используете апач? если да, имеет ли пользователь apache достаточные права для выполнения вашего файла?   -  person Andreas Grapentin    schedule 02.09.2012
comment
Включите error_report и проверьте ошибку.   -  person xdazz    schedule 02.09.2012
comment
@Andres - Да, я использую apache. Несколько дней назад мой php-скрипт смог запустить exec(file.sh), но теперь он не работает... как мне установить/увидеть эти конфигурации? Спасибо!   -  person Fernando    schedule 02.09.2012


Ответы (3)


Если вы хотите запустить свой скрипт через командную строку, вам необходимо:

а) запустите файл с этой строки

#!/path/to/php

б) запустить как:

php report.php

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

person Ja͢ck    schedule 02.09.2012
comment
Почти готово. Он работает на терминале, благодаря вашей подсказке. Но если я вызываю свою страницу из браузера, все равно не работает. - person Fernando; 02.09.2012
comment
@Fernando Фернандо, я бы поставил свои деньги на разрешения ... вы также можете добавить ` 2›&1` за скриптом, который вы пытаетесь выполнить, чтобы получить более подробную информацию об ошибке. - person Ja͢ck; 02.09.2012
comment
Где мне поставить ` 2›&1` ? Спасибо! - person Fernando; 02.09.2012
comment
@Фернандо shell_exec("./report.sh 2>&1"); - person Ja͢ck; 02.09.2012

Спасибо всем за комментарии, это была проблема разрешения. Я решил это, изменив разрешения для папки «Документы» моего сервера (уверен, что это не самый безопасный способ, но я все равно просто тестирую).

Просто добавьте доступ rw, станьте владельцем и применяйте к вложенным элементам - вот и все!

person Fernando    schedule 02.09.2012

php -q report.php будет работать без Шебанга (#!/path/to/php)

person Ilja    schedule 19.07.2013