Php 如果XML加载文件超时,我可以绕过它吗?或者可以';你不能装吗?

Php 如果XML加载文件超时,我可以绕过它吗?或者可以';你不能装吗?,php,xml,timeout,Php,Xml,Timeout,我正在读取一个XML文件,并使用新的simplexmlelement加载它 有时,由于XML文件位于远程服务器上,因此加载可能需要很长时间,有时,如果远程服务器关闭,则根本无法加载 最初我是这样加载XML的: $url = file_get_contents('PATH_TO_XML'); $xml = new SimpleXmlElement($url); 因此,我想提出一种方法,如果XML文件响应时间太长,或者根本无法加载,PHP将绕过它,加载网站的其余部分,并在网站上引用XML文件的任何

我正在读取一个XML文件,并使用
新的simplexmlelement
加载它

有时,由于XML文件位于远程服务器上,因此加载可能需要很长时间,有时,如果远程服务器关闭,则根本无法加载

最初我是这样加载XML的:

$url = file_get_contents('PATH_TO_XML');
$xml = new SimpleXmlElement($url);
因此,我想提出一种方法,如果XML文件响应时间太长,或者根本无法加载,PHP将绕过它,加载网站的其余部分,并在网站上引用XML文件的任何地方生成一条简单的错误消息

因此,我在网上阅读,并在代码中添加了以下内容:

$context = stream_context_create(array(
    'http' => array(
        'method' => 'GET',
        'timeout' => 10,
    )
));
$url = file_get_contents(PATH_TO_XML', false, $context);
$xml = new SimpleXmlElement($url);
但我的问题是,即使这样,我在WAMP环境中运行时仍会收到以下错误:

Warning: file_get_contents(http://www.inveroak.co.uk/readerimages/livepanel/91221.xml): failed to open stream: HTTP request failed! HTTP/1.1 503 Service Unavailable in C:\wamp\www\clairvoyant\extras\get-readers.php on line 10

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\wamp\www\clairvoyant\extras\get-readers.php on line 11

Exception: String could not be parsed as XML in C:\wamp\www\clairvoyant\extras\get-readers.php on line 11
get-readers.php#10:

get-readers.php#11:


有什么我遗漏的吗?我需要调整网站其他地方的参考点吗?

嗯,我想我已经找到了一个很好的方法

我走的方向是正确的,我确实需要在包含get-readers.php文件的站点的每个部分添加一个条件

因此,我所做的是将以下内容添加到get-readers.php中:

// create the context
$arContext['http']['timeout'] = 0;
$context = stream_context_create($arContext);

// fetch XML
$url = @file_get_contents('http://www.inveroak.co.uk/readerimages/livepanel/91221.xml', false, $context);
$xmlMsg = '';

if($url === false) { $xmlMsg = "
<div class='xmlError'>
    <span class='title'>Oh no, something's gone wrong!</span>
    <span>We're having trouble showing our available readers at the moment. This is usually only a temporary issue though, and we promise we are working on it!</span><br>
    <span>You can still book a reading by phoning one of our trained operators!</span>
    <div class='action'><div class='inside silver'><span>Pay by card</span>Call <span class='number'>".variable('local_no')."</span> and pay over the phone using a credit or debit card</div></div>
    <div class='action'><div class='inside green'><span>Pay by phone</span>Call <span class='number'>".variable('prem_no')."</span> and pay using your phone bill. It's quick and easy!</div></div>
    <span class='small'>0906 calls cost £1.53/min + network extras. <a href='/terms-conditions'>Full terms &amp; conditions</a></span>
</div>
"; } else { $xml = new SimpleXmlElement($url); } // If XML can't be loaded, show error message
//创建上下文
$arContext['http']['timeout']=0;
$context=stream\u context\u create($arContext);
//获取XML
$url=@file\u get\u contents('http://www.inveroak.co.uk/readerimages/livepanel/91221.xml“,假,$上下文);
$xmlMsg='';
如果($url==false){$xmlMsg=”
哦,不,出问题了!
目前,我们无法显示可用的读者。但这通常只是一个临时问题,我们保证正在努力解决!
您仍然可以通过致电我们训练有素的操作员来预订阅读资料! 通过cardCall.变量('local_no')支付,并使用信用卡或借记卡通过电话支付 通过电话支付“.variable('prem_no')”并使用您的电话账单进行支付。它既快捷又简单! 0906通话费用为每分钟1.53英镑+网络额外费用。 “;}否则{$xml=new simplexmlement($url);}//如果无法加载xml,则显示错误消息
然后在每个地方我都包含get-readers.php,就在包含之后是一个foreach,用于从XML内容中获取数组

我根据
IF($xml)
将其放入
IF
语句中。在这一行的正上方,我回显了
$xmlMsg
,以显示设置错误消息。(如果加载XML文件,则消息设置为
“”;

希望这对别人有帮助

$xml = new SimpleXmlElement($url);
// create the context
$arContext['http']['timeout'] = 0;
$context = stream_context_create($arContext);

// fetch XML
$url = @file_get_contents('http://www.inveroak.co.uk/readerimages/livepanel/91221.xml', false, $context);
$xmlMsg = '';

if($url === false) { $xmlMsg = "
<div class='xmlError'>
    <span class='title'>Oh no, something's gone wrong!</span>
    <span>We're having trouble showing our available readers at the moment. This is usually only a temporary issue though, and we promise we are working on it!</span><br>
    <span>You can still book a reading by phoning one of our trained operators!</span>
    <div class='action'><div class='inside silver'><span>Pay by card</span>Call <span class='number'>".variable('local_no')."</span> and pay over the phone using a credit or debit card</div></div>
    <div class='action'><div class='inside green'><span>Pay by phone</span>Call <span class='number'>".variable('prem_no')."</span> and pay using your phone bill. It's quick and easy!</div></div>
    <span class='small'>0906 calls cost £1.53/min + network extras. <a href='/terms-conditions'>Full terms &amp; conditions</a></span>
</div>
"; } else { $xml = new SimpleXmlElement($url); } // If XML can't be loaded, show error message