Intereting Posts
Неустранимая ошибка: вызов неопределенной функции pg_connect Каковы наилучшие методы передачи нескольких переменных функции с помощью PHP Yii множественных отношений В диалоговом окне «Сохранить как» в PHP Отправка электронной почты с открытым текстом php и html Как обрабатывать огромный выбор запроса с помощью symfony и doctrine? Наконец, альтернатива предложения для тайм-аута скрипта Почему crypt / blowfish генерируют один и тот же хэш с двумя разными солями? Как использовать композитор в окнах? Ошибка установки Composer – требуется ext_curl, когда он включен Приложение Facebook iframe после перенаправления авторизации на вкладку страницы facebook Как исправить «Уведомление: неопределенный индекс:» в действии формы PHP? Контрольный массив php для числа Получение платежей через PayPal и кредитную карту PHP: как я могу сортировать и фильтровать «массив», то есть объект, реализующий ArrayAccess?

Установите время ожидания на simplexml_load_file

У меня есть этот скрипт, который выводит rss-канал. Хотелось бы, чтобы я попытался достичь rss-url для чего-то вроде 5-секундных вершин, и если он не сможет, я хочу, чтобы он загрузил резервный XML-документ, который находится на сервере. Это то, что у меня есть, и оно не работает:

<?php include '../php/connect.php'; $metaData = mysql_query("SELECT * FROM `siteinfo`") or die("couln't find table :("); $displayData = mysql_fetch_assoc($metaData); $url = $displayData['status']; $xml = file_get_contents($url); stream_set_timeout($xml, 5); if ($xml == FALSE) { $xml = simplexml_load_file('backUpXml.xml'); foreach ($xml->channel->item as $item) { echo '<a href="'.$item->guid.'" alt="'.$item->title.'" target="_blank">', substr($item->title, 0, 62), '...</a><br /><span>', substr($item->pubDate, 4, 18),'</span><br /><hr /><br />'; } } else { $xml = simplexml_load_file($url); foreach ($xml->channel->item as $item) { echo '<a href="'.$item->guid.'" alt="'.$item->title.'" target="_blank">', substr($item->title, 0, 62), '...</a><br /><span>', substr($item->pubDate, 4, 18),'</span><br /><hr /><br />'; } } ?> 

Я получаю ошибку таймаута, и все. Любое понимание было бы здорово!

Это гораздо лучшее решение, указанное здесь @AnthonySterling:

 function simplexml_load_file_from_url($url, $timeout = 5){ $opts = array('http' => array('timeout' => (int)$timeout)); $context = stream_context_create($opts); $data = file_get_contents($url, false, $context); if(!$data){ trigger_error('Cannot load data from url: ' . $url, E_USER_NOTICE); return false; } return simplexml_load_string($data); } 

От php.net :

 <?php $fp = fsockopen("www.example.com", 80); if (!$fp) { echo "Unable to open\n"; } else { fwrite($fp, "GET / HTTP/1.0\r\n\r\n"); stream_set_timeout($fp, 2); $res = fread($fp, 2000); $info = stream_get_meta_data($fp); //I think this is what you need. fclose($fp); if ($info['timed_out']) { //So you can check this variable. echo 'Connection timed out!'; } else { echo $res; } } ?> 

Это то, что я получил:

  <?php include 'php/connect.php' ; $metaData = mysql_query("SELECT * FROM `siteinfo`") or die("couln't find table :("); $displayData = mysql_fetch_assoc($metaData); $url = $displayData['status']; $xml = file_get_contents($url); if (!$xml) { $xml = simplexml_load_file('content/backUpXml.xml'); foreach ($xml->channel->item as $item) { echo '<a href="'.$item->guid.'" alt="'.$item->title.'" target="_blank">', substr($item->title, 0, 62), '...</a><br /><span>', substr($item->pubDate, 4, 18),'</span><br /><hr /><br />'; } } else { $myFile = "content/backUpXml.xml"; $fh = fopen($myFile, 'w') or die("can't open file"); $stringData = $xml; fwrite($fh, $stringData); fclose($fh); $xml = simplexml_load_file($url); foreach ($xml->channel->item as $item) { echo '<a href="'.$item->guid.'" alt="'.$item->title.'" target="_blank">', substr($item->title, 0, 62), '...</a><br /><span>', substr($item->pubDate, 4, 18),'</span><br /><hr /><br />'; } } ?>