【问题标题】:Change die to not stop code from executing更改 die 以不停止代码执行
【发布时间】: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文件了。

标签: php exception die


【解决方案1】:

这将通过电子邮件向您发送错误

    <?php
    $to_email_address = webmaster@example.com

    // 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 mail($to_email_address,"GOOGOO hapened !","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]);

    ?>

【讨论】:

  • 嗨,麦克斯;是否有适当的方法来处理错误 - 通过删除 or 运算符 - 以使页面不会崩溃?
  • 当然最好有好的代码,但据我所知,他的问题是如何防止他的脚本在其他服务器离线时不会停止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
相关资源
最近更新 更多