Pergunta

Estou tendo um pequeno problema com o seguinte:

Quando eu executar esta linha:

echo exec(createDir($somevariable));

Eu recebo este erro:

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

Todas as ideias.

Graças.

Foi útil?

Solução

exec() espera um argumento de string, que passaria para o seu sistema operacional a ser executada. Em outras palavras, este é um portal para a linha de comando do servidor.

Eu não tenho certeza que função createDir() é, mas a menos que ele está retornando uma seqüência de linha de comando válida, é provavelmente não por causa disso.

No Linux, você pode querer fazer algo como

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

... por outro lado, você deve se abster de usar exec() a todo custo. O que você pode fazer aqui, em vez disso, é dar uma olhada em mkdir()

Outras dicas

Com exec você pode executar chamadas de sistema como se estivesse usando a linha de comando. Não tem de fazer nada com a execução de funções PHP.

Para criar um diretório que você pode fazer o seguinte:

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

Eu acho que a sua função createDir() não retorna nada. Também pode valer a pena verificar que $somevariable também está definido para algo sensato

Você está mal-entendido o propósito de exec (). Se tudo que você quer fazer é criar um diretório, então você deve usar mkdir ().

Eu acho que derivado de outros posts e comentários que é que você realmente quer fazer:

Eu acho createDir() é uma função PHP que você escreveu-se. Ele faz mais do que apenas fazer um diretório -. Ele preenche-lo, e isso pode levar algum tempo

Por alguma razão você acredita que o próximo comando é executado antes createDir() tem trabalho acabado, e você pensou que invocando createDir() usando exec() você poderia evitar isso.

Diga-me em um comentário se este é o caminho para fora, e eu vou apagar esta resposta.

É improvável que createDir() realmente continuar trabalhando depois que voltou (se isso acontecer, então chamamos isso de 'assíncrona'). Seria necessário que o programador para sair de seu caminho para torná-lo assíncrona. Portanto, verifique essa suposição.

Mesmo assim, exec() não é para invocar funções PHP. É para invocar comandos shell (o tipo de coisa que você digitar em um prompt de comando). Como muitos de nós têm observado, deve ser evitada a menos que você está muito cuidado -. O risco é que você permitir que um usuário para executar comandos shell arbitrários

Se você realmente tem que esperar por uma função assíncrona para completa, há um par de maneiras isso pode ser feito.

A primeira maneira exige que a função assíncrona foi escrito de forma favorável. Algumas APIs permitem iniciar um trabalho assíncrono, que lhe dará um 'pega', em seguida, fazer algumas outras coisas, em seguida, obter o status de retorno a partir da alça. Algo como:

handle = doThreadedJob(myParam);
# do other stuff
results = getResults(handle);

getResults iria esperar até que o trabalho terminado.

A segunda maneira não é tão bom, e pode ser usado quando a API é menos útil. Infelizmente, é uma questão de encontrar alguma pista que o trabalho está terminado, e de votação até que seja.

while( checkJobIsDone() == false ) {
    sleep(some time interval);
}

Eu estou supondo CreateDir () não tem um valor de retorno.

Tente exec("mkdir $somevariable");

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top