我有一个使用DOMDocument的脚本。在某些环境中,它会失败,可能是由于某个模块未加载。我想做的是为使用此脚本的用户提供修复此问题的指导。
以下是一个最小化的脚本,用于重现此问题:
<?php
echo 'start!';
try {
$doc = new DOMDocument();
} catch (Exception $e) {
echo 'catched';
}
echo 'end';
?>
如果我在浏览器中打开(由我的当前服务器提供,涉及Nginx),我只能看到"start!"(返回码为500;如果我省略try..catch,输出相同)。所以问题不仅在于检测正确的模块是否已安装(我应该使用extension_loaded('dom')来检查吗?),而且在于try..catch似乎不起作用(我在输出中没有被捕获;在当前情况下,我使用的是PHP 7.4.3)。
您有关于如何正确处理这种情况的建议吗?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
当找不到一个类时,会引发一个错误。该类没有继承Exception,所以您的代码无法捕获它。
以下代码可以解决这个问题:
try { new DOMDocument(); } catch(Error $e) { echo 'DOMDocument not available'; }或者:
try { new DOMDocument(); } catch(Throwable $t) { echo 'DOMDocument not available'; }当然,您可以直接使用extension_loaded('dom')来检测扩展是否可用。
您可以使用class_exists()函数来测试类是否存在。例如:
if (!class_exists('DOMDocument')){ echo "Please install DOMDocument"; exit; }