У нас есть простой PHP-скрипт, который загружает статус сервера из внешнего XML-файла следующим образом:
$xml = simplexml_load_file("http://domain.com/?module=server&action=status-xml"); foreach ($xml->Group->Server->attributes() as $nodename => $value){ if ($nodename == $param){ return $value; } }
Когда скрипт запускается, мы получаем внутреннюю ошибку сервера 500. Рассматривая журнал ошибок, мы видим следующее: http://img.ruphp.com/php/alOYI.png
В принципе, & в URL-адресе получает urlencoded (во время выполнения, как-то) в & amp;
Любая идея, почему это происходит? Это было на настройке apache2 / w php-fpm. Является ли это своего рода настройкой безопасности?
Насколько я знаю, это просто функция сообщения об ошибках, а не фактическое изменение URL-адреса при запросе. Вы можете проверить, включен ли параметр html_errors либо хостом, либо во время вашей собственной установки. (Дополнительная информация: http://www.php.net )
Когда html_errors включен, все содержимое ошибки будет преобразовано в HTML-объекты, и ссылки на онлайн-документацию PHP будут добавлены. Если вы затем проверите error.log на своем сервере, вы увидите объекты как текст вместо HTML.
То, что вы видите, есть вывод HTML сообщения об ошибке PHP, в котором &
преобразуется в соответствующий объект HTML &
, Это не означает &
отправляется на сервер в строке запроса.
Как упоминалось в php doc, вы должны использовать его таким образом.
simplexml_load_file(rawurlencode('http://example.com/?a='.urlencode('b').'&c='.urlencode('d')))
Надеюсь это поможет.
[EDIT] Но убедитесь, что желаемая функция на вашем сервере работает. Проверьте это, вызывая свой URL прямо из браузера. Это должно выводить XML-файл.