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

Тема в разделе "Как сделать...", создана пользователем Woland, 10 дек 2013.

Статус темы:
Закрыта.
  1. Woland

    Woland Want to California

    Регистр.:
    3 июл 2013
    Сообщения:
    305
    Симпатии:
    208
    Друзья, есть xml файл вида:

    <product>
    <id>3299</id>
    <naz>Имя товара</naz>
    <weight>2.4</weight>
    <category>75</category>
    <weight>2.4</weight>
    <image>http://www.site.ru/foto/e1188/E1188.jpg</image>
    <image>http://www.site.ru/foto/e1188/E1188_1.jpg</image>
    <image>http://www.site.ru/foto/e1188/E1188_2.jpg</image>
    </product>

    <product>
    <id>3300</id>
    <naz>Имя товара</naz>
    <weight>2.7</weight>
    <category>76</category>
    <weight>2.4</weight>
    <image>http://www.site.ru/foto/e1189/E1189.jpg</image>
    <image>http://www.site.ru/foto/e1189/E1189_1.jpg</image>
    <image>http://www.site.ru/foto/e1189/E1189_2.jpg</image>
    </product>

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

    Заранее спасибо за помощь.
     
    Последнее редактирование: 10 дек 2013
  2. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    636
    Симпатии:
    503
    Можно.
    Распарсить скриптом xml, выдернув из него все ссылки на картинки. Далее пройтись по этим ссылкам и анализировать ответ, если 404 - ссылка битая.
    Это общий смысл. Рабочий код не берусь на добровольной основе писать. Уж, пардоньте. :)
     
  3. Woland

    Woland Want to California

    Регистр.:
    3 июл 2013
    Сообщения:
    305
    Симпатии:
    208
    Глухо у вас тут. Придумал решение сам, может кому то пригодится на будущее :). Используем 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 и восстановлением его работы с места обрыва. Уж не знаю насколько криво, но оно работает:). Если кому то будет нужно пишите подскажу.
     
    Последнее редактирование модератором: 16 дек 2013
    latteo нравится это.
  4. Wounderer

    Wounderer Создатель

    Регистр.:
    11 янв 2007
    Сообщения:
    21
    Симпатии:
    6
    Все верно, только заголовок лучше проверять не на 404 а на != 200
     
    Nei нравится это.
Статус темы:
Закрыта.