Я обновил 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, у меня возникает проблема.
Я стараюсь избегать жесткого кодирования пути.
Но тогда, я просто избежать жесткого кодирования его в одном месте, с помощью жесткого кодирования его в другом месте. Я пытаюсь заставить мой код работать, обновляется ли Jvm или нет. И путь к jvm изменяется во время обновления. Я бы хотел, чтобы решение было более элегантным, чем настройка его отдельно на отдельных серверах. Было бы неплохо, если бы он просто читал переменную окружения Path. Любые идеи, почему, похоже, хранятся 2 копии переменной Path? – NL3294
Единственное, что я могу придумать, это то, что у вас более одного php.ini есть один для используемой вами версии php и того, что Apache загружает в phpinfo, вы должны увидеть что-то вроде загруженного конфигурационного файла, убедитесь, что оно загружает правильный, который вы внесли изменения в – Searay330
Сначала я попробовал то, что вы предложили. putenv ('PATH ='. Getenv ('PATH'). 'Путь к java здесь'); Но тогда я заметил, что phpInfo показывает путь NEW вместе с тем, что я только что добавил. Итак, я изменил его так: putenv ('PATH ='. Getenv ('PATH')); Теперь phpInfo() показывает новый путь. Итак, я подумал, что, может быть, он просто отклеился. Может быть, это было где-то в кешировании, и нужно было обновить? Я удаляю эту строку кода, и phpInfo(), похоже, возвращается к старой копии Path. Добавление этой строки кода для меня работает. – NL3294