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

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

g-prime

איך בין גאָט
Регистрация
11 Авг 2008
Сообщения
759
Реакции
1.081
Имеется скрипт для отправки уведомлений в пинг сервисы об изменениях на сайте
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($url, PHP_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($url, false, $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/>";
}

}

?>

Ошибка
Warning: file_get_contents(Для просмотра ссылки Войди или Зарегистрируйся) [function.file-get-contents]: failed to open stream: HTTP request failed! in C:\xampp\htdocs\index.php on line 30
 
Попробуйте в начале скрипта указать:
PHP:
ini_set ('allow_url_fopen', 1);
Убедитесь, что ссылки не содержат пробелов и т.п.
Можете попробовать что-то в этом стиле, хотя это и "черезжопное" решение:
PHP:
ob_start();
$data = ob_get_contents($url);
ob_end_clean();
 
Попробуйте в начале скрипта указать:
PHP:
ini_set ('allow_url_fopen', 1);
Убедитесь, что ссылки не содержат пробелов и т.п.
Можете попробовать что-то в этом стиле, хотя это и "черезжопное" решение:
PHP:
ob_start();
$data = ob_get_contents($url);
ob_end_clean();
Не помогает ;) Если это добавляю отправка уведомлений вообще пропадает
 
Может заголовок неверный немного?

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

* 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
Код:
ini_set(allow_url_fopen, "On");
Это у тебя "Ошибка открытия потока". Проверяй свой хост на возможность открытия внешних потоков
 
Это у тебя "Ошибка открытия потока". Проверяй свой хост на возможность открытия внешних потоков

А что значит "внешнии потоки"?


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

ошибка вылезает не на все сервисы, которые в списке (иногда на один сервис вылезит ошибка, в другой раз - на другой) :nezn:
 
попробуй вставить
sleep(1);
можно было бы предположить что для каких-то конкретных сайтов не получается открыть соединение, но раз каждый раз для разный сайтов, то возможен вариант с проблемами в подключении к интернету.
 
Ну тогда значит урлы на которых возникает ошибка недоступны.
Проверьте вручную, если действительно скрипт спотыкается, там где адрес невалидный замените строку так
PHP:
$file = file_get_contents($url, false, $context);

на
PHP:
$file = @file_get_contents($url, false, $context);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху