1

это несколько сложный вопрос, когда дело доходит до «где я должен это разместить?msgstr ", но я предполагаю, что за этим стоит общая проблема, поэтому я ставлю ее на superUser.

У меня есть сценарий Doctrine, который выполняется в php-файле путем вызова:

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

Так как я передаю ошибки из STDERR в STDOUT и сохраняю их в $ output, я получаю сообщения об ошибках.

Выполнение сценария дает мне:

php is not recognized as an internal or external command

Хотя я добавил его в системную переменную PATH:

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

C:\PHP является правильным путем и не содержит завершающего символа "\", как упомянуто здесь: php не распознается как внутренняя или внешняя команда (windows 7).

Также я могу без проблем запускать php-скрипты из CMD, используя php someFile.php. Поэтому я предполагаю, что PATH был правильно адаптирован.

Чтобы быть уверенным, я также перезагрузил машину с неизменными результатами.

Я понимаю, что это может быть ошибкой доктрины, но, поскольку сообщение об ошибке выглядит как общая системная проблема, я надеялся найти здесь помощь.

В настоящее время я отчасти беспомощен и могу только предположить, что, поскольку скрипт выполняется php, он работает как системный пользователь и, следовательно, не получает доступа к переменной PATH. Но на самом деле это верно только для "нормальных" переменных среды, так как они хранятся "на пользователя". PATH является системной переменной и поэтому должен быть доступен любому пользователю, выполняющему скрипт, поэтому это не должно иметь значения. Правильный?

Система Windows Server 2012 R2.

Любые предложения и помощь очень ценятся!

1 ответ1

0

Не найдя решения для этого, мы пошли дальше и передали путь PHP к пакетному сценарию Doctrine:

Например:exec("bin\doctrine.php.bat \"".PHP_PATH."\php.exe\" orm:generate-proxies");

Затем мы изменили doctrine.php.bat следующим образом: @ECHO OFF SET BIN_TARGET=%~dp0/../doctrine/orm/bin/doctrine.php %1 "%BIN_TARGET%" %2 %3 %4 %5

Просто добавив наш PHP_PATH в качестве первого параметра перед выполнением доктрины.

Таким образом, не имеет значения, был ли PHP определен как находящийся в пути или нет. Абсолютный путь уродлив, но он работает ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .