Я бегу в .sh
скрипт PHP с exec
(попытался shell_exec
и passthru
тоже) и добавив команду с >/dev/null 2>&1 &
поэтому сценарий PHP освобождает браузер. Затем в сценарии оболочки я запускаю еще один php файл и записываю ответ этого файла php в переменную. Сценарий оболочки заканчивается вызовом index.php на сервере вместо поставляемого файла php.
Здесь моя команда php для запуска сценария оболочки:
exec(BASE.'/../shellfile.sh '.$arg1.' '.$arg2.' '.$arg3.' >/dev/null 2>&1 &');
И вот моя команда для запуска php файла из сценария оболочки:
VAR1=$(php -q $BASE/processingfile.php $FOLDER/temp.txt)
Боковые заметки:
BASE
определяется в PHP-скрипте, а $arg1
, $arg2
и $arg3
- это определенные переменные.
VAR1
, BASE
и FOLDER
определены в сценарии оболочки.
Я попытался запустить BASE.'/../shellfile.sh '.$arg1.' '.$arg2.' '.$arg3.' >/dev/null 2>&1 &'
BASE.'/../shellfile.sh '.$arg1.' '.$arg2.' '.$arg3.' >/dev/null 2>&1 &'
BASE.'/../shellfile.sh '.$arg1.' '.$arg2.' '.$arg3.' >/dev/null 2>&1 &'
от Putty с SSH, и он работает хорошо. Он включает правильный файл вместо index.php
если он запускается непосредственно из SSH.
Итак, это логика: PHP → Запустить файл оболочки и освободить браузер, Shell → Запустить файл PHP и захватить ответ.
Сценарий оболочки заканчивается вызовом index.php
на сервере вместо processingfile.php
. Кроме того, заголовки PHP, такие как X-Powered-By: PHP/5.X.XX
, возвращаются в сценарий оболочки из index.php
и сохраняются в переменной оболочки VAR1
.
Любые предложения о том, что я делаю неправильно?
Дополнительные замечания:
Первый файл PHP находится под общей папкой, тогда как сценарий оболочки и файл processingfile.php
расположены над общей папкой
У меня есть файл.htaccess в общей папке, но не выше
shellfile.sh
и processingfile.php
являются права измененными 777.
Возможно, вам придется перейти из каталога по умолчанию (например, каталог, где index.php), в каталог, где вы хотите запустить скрипт. Например, используйте команду, подобную этой, чтобы сообщить php, где искать скрипт.
exec("cd path/to/file && sh ./yourScript.sh);