Я думаю, что я извлек из других постов и комментариев то, что вы действительно хотите сделать:
Я думаю, createDir()
- это PHP-функция, которую вы написали сами. Он делает больше, чем просто создает каталог - он заполняет его, и это может занять некоторое время.
Почему-то вы полагаете, что следующая команда запускается до того, как createDir()
завершит работу, и вы подумали, что, вызвав createDir()
с использованием exec()
, вы могли бы избежать этого.
Скажите мне в комментарии, если это выход, и я удалю этот ответ.
Кажется маловероятным, что createDir()
действительно продолжает работать после его возвращения (если это так, то мы называем это "асинхронным"). Программисту потребуется приложить все усилия, чтобы сделать его асинхронным. Так что проверь это предположение.
Несмотря на это, exec()
не для вызова функций PHP. Он предназначен для вызова команд оболочки (то, что вы вводите в командной строке). Как многие из нас заметили, этого следует избегать, если вы не будете очень осторожны - риск состоит в том, что вы позволяете пользователю выполнять произвольные команды оболочки.
Если вам действительно нужно дождаться завершения асинхронной функции, есть несколько способов сделать это.
Первый способ требует, чтобы асинхронная функция была написана легко. Некоторые API позволяют запускать асинхронную работу, которая даст вам «дескриптор», затем выполнит некоторые другие действия, а затем получит статус возврата из дескриптора. Что-то вроде:
handle = doThreadedJob(myParam);
# do other stuff
results = getResults(handle);
getResults будет ждать окончания работы.
Второй способ не так хорош, и его можно использовать, когда API менее полезен. К сожалению, нужно найти какую-то подсказку, что работа закончена, и опросить до тех пор, пока она не закончится.
while( checkJobIsDone() == false ) {
sleep(some time interval);
}