2015-08-31 4 views
1

Я обновил java java, и они изменили способ хранения местоположения jvm в переменной среды PATH.php exec() не обновляется переменная среды пути

Он использует «C: \ ProgramData \ Oracle \ Java \ javapath;» в начале переменной Path.

Проблема в том, что когда я выполняю exec («java blah blah blah»), php не может найти новый путь. Я получаю

"'java' is not recognized as an internal or external command, operable program or batch file." 

Он работает только тогда, когда я полный путь:

exec("c:\My\Path\To\Java\java blah blah blah") 

Когда я phpInfo (INFO_ENVIRONMENT), он показывает переменную Path от до изменения. Это где-то кэшировано? Я читал в других потоках, что перезапуск сервера, или перезапуск Apache поможет, но он, похоже, не работает. Я попробовал многократные перезагрузки.

var_dump ($ _ SERVER ['PATH']), var_dump (getenv ('PATH')), кажется, показывает NEW путь. Почему значение в phpInfo будет отличаться? Есть ли где-то отдельная копия переменной Path?

У меня есть среда разработки, которую я тестировал в Windows Vista, и у меня нет этой проблемы. Когда я тестирую его в среде Windows 2008, у меня возникает проблема.

Я стараюсь избегать жесткого кодирования пути.

ответ

1

перед ехесом заявления вы можете добавить путь к переменному пути, как так

putenv('PATH='.getenv('PATH').'path to java here'); 
+0

Но тогда, я просто избежать жесткого кодирования его в одном месте, с помощью жесткого кодирования его в другом месте. Я пытаюсь заставить мой код работать, обновляется ли Jvm или нет. И путь к jvm изменяется во время обновления. Я бы хотел, чтобы решение было более элегантным, чем настройка его отдельно на отдельных серверах. Было бы неплохо, если бы он просто читал переменную окружения Path. Любые идеи, почему, похоже, хранятся 2 копии переменной Path? – NL3294

+0

Единственное, что я могу придумать, это то, что у вас более одного php.ini есть один для используемой вами версии php и того, что Apache загружает в phpinfo, вы должны увидеть что-то вроде загруженного конфигурационного файла, убедитесь, что оно загружает правильный, который вы внесли изменения в – Searay330

+0

Сначала я попробовал то, что вы предложили. putenv ('PATH ='. Getenv ('PATH'). 'Путь к java здесь'); Но тогда я заметил, что phpInfo показывает путь NEW вместе с тем, что я только что добавил. Итак, я изменил его так: putenv ('PATH ='. Getenv ('PATH')); Теперь phpInfo() показывает новый путь. Итак, я подумал, что, может быть, он просто отклеился. Может быть, это было где-то в кешировании, и нужно было обновить? Я удаляю эту строку кода, и phpInfo(), похоже, возвращается к старой копии Path. Добавление этой строки кода для меня работает. – NL3294

Смежные вопросы