首页  >  问答  >  正文

如何正确检查PHP是否正确配置以使用DOMDocument?

<p>我有一个使用DOMDocument的脚本。在某些环境中,它会失败,可能是由于某个模块未加载。我想做的是为使用此脚本的用户提供修复此问题的指导。</p><p>以下是一个最小化的脚本,用于重现此问题:</p><p><br /></p> <pre class="brush:php;toolbar:false;"><?php echo 'start!'; try { $doc = new DOMDocument(); } catch (Exception $e) { echo 'catched'; } echo 'end'; ?></pre> <p>如果我在浏览器中打开(由我的当前服务器提供,涉及Nginx),我只能看到"start!"(返回码为500;如果我省略try..catch,输出相同)。所以问题不仅在于检测正确的模块是否已安装(我应该使用extension_loaded('dom')来检查吗?),而且在于try..catch似乎不起作用(我在输出中没有被捕获;在当前情况下,我使用的是PHP 7.4.3)。<br /><br />您有关于如何正确处理这种情况的建议吗?</p><p><br /></p>
P粉898049562P粉898049562420 天前432

全部回复(2)我来回复

  • P粉973899567

    P粉9738995672023-07-31 16:50:19

    当找不到一个类时,会引发一个错误。该类没有继承Exception,所以您的代码无法捕获它。

    以下代码可以解决这个问题:


    try
    {
        new DOMDocument();
    }
    catch(Error $e)
    {
        echo 'DOMDocument not available';
    }

    或者:

    try
    {
        new DOMDocument();
    }
    catch(Throwable $t)
    {
        echo 'DOMDocument not available';
    }

    当然,您可以直接使用extension_loaded('dom')来检测扩展是否可用。

    回复
    0
  • P粉546257913

    P粉5462579132023-07-31 16:03:24

    您可以使用class_exists()函数来测试类是否存在。例如:


    if (!class_exists('DOMDocument')){
       echo "Please install DOMDocument";
       exit;
    }

    回复
    0
  • 取消回复