Вызов PHP SOAP из CMD

#php #soap #utf-8 #character-encoding #cmd

#php #soap #utf-8 #кодировка символов #cmd

Вопрос:

Скрипт отправляет некоторые данные с помощью PHP SOAP-клиента, когда я запускаю его из браузера, все идет нормально. Но когда я пытаюсь выполнить его из CMD, я получаю ошибку:

SOAP-ОШИБКА: Кодировка: строка ‘CBP xe0 …’ не является допустимой строкой utf-8

Мой bat-файл выглядит следующим образом:

 @echo OFF
(
chcp 65001
"E:xampxamppphpphp.exe" E:xampxampphtdocswebapiindex.php
)
  

С chcp или без него я все еще получаю ошибку.

Я выполнил тестовую проверку кодировки, и все время выводится ASCII, даже в браузере.. PHP-файл имеет кодировку utf-8, а bat-файл находится в ANSI.

 $a = 'test text';

echo mb_detect_encoding($a);

$b = mb_convert_encoding($a, "UTF-8", "auto");
echo mb_detect_encoding($b);

$c = iconv("ASCII", "UTF-8", $a);
echo mb_detect_encoding($c);

$d = utf8_encode($a);
echo mb_detect_encoding($d);
  

Буду признателен за любую помощь.

Комментарии:

1. Может быть, файл UTF-8 имеет спецификацию ? Попробуйте сохранить его без спецификации.

2. Попробуйте вызвать его из командной строки Linux

Ответ №1:

Это может быть серьезной проблемой, связанной с Windows. Попробуйте это в командной строке Linux.

Вы также можете попробовать запустить его через PHP-CGI, а не только через CLI. Лично я использовал PHP в некоторых экзотических ситуациях, когда я передавал данные, и хотя данные казались идентичными, он не работал, пока я не использовал версию CGI (вы все еще можете вызвать его из командной строки).

Также может быть так, что среда, в которой вы работаете на веб-странице, и среда, в которой вы работаете из командной строки, существенно отличаются друг от друга, насколько это зависит от ваших потребностей. Например, когда PHP запускается из командной строки, у вас есть доступ к системным переменным окружения (в $_SERVER). Однако, когда они находятся внутри веб-страницы, их там нет. Вы можете увидеть, есть ли разница в том, что отправляет cURL, получив окончательную копию запроса (и / или заголовков) в обеих средах и сравнив их на уровне байтов. Вероятно, это ваш лучший выбор.

Вы также могли бы попытаться включить фактический (или аналогичный) код SOAP, чтобы мы знали, о какой ерунде вы говорили, из первых рук, вместо того, чтобы слепо метать дротики в возможные ответы.

(Если вам понравился этот ответ, примите его и проголосуйте за меня.)

Дастин