PHP-如果表达式集中没有出现错误/警告,请执行某些操作
我有一个页面,基本上是用来连接一堆xml文件的,它将充当粘合剂,将它们绑定在一起。合并的xml文件很可能格式不好,因为用户有权访问 如果在一组特定的代码中没有抛出警告/错误,我将尝试重写一个活动文件 到目前为止,我已经:PHP-如果表达式集中没有出现错误/警告,请执行某些操作,php,xml,Php,Xml,我有一个页面,基本上是用来连接一堆xml文件的,它将充当粘合剂,将它们绑定在一起。合并的xml文件很可能格式不好,因为用户有权访问 如果在一组特定的代码中没有抛出警告/错误,我将尝试重写一个活动文件 到目前为止,我已经: try { $first = simplexml_load_file( 'file.xml' ); } catch ( Exception $e ) { $write = false; } if ( !$write ) { // write to live
try {
$first = simplexml_load_file( 'file.xml' );
} catch ( Exception $e ) {
$write = false;
}
if ( !$write ) {
// write to live file.
}
这显然会捕获错误异常,但有时函数调用会返回警告而不是错误本身,我可以使用什么来捕获错误,基本上只有在try块中没有抛出警告和错误时才进行写入
引发警告的示例:
Warning: simplexml_load_file() parser error : Start tag expected, '<'
警告:simplexml_load_file()解析器错误:应为开始标记,“在这种情况下会想到一些事情。如果始终启用警告(对于生产服务器来说这不是一个好主意),则始终可以使用输出缓冲功能检查是否发送了任何文本
ob_start();
... //code
$str = ob_get_contents();
if (! empty($string))
{
// a warning was thrown.
}
更好的方法是查看警告,并根据需要对其执行任何操作:
set_error_handler("my_warning_handler", E_WARNING);
function my_warning_handler($errno, $errstr) {
// do something
}
在这种情况下,我想到了几件事。如果始终启用警告(对于生产服务器来说这不是一个好主意),则始终可以使用输出缓冲功能检查是否发送了任何文本
ob_start();
... //code
$str = ob_get_contents();
if (! empty($string))
{
// a warning was thrown.
}
更好的方法是查看警告,并根据需要对其执行任何操作:
set_error_handler("my_warning_handler", E_WARNING);
function my_warning_handler($errno, $errstr) {
// do something
}
只需查找读取失败的其他“症状”。从simplexml\u load\u文件
手动输入:
返回值
返回SimpleXMLElement类的对象,其属性包含XML文档中保存的数据在出现错误时,它将返回FALSE。
所以,像这样使用它:
$first = simplexml_load_file( 'file.xml' );
if ($first == false) {
echo "File couldn't be loaded";
exit(); // abort normal program execution, redirect or what have you
}
// continue as normal
如果出现错误,几乎所有函数都会返回某种类型的false
。除了非常特殊的情况外,您不应该使用手动“错误解析”。这不是其中之一。只需查找读取失败的其他“症状”。从simplexml\u load\u文件
手动输入:
返回值
返回SimpleXMLElement类的对象,其属性包含XML文档中保存的数据在出现错误时,它将返回FALSE。
所以,像这样使用它:
$first = simplexml_load_file( 'file.xml' );
if ($first == false) {
echo "File couldn't be loaded";
exit(); // abort normal program execution, redirect or what have you
}
// continue as normal
如果出现错误,几乎所有函数都会返回某种类型的false
。除了非常特殊的情况外,您不应该使用手动“错误解析”。这不是其中之一。设置一个错误处理程序,并从那里引发异常。然后像往常一样捕获它们。设置一个错误处理程序,并从那里引发异常。然后像往常一样抓住它们。是的,但是如果你有很多实例,这会变得很乏味,不是吗?即使将所有检查组合到一个表达式中。我也不担心性能问题。你是说如果($var==false)
比处理异常或输出缓冲和字符串解析更乏味吗?如果函数返回一个false
,这是迄今为止最简单的方法。如果多次执行此操作,请将所有结果收集到一个数组中,并在末尾检查数组中是否有false
项。或者在循环中进行。这只是一系列表达式,而不仅仅是为强制为true的某个对象分配一个简单的标识符,我在循环它,我在做很多操作,这就是为什么我不想进行10-15次左右的检查。请发布更多的代码,以及为什么你认为它很难集成。是的,但是如果你有很多实例,这会变得很乏味,不是吗?即使将所有检查组合到一个表达式中。我也不担心性能问题。你是说如果($var==false)
比处理异常或输出缓冲和字符串解析更乏味吗?如果函数返回一个false
,这是迄今为止最简单的方法。如果多次执行此操作,请将所有结果收集到一个数组中,并在末尾检查数组中是否有false
项。或者在循环中进行。这只是一系列表达式,而不仅仅是给强制为真的东西分配一个简单的标识符,我在循环它,我在做很多操作,这就是为什么我不想进行10-15次左右的检查。请发布更多的代码,以及为什么你认为它很难集成。