Помогите исправить

Тема в разделе "PHP", создана пользователем g-prime, 1 ноя 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. g-prime

    g-prime איך בין גאָט

    Регистр.:
    11 авг 2008
    Сообщения:
    779
    Симпатии:
    1.131
    Имеется скрипт для отправки уведомлений в пинг сервисы об изменениях на сайте
    PHP:
    <?php
    $urls 
    array_map("trim"file("e:\\ping.txt")); 

    $site_name "Новости софта";

    $site_url "http://softstorm.net";

    $request xmlrpc_encode_request("weblogUpdates.ping", array($site_name$site_url));

    #echo $request;

    foreach($urls as $i=>$url) {


    $host parse_url($urlPHP_URL_HOST);

    $context stream_context_create(array('http' => array(
        
    'method' => "POST",
        
    'header' => "Content-Type: text/xml\r\nUser-Agent: pingationMod/1.0\r\nHost: ".$host."\r\n",
        
    'content' => $request
    )));

    $file file_get_contents($urlfalse$context);

    $response xmlrpc_decode($file);

    if (
    $response[flerror] > 0){
    echo 
    $response[message]."<br/>";
    echo 
    "<font color=red>Ошибка</font> ".$host."<br/><br/><br/>";
    } else {
    echo 
    $response[message]."<br/>";
    echo 
    "Успешная отправка ".$host."<br/><br/><br/>";
    }

    }

    ?>
    Ошибка
     
  2. Eihwaz

    Eihwaz

    Регистр.:
    7 окт 2007
    Сообщения:
    156
    Симпатии:
    54
    Попробуйте в начале скрипта указать:
    PHP:
    ini_set ('allow_url_fopen'1);
    Убедитесь, что ссылки не содержат пробелов и т.п.
    Можете попробовать что-то в этом стиле, хотя это и "черезжопное" решение:
    PHP:
    ob_start();
    $data ob_get_contents($url);
    ob_end_clean();
     
  3. g-prime

    g-prime איך בין גאָט

    Регистр.:
    11 авг 2008
    Сообщения:
    779
    Симпатии:
    1.131
    Не помогает ;) Если это добавляю отправка уведомлений вообще пропадает
     
  4. nittis

    nittis Постоялец

    Регистр.:
    21 апр 2009
    Сообщения:
    68
    Симпатии:
    29
    Может заголовок неверный немного?

    На самом сервисе ожидают примерно вот такой (хотя все кроме длины указано верно)

    * POST /rpc/ping HTTP/1.0
    * User-Agent: YOUR AGENT HERE
    * Host: rpc.technorati.com
    * Content-Type: text/xml
    * Content-length: 250

    Перейти по ссылке

    UPD:

    Предпложение выше не подтвердилось. Порезал скрипт, оставив отравку пустого запроса на ping сервис и получил от него вполне ожидаемое сообщение об ошибки. Так что скрипт судя по всему рабочий. Может настройки сервера посмотреть.
     
  5. FL@SH

    FL@SH Читатель

    Заблокирован
    Регистр.:
    20 июл 2008
    Сообщения:
    193
    Симпатии:
    25
    Код:
    ini_set(allow_url_fopen, "On");
    Это у тебя "Ошибка открытия потока". Проверяй свой хост на возможность открытия внешних потоков
     
  6. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    А что значит "внешнии потоки"?


    измени в php.ini
    allow_url_fopen On и проверь фаервол, не блочит ли он.
     
  7. g-prime

    g-prime איך בין גאָט

    Регистр.:
    11 авг 2008
    Сообщения:
    779
    Симпатии:
    1.131
    В php.ini все нормально. СОбственно я подключая список сервисов, куда буду отсылать уведомление из текстового файла $urls = array_map("trim", file("e:\\ping.txt"));

    ошибка вылезает не на все сервисы, которые в списке (иногда на один сервис вылезит ошибка, в другой раз - на другой) :nezn:
     
  8. Crazy108

    Crazy108 Создатель

    Регистр.:
    6 сен 2008
    Сообщения:
    45
    Симпатии:
    7
    попробуй вставить
    sleep(1);
    можно было бы предположить что для каких-то конкретных сайтов не получается открыть соединение, но раз каждый раз для разный сайтов, то возможен вариант с проблемами в подключении к интернету.
     
  9. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Ну тогда значит урлы на которых возникает ошибка недоступны.
    Проверьте вручную, если действительно скрипт спотыкается, там где адрес невалидный замените строку так
    PHP:
    $file file_get_contents($urlfalse$context);
    на
    PHP:
    $file = @file_get_contents($urlfalse$context);
     
Статус темы:
Закрыта.