Я много искал, чтобы решить проблему открытия внешней программы в phpdesktop без ожидания PHP, что в итоге привело к тайм-ауту PHP.
Мне нужно иметь возможность запустить программу с exec()
и оставшаяся часть кода PHP выполняется без ожидания на exec()
команда. Я пробовал несколько решений. Чтобы еще больше усложнить задачу, открываемый файл находится на сетевом диске. Вот что я пробовал, но не сработало
pclose(popen('start' .$File. '>NUL 2>NUL"', 'r')); This didn't work because the drive is on the network
exec($File); Doesn't work as it waits instead of executing the remainder of the code
system($File); Doesn't work. Same result as exec()
exec($File > /dev/null); Obviously doesnt work because php is on windows
Выполняемый файл — это видеофайл: mp4
, avi
или же mkv
, Таким образом, он открывает файл внешнего видеоплеера, но, как я уже сказал выше, PHP в конечном итоге истекает и выдает ошибку через 30 секунд без выполнения остальной части кода. Мне просто нужен PHP, чтобы игнорировать программу, которую он открыл, и продолжать выполнять свои задачи. Любая помощь будет принята с благодарностью.
Вы могли бы использовать что-то вродеNirCmd«которая является утилитой командной строки Windows для выполнения задач и идеально подходит для php-desktop. Вы можете использовать различные» exec «действия, которые имеет» nircmd «, так что вы можете вызывать все, что захотите, и сразу же вернуться к php. См. Руководство (архив .chm), в Windows 7/10 вам может понадобиться «разблокировать» этот файл справки (в свойствах файла), чтобы просмотреть его содержимое.
Если phpdesktop использует встроенный веб-сервер в php (php -S), то, насколько я знаю, невозможно сделать это без блокировки вызова exec, то же самое с proc_open и т. Д.
Я посмотрел и действительно phpdesktop использует встроенный веб-сервер:
https://github.com/cztomczak/phpdesktop/blob/c00988f69348b73b6dee27bdf45d145b719e2a3d/phpdesktop-chrome/php_server.cpp
Теоретически proc_open должен работать, но это не так