php não é reconhecido como um comando interno ou externo, embora esteja disponível na linha de comando

1

essa é uma questão complicada quando se trata de "onde devo colocá-la?", mas eu assumo um problema geral por trás dela, e é por isso que estou colocando em superusuário.

Eu tenho um script do Doctrine que é executado em um arquivo php chamando:

exec('bin\doctrine.php.bat dbal:import import_data/mssql_data.sql'.' 2>&1', $output);

Como estou canalizando erros de STDERR para STDOUT e salvando-os em $ output, recebo mensagens de erro.

A execução do script me dá:

php is not recognized as an internal or external command

Embora eu tenha adicionado à variável PATH do meu sistema:

(...)C:\Program Files\Microsoft\Web Platform Installer\;C:\PHP

C: \ PHP é o caminho correto e não contém um "\" final, como mencionado aqui: .

Além disso, posso executar manualmente scripts PHP a partir do CMD, usando "php someFile.php", sem problemas. Então eu assumo que o PATH foi corretamente adaptado.

Para ter certeza, eu também reinicializei a máquina com resultados inalterados.

Sei que isso pode ser um erro de doutrina, mas como a mensagem de erro parece um problema geral do sistema, espero encontrar ajuda aqui.

Atualmente estou meio desamparado e só posso assumir que, como o script é executado pelo php, ele está sendo executado como o usuário do sistema e, portanto, não obtém acesso à variável PATH. Mas afaik isso é verdade apenas para variáveis de ambiente "normais", uma vez que elas são armazenadas "por usuário". O PATH é uma variável do sistema e deve, portanto, ser acessível por qualquer usuário que esteja executando o script, por isso não importa. Correto?

O sistema é o Windows Server 2012 R2.

Todas as sugestões e ajuda são muito apreciadas!

    
por Worp 26.08.2014 / 11:49

1 resposta

0

Depois de não conseguir encontrar uma solução para isso, fomos em frente e passamos o caminho do PHP para o script em lote do Doctrine:

Por exemplo: exec("bin\doctrine.php.bat \"".PHP_PATH."\php.exe\" orm:generate-proxies");

Em seguida, modificamos o doctrine.php.bat assim: @ECHO OFF SET BIN_TARGET=%~dp0/../doctrine/orm/bin/doctrine.php %1 "%BIN_TARGET%" %2 %3 %4 %5

Simplesmente adicionando nosso PHP_PATH como o primeiro param antes de executar a doutrina.

Assim, não importava se o PHP fosse reconhecido como estando no caminho ou não. Um caminho absoluto é feio mas funciona ...

    
por 30.01.2015 / 16:10