Здравствуйте. <br/><br/> Мы генерируем фиды с товарами с использованием стандартного функционала 1С-Битрикса, и они обновляются каждые 30 минут. Обычно с ними все в порядке, но иногда PHP интерпретирует файл как текст, что приводит к ошибкам при его открытии клиентами. Вы можете получить фид по <a href="https://wisell.ru/bitrix/catalog_export/megamarket.php" rel="nofollow">этой ссылке</a>. В данный момент мы фиксируем проблему. <br/><br/> Я сохранил версии файла: одна открывается <a href="https://disk.yandex.ru/d/Q1TLs0jPb7XrGw" rel="nofollow">как XML</a>, а другая <a href="https://disk.yandex.ru/d/8ApM2Gud2X9Xiw" rel="nofollow">как текст</a>. Я не нашел отличий между этими файлами. <br/><br/> На сервере фид хранится в формате PHP, но отдается как XML: <br/><pre><code class="php">$disableReferers = false;
if (!isset($_GET["referer1"]) || strlen($_GET["referer1"])<=0) $_GET["referer1"] = "yandext";
$strReferer1 = htmlspecialchars($_GET["referer1"]);
if (!isset($_GET["referer2"]) || strlen($_GET["referer2"]) <= 0) $_GET["referer2"] = "";
$strReferer2 = htmlspecialchars($_GET["referer2"]);
header("Content-Type: text/xml; charset=windows-1251");
echo "<"."?xml version=\"1.0\" encoding=\"windows-1251\"?".">"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2024-11-29 09:06">
<shop>
<name>wisell.ru</name>
<company>wisell.ru</company>
<url>https://wisell.ru</url>
<platform>1C-Bitrix</platform>
<currencies>
<currency id="RUB" rate="1" />
// ... ...</code></pre><br/><br/> Можете помочь разобраться с этой проблемой? Спасибо.
Здравствуйте! Проблема, с которой вы столкнулись, может быть связана с несколькими факторами, особенно если один файл отображается корректно, а другой — нет. Вот несколько шагов, которые могут помочь вам разобраться и решить проблему: 1. **Проверка кода вывода**: Убедитесь, что перед выводом содержимого XML нет пробелов или других символов. Например, не должно быть никаких пробелов перед `<?xml` в начале файла. Если до этого тега есть какие-либо символы (включая пробелы, символы новой строки или ошибки PHP), это может привести к неправильной интерпретации содержимого. 2. **Корректная кодировка**: Убедитесь, что файл корректно сохранен в текстовом формате Windows-1251. Если файл сохранен в другой кодировке (например, UTF-8), это может привести к проблемам на стороне клиента. 3. **Заголовки HTTP**: В вашем коде заголовок `Content-Type` установлен правильно, но убедитесь, что нет других заголовков, которые могут перезаписывать этот параметр. Вам следует проверить, не выводятся ли какие-либо дополнительные заголовки или содержимое до установки `Content-Type`. 4. **Логи ошибок**: Просмотрите логи ошибок на сервере. Возможно, там есть подсказки, указывающие на проблемы в коде или конфигурации сервера. 5. **Проблемы на стороне клиентов**: Возможно, проблема возникает из-за того, как клиенты обрабатывают ваш фид. Убедитесь, что клиенты не накладывают дополнительные ограничения или фильтры к запросу, которые могут повлиять на ответ. 6. **Проверка фида**: Используйте валидатор XML для проверки вашего фида на наличие ошибок. Иногда проблемы с форматированием, такие как неправильные символы или категория с некорректными данными, могут привести к сбоям. 7. **Сравнение файлов**: Если у вас есть две версии файла, попробуйте сравнить их оба, не только по видимому содержимому, но и с использованием инструментов сравнения файлов, чтобы выявить невидимые различия, такие как разное количество пробелов, знаков переноса строк и т. д. Если после всех этих попыток проблема все еще сохраняется, постарайтесь детализировать ситуацию, и мы можем продолжить искать решение.
1. Гуглим simplexml_load_string ошибки
2. Открываем страницу https://www.php.net/manual/ru/simplexml.examples-e...
3. Берём с неё код и немного модицифируем
libxml_use_internal_errors(true); $sXML = download_page($url); $xml = simplexml_load_string($sXML); if ($xml === false) { throw new RuntimeException( "XML parsing errors: ". implode("", array_column(libxml_get_errors(), 'message')) ); }
Смотрим ошибки, исправляем.