simplexml_load_file() и кириллический дмоен

181
22 сентября 2017, 20:45

Есть код для обновления информации о товарах из другого магазина через файл Яндекс.Маркета. В начале я подгружаю файл с помощью simplexml_load_file(). Сайт одного из новых клиентов размещается на кириллическом домене (итоговая ссылка на файл по типу 'мойсайт.рф/pricelist.xml'), в итоге ничего не работает. Пытался элементарно перевести домен в punycode — не работает.

Мастера, подскажите, как мне быть? Всякие дополнительные библиотеки ставить не могу, т.к. хостинг виртуальный. Заранее всем спасибо!

Answer 1

Простейшая проверка говорит что всё должно работать:

<?php
$xml = simplexml_load_file('https://xn----7sbb5aamccpiegbel3bh1td.xn--p1ai/sitemap.xml');
foreach ($xml->url as $line) {
    echo "{$line->loc}\n";
}

Проверьте, нет ли ошибки DNS:

var_dump(gethostbyname('xn----7sbb5aamccpiegbel3bh1td.xn--p1ai'));

Если ошибки DNS нет (команда выше возвращает IP адрес), и вы можете загрузить файл локально из браузера, то обращайтесь в поддержку хостинга.

В вашем конкретном случае похоже на сервере блокируются запросы без заголовка User-Agent. Это легко исправить так:

<?php
$file = file_get_contents('http://xn--80aaanvlco2b3a.xn--p1ai/pricelist.xml', false, stream_context_create([
  'http' => [
    'header' => 'User-Agent: PHP'
  ]
]));
$xml = simplexml_load_string($file);
var_dump($xml->shop->name);
READ ALSO
Доработка мета-бокса Wordpress

Доработка мета-бокса Wordpress

Добрый вечер! Есть кусок файла functionsphp

208
Как разобрать строку на части?

Как разобрать строку на части?

Имеется строка по типу:

194
Проблемы с регулярным выражением php

Проблемы с регулярным выражением php

здравствуйте, есть регулярка для проверки ника при регистрации ~^[^-_][a-zA-Z_\-0-9]*$~u но почему-то пользователь может ввести такой #ник , хэштег одобряется...

172
Что такое &ldquo;Правило одного определения&rdquo; (One definition rule)?

Что такое “Правило одного определения” (One definition rule)?

Что такое "Правило одного определения"?

303