Вопрос

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

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

echo exec(createDir($somevariable));

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

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

Есть какие-нибудь идеи.

Спасибо.

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

exec( 'mkdir [NAME OF DIRECTORY]' );

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

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

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

Я думаю , что 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);
}

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top