php exec () ошибка - PullRequest
       12

php exec () ошибка

0 голосов
/ 02 января 2009

У меня небольшая проблема со следующим:

Когда я выполняю эту строку:

echo exec(createDir($somevariable));

Я получаю эту ошибку:

Warning: exec() [function.exec]: Cannot execute a blank command in /home/mydir/myfile.inc.php on line 32

Любые идеи.

Спасибо.

Ответы [ 6 ]

2 голосов
/ 02 января 2009

exec() ожидает строковый аргумент, который он передаст в вашу операционную систему для выполнения. Другими словами, это портал к командной строке сервера.

Я не уверен, что это за функция createDir(), но если она не возвращает допустимую строку командной строки, возможно, из-за этого она не работает.

В Linux вы можете захотеть сделать что-то вроде

exec('/usr/bin/mkdir '.$path);

... с другой стороны, вы должны воздерживаться от использования exec() любой ценой. Вместо этого вы можете взглянуть на mkdir()

0 голосов
/ 02 января 2009

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

Я думаю, 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);
}
0 голосов
/ 02 января 2009

Я предполагаю, что ваша функция createDir() ничего не возвращает. Также стоит проверить, что $somevariable также настроен на что-то разумное

0 голосов
/ 02 января 2009

Вы неправильно понимаете цель exec (). Если все, что вы хотите сделать, это создать каталог, тогда вы должны использовать mkdir ().

0 голосов
/ 02 января 2009

С exec вы можете выполнять системные вызовы, как если бы вы использовали командную строку. Это не имеет ничего общего с выполнением функций PHP.

Чтобы создать каталог, вы можете сделать следующее:

exec( 'mkdir [NAME OF DIRECTORY]' );
0 голосов
/ 02 января 2009

Я предполагаю, что createDir () не имеет возвращаемого значения.

Попробуйте exec("mkdir $somevariable");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...