Назад | Перейти на главную страницу

Почему изменяется набор символов при запуске Glassfish с использованием php_exec по сравнению с запуском в консоли?

Я создал сценарий PHP для запуска / остановки сервера GlassFish. В PHP я использую shell_exec метод для выполнения команд start-domain и stop-domain.

Для запуска сервера

shell_exec("sudo -u root /usr/local/glassfish3/bin/asadmin start-domain domain1");

Чтобы остановить сервер

shell_exec("sudo -u root /usr/local/glassfish3/bin/asadmin stop-domain domain1");

Хотя сценарий запускает и останавливает сервер, есть проблема, которую я не могу понять. Кодировка символов меняется на другую, а специальные символы, поступающие из клиентских запросов, больше не форматируются правильно.

Персонажи с правильной кодировкой

Персонажи с неправильной кодировкой

Кажется, что настройки для UTF-8 игнорируются, и он возвращается к другой кодировке, которая, как я считаю, на «ISO-8859-1».

domain.xml

<jdbc-connection-pool connection-validation-method="auto-commit" ...>
  <property name="characterEncoding" value="UTF-8"></property>
</jdbc-connection-pool>

sun-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">
  <context-root>/some-directory-war</context-root>
  <class-loader delegate="true"/>
  <jsp-config>
    <property name="keepgenerated" value="true">
      <description>Keep a copy of the generated servlet class java code.</description>
    </property>
  </jsp-config>
  <!-- Change the default character encoding from ISO-8859-1 to UTF-8 -->
  <parameter-encoding default-charset="UTF-8"/>
</sun-web-app>

Во время своего расследования я обнаружил множество статей, в которых говорилось об определении набора символов в sun-web.xml (старая версия Glassfish - мой случай), но это не помогло.

После некоторого тестирования я заметил, что если я вхожу в систему с www-данными в консоли, используется оболочка по умолчанию / bin / sh, и запуск домена из этого вызывает ту же проблему. Однако, если я переключусь на / bin / bash, это сработает.

Кто-нибудь знает, в чем может быть разница?

Будем очень признательны за любую информацию по этому поводу!

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

Помог следующий комментарий пользователя: shell_exec

$locale = "en_US.UTF-8";
setlocale(LC_CTYPE, $locale);
putenv('LC_CTYPE=' . $locale);

shell_exec("sudo -u root /usr/local/glassfish3/bin/asadmin start-domain domain1");

Работает как часы!