Intereting Posts

simplexml_load_file ampersand в url

У нас есть простой 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-файл.