Проверка ссылок на валидность в xml файле средствами PHP

Статус
В этой теме нельзя размещать новые ответы.

Woland

Мой дом здесь!
Регистрация
3 Июл 2013
Сообщения
313
Реакции
253
Друзья, есть xml файл вида:

<product>
<id>3299</id>
<naz>Имя товара</naz>
<weight>2.4</weight>
<category>75</category>
<weight>2.4</weight>
<image>Для просмотра ссылки Войди или Зарегистрируйся
<image>Для просмотра ссылки Войди или Зарегистрируйся
<image>Для просмотра ссылки Войди или Зарегистрируйся
</product>

<product>
<id>3300</id>
<naz>Имя товара</naz>
<weight>2.7</weight>
<category>76</category>
<weight>2.4</weight>
<image>Для просмотра ссылки Войди или Зарегистрируйся
<image>Для просмотра ссылки Войди или Зарегистрируйся
<image>Для просмотра ссылки Войди или Зарегистрируйся
</product>

Какие то ссылки в тегах image могут быть битыми. Можно ли как то пробежаться по файлу, проверить ссылки на валидность и если какая либо недействительна, то просто заменить эту ссылку, например, пробелом (str_replace тем же)?

Заранее спасибо за помощь.
 
Последнее редактирование:
Можно.
Распарсить скриптом xml, выдернув из него все ссылки на картинки. Далее пройтись по этим ссылкам и анализировать ответ, если 404 - ссылка битая.
Это общий смысл. Рабочий код не берусь на добровольной основе писать. Уж, пардоньте. :)
 
Глухо у вас тут. Придумал решение сам, может кому то пригодится на будущее :). Используем SimpleXML для работы со структурой xml файла.

PHP:
<?php
    $text = file_get_contents("file.xml");
    $shop = new SimpleXMLElement($text);
    $i=0;
    foreach ($shop->xpath('//image') as $image) {
        $headers = @get_headers($image);
        if(strpos('404', $headers[0])) {
            $shop->product[$i]->image = '';
        }
        $i++;
    }
    $text = $shop->asXML();
    file_put_contents('file.xml', $text);
?>

При объемном xml файле, сервер естественно обрывает выполнение скрипта спустя 30 секунд. Доработал решение с последовательным запуском скрипта через cron и восстановлением его работы с места обрыва. Уж не знаю насколько криво, но оно работает:). Если кому то будет нужно пишите подскажу.
 
Последнее редактирование модератором:
Все верно, только заголовок лучше проверять не на 404 а на != 200
 
  • Нравится
Реакции: Nei
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху