【发布时间】:2020-04-04 14:33:49
【问题描述】:
在下面的代码中,当 Kiyoh 无法访问时,代码将停止执行。这对生产不利。所以我想知道最好的方法是替换 die 函数,以使内容可以进一步执行——即使 Kiyoh 无法访问——。
代码如下:
<?php
// Get KiyOh rating
$readdir = $_SERVER['DOCUMENT_ROOT'] . '/kiyoh/';
$file = 'kiyohdata.dat';
// Open the file to get existing content
$kiyohdata = file_get_contents($readdir . $file);
if( $kiyohdata === false ) { // NOT CACHED
$xml = simplexml_load_file('https://www.kiyoh.nl/widgetfeed.php?company=YYYYY') or die("Error: Cannot create object");
$kiyohdata = explode(",", $xml->channel->description);
if(!empty($kiyohdata)) {
file_put_contents($readdir . $file, serialize($kiyohdata));
}
} else { // IS CACHED
$kiyohdata = unserialize($kiyohdata);
}
$cijfer = str_replace('Average score ', '', $kiyohdata[0]);
$cijfer = str_replace('.', ',', $cijfer);
$aantal = str_replace(' Total reviews ', '', $kiyohdata[2]);
?>
我尝试设置异常:throw new Exception("Kiyoh is not available at the moment");,但页面还是崩溃了(Magento 1.9.4.3 网上商店)。
【问题讨论】:
-
也许只添加一个
if (simplexml_load_file(your_file)) { $xml = simplexml_load_file(your_file); } else { /* print or log your error */ } -
@Mickaël,您的代码将加载 xml 文件两次,最好像 OP 那样存储到变量中,然后检查变量。
-
你可以把任何函数放在那里而不是“死”我使用
mail()函数。或使用file_put_contents编写“日志文件”,或者如果您不关心,则将完整的部分取出,例如以 or 开头。 -
@SyedHussim 好点,所以也许只有一些
file_exists可以完成这项工作 -
@Mickaël,file_exists,无法检查远程文件。我相信你的回答是正确的。我就是这个意思。
$xml = simplexml_load_file(...); if($xml){ ....},这样你就不用两次解析xml文件了。