Como executar um comando dentro de um script sem especificar a localização exata?

1

Então eu tenho um script PHP que está usando wget para baixar algumas imagens. Parece algo assim:

exec('wget -O saveImage.png http://location.of.image');

Quando executo meu script em uma máquina diferente, funciona. No entanto, quando eu corro localmente, não funciona. Eu acho que isso tem a ver com como eu instalei wget . Localmente, estou executando o Mac OS X 10.6 Snow Leopard e instalei wget usando o Homebrew . Então, quando eu executo which wget (como eu), a localização de wget é /usr/local/bin/wget (que é um link simbólico para a Adega Homebrew). Eu determinei que o usuário que está executando o script é chamado daemon . Eu sei que o script wget é de propriedade do grupo staff e não acho que o usuário daemon faça parte desse grupo (mas não sei como verificar). De qualquer forma, não acho que o usuário daemon tenha permissão para executar o comando e / ou não conseguir encontrar o script. O que devo fazer?

Update: Por isso, consegui executar o script quando especifiquei a localização exata:

exec('/usr/local/bin/wget ...etc');

Isso me faz pensar que não é um problema de permissões, mas sim um problema "não é possível encontrar o wget". Eu não acho que eu possa especificar o local exato, pois é diferente nas várias máquinas em que este script é executado. Então, o que devo fazer para contornar este problema?

Solução:

Adicionando /usr/local/bin à variável $PATH do ambiente, o PHP conseguiu encontrar o wget. Aqui está como eu fiz em PHP:

//help PHP find wget since it may be in /usr/local/bin
putenv('PATH=' . getenv('PATH') . PATH_SEPARATOR . '/usr/local/bin');
if (exec('which wget') == null) {
    throw new Exception('Could not find wget, so image could not be downloaded.');
}

//now we know wget is available, so download the image
exec('wget ...');
    
por Andrew 11.07.2011 / 19:15

1 resposta

1

Metade de uma resposta ...

Certifique-se de que wget esteja em sua variável de ambiente PATH padrão para o usuário com o qual você executa o script (em cada máquina). Observar a saída de exec('echo $PATH') pode ser uma boa maneira de fazer isso. O resultado tem que ser como ...:/usr/local/bin:... .

Não sei como alterar o valor padrão do PATH no OSX.

    
por 23.07.2011 / 01:01