Вызов Msbuild от Php - неправильная кодовая страница и культура - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть сценарий Php, который вызывает Msbuild через систему:

<?php
system( "msbuild umlaut.proj" );
?>

Это файл проекта:

<?xml version="1.0" encoding="UTF-8"?>
<Project 
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
  DefaultTargets="EchoUmlaut" 
  ToolsVersion="3.5">
  <Target Name="EchoUmlaut">
    <Message Text="Umlaute: Ä Ö Ü ä ö ü ß" />
  </Target>
</Project>

Когда я вызываю Msbuild непосредственно из командной строки, вывод msbuild выполняется на немецком языке (как и ожидалось), и умлауты выходят в порядке (я chcp to 1252). Но когда я использую php для вызова msbuild, umlauts неверны, и вывод msbuild меняется на английский. Интересно, что я могу сделать, чтобы предотвратить это?

C:\>chcp
Aktive Codepage: 1252.

C:\>msbuild umlaut.proj
Microsoft (R)-Buildmodul, Version 3.5.30729.1
[Microsoft .NET Framework, Version 2.0.50727.3607]
Copyright (C) Microsoft Corporation 2007. Alle Rechte vorbehalten.

Das Erstellen wurde am 13.04.2010 08:57:04 gestartet.
Projekt "D:\Cvsroot\projekte\e4elaui\v1.0\umlaut.proj" auf Knoten 0 (Standardziele).
  Umlaute: Ä Ö Ü ä ö ü ß
Die Erstellung von Projekt "D:\Cvsroot\projekte\e4elaui\v1.0\umlaut.proj" ist abgeschlossen (Standardziele).


Das Erstellen war erfolgreich.
    0 Warnung(en)
    0 Fehler

Vergangene Zeit 00:00:00

C:\>php call_from_php.php
Microsoft (R) Build Engine Version 3.5.30729.1
[Microsoft .NET Framework, Version 2.0.50727.3607]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

Build started 13.04.2010 08:57:11.
Project "D:\Cvsroot\projekte\e4elaui\v1.0\umlaut.proj" on node 0 (default targets).
  Umlaute: Ž ™ š „ ”  á
Done Building Project "D:\Cvsroot\projekte\e4elaui\v1.0\umlaut.proj" (default targets).

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00

1 Ответ

0 голосов
/ 13 апреля 2010

Похоже, что php-скрипт не передает некоторые переменные окружения, которые передает оболочка. Вам нужно будет установить их вручную, используя putenv:

bool putenv  (  string $setting  );

скопируйте их из оболочки и вставьте в скрипт перед вызовом системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...