Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-如果表达式集中没有出现错误/警告,请执行某些操作_Php_Xml - Fatal编程技术网

PHP-如果表达式集中没有出现错误/警告,请执行某些操作

PHP-如果表达式集中没有出现错误/警告,请执行某些操作,php,xml,Php,Xml,我有一个页面,基本上是用来连接一堆xml文件的,它将充当粘合剂,将它们绑定在一起。合并的xml文件很可能格式不好,因为用户有权访问 如果在一组特定的代码中没有抛出警告/错误,我将尝试重写一个活动文件 到目前为止,我已经: try { $first = simplexml_load_file( 'file.xml' ); } catch ( Exception $e ) { $write = false; } if ( !$write ) { // write to live

我有一个页面,基本上是用来连接一堆xml文件的,它将充当粘合剂,将它们绑定在一起。合并的xml文件很可能格式不好,因为用户有权访问

如果在一组特定的代码中没有抛出警告/错误,我将尝试重写一个活动文件

到目前为止,我已经:

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次左右的检查。请发布更多的代码,以及为什么你认为它很难集成。