是否有可能捕获simplexml文件错误?我连接到一个有时会失败的web服务,如果它返回一些http错误或类似的东西,我需要让系统跳过一个文件。PHP simplexml_load_file - 捕获文件错误
回答
使用@
只是普通的脏。
如果你看一下说明书,有一个选项参数:
SimpleXMLElement simplexml_load_file (string $filename [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false ]]]])
所有选项列表可以在这里找到:http://www.php.net/manual/en/libxml.constants.php
这是为了抑制警告的正确方法:
$xml = simplexml_load_file('file.xml', 'SimpleXMLElement', LIBXML_NOWARNING);
你在谈论两件不同的事情。 HTTP错误与XML文件是否有效无关,因此您正在查看两个单独的错误处理区域。
您可以利用libxml_use_internal_errors()来抑制任何XML解析错误,然后在每次解析操作后手动检查它们(使用libxml_get_errors())。我建议这样做,因为你的脚本不会产生大量的E_WARNING
消息,但是你仍然会发现无效的XML文件。
至于HTTP错误,处理这些将取决于您如何连接到Web服务和检索数据。
辉煌感谢 – 2013-09-09 03:14:30
您可以设置在PHP中的错误处理程序在任何PHP错误抛出异常:(例如进一步的文档和这里找到:PHP.net)
function exception_error_handler($errno, $errstr, $errfile, $errline) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
我不想中断系统在错误的情况下,只需跳过该功能并继续正常进程 – yoda 2009-12-16 21:42:08
好了,按照定义,异常不会中止执行。如果你将你的simplexml_load_file()包装在try-catch块中,你可以拦截任何错误。 – 2009-12-16 21:44:27
上的错误,你使用simplexml_load_file应该返回false。
所以做somethign像这样简单:
$xml = @simplexml_load_file('myfile');
if (!$xml) {
echo "Uh oh's, we have an error!";
}
是检测错误的一种方式。
差不多,但是你忘了在simplexml上压制错误,就像@ pygorex1的例子。仍然,+1 – yoda 2009-12-17 11:56:34
谢谢,良好的电话 - 我编辑了这个 – 2009-12-19 02:06:41
如果当WebService失败,您可以使用错误supression运营商不感兴趣,错误报告或记录:
$xml= @simplexml_load_file('http://tri.ad/test.xml');
if ($xml) {
// Do some stuff . . .
}
但是,这是一个简单的黑客。一个更强大的解决方案是加载XML文件cURL,记录任何失败的请求,解析返回的simplexml_load_string
任何XML文档,记录任何XML分析错误,然后用有效的XML做一些东西。
if (!$xml=simplexml_load_file('./samplexml.xml')) {
trigger_error('Error reading XML file',E_USER_ERROR);
}
foreach ($xml as $syn) {
$candelete = $syn->candelete;
$forpayroll = $syn->forpayroll;
$name = $syn->name;
$sql = "INSERT INTO vtiger (candelete, forpayroll, name) VALUES('$candelete','$forpayroll','$name')";
$query = mysql_query($sql);
}
foreach($ xml as $ syn) { $ candelete = $ syn-> candelete; $ forpayroll = $ syn-> forpayroll; $ name = $ syn-> name; $ sql =“INSERT INTO vtiger(candelete,forpayroll,name)VALUES('$ candelete','$ forpayroll','$ name')”; $ query = mysql_query($ sql); – 2014-07-29 09:55:59
XML文件:samplexml.xml <?XML版本= “1.0”?>
另一个选择是使用libxml_use_internal_errors()
函数来捕获er RORS。然后可以使用libxml_get_errors()
函数检索错误。如果你想检查具体的错误是什么,这将允许你循环它们。如果您确实使用了这种方法,那么您需要确保在完成这些操作后清除内存中的错误,以免浪费内存空间。
下面是一个例子:
<?php
//Store errors in memory rather than outputting them
libxml_use_internal_errors(true);
$xml = simplexml_load_file('myfile.xml');
if (!$xml){
//Exit because we can't process a broken file
exit;
}
//Important to clear the error buffer
libxml_clear_errors();
//Display your xml code
print_r($xml);
另一个例子实际上是利用错误的,我们捕捉到:
<?php
//Store errors in memory rather than outputting them
libxml_use_internal_errors(true);
$xml = simplexml_load_file('myfile.xml');
if (!$xml){
echo "Your script is not valid due to the following errors:\n";
//Process error messages
foreach(libxml_get_errors() as $error){
echo "$error";
}
//Exit because we can't process a broken file
exit;
}
//Important to clear the error buffer
libxml_clear_errors();
//Display your xml code
print_r($xml);
- 1. PHP simplexml_load_file - 错误处理
- 2. 错误使用simplexml_load_file()php
- 3. simplexml_load_file()错误
- 4. PHP和Postgres:捕获错误?
- 5. simplexml_load_file的语法错误
- 6. “simplexml_load_file”中的错误处理
- 7. 捕获错误事件
- 8. PHP使用simplexml_load_file赶上403
- 9. 捕获错误
- 10. Pdo错误捕获尝试/捕获
- 11. 如何捕获死亡的PHP脚本错误(Perl有eval)?
- 12. PHP使用simplexml_load_file
- 13. PHP和使用simplexml_load_file()
- 14. 错误捕获错误
- 15. 在PHP中捕获postgres错误
- 16. 使用PHP eval捕获某些错误()
- 17. PHP Redis错误:未捕获异常'RedisException'
- 18. 在PHP中可捕获的错误?
- 19. PHP捕获一个SimpleXMLElement解析错误
- 20. 如何捕获PHP mysqli_stmt错误?
- 21. php尝试捕获错误报告
- 22. PHP/MongoDB错误:未捕获异常'MongoCursorException'
- 23. PHP的致命错误未捕获PDOException
- 24. PHP simpleImage类捕获异常错误
- 25. PHP - curl还是simplexml_load_file?
- 26. simplexml_load_file上的解析器错误()
- 27. angularJS未捕获的错误
- 28. VB错误捕获
- 29. 捕获javascript错误
- 30. 捕获错误3
感谢您的更新,我相信列出的一些选项在2009年不活跃,但不知道。无论如何,我将其标记为正确的答案,因为这是目前最好的答案。 – yoda 2013-04-17 13:33:35
试过。不会捕捉或禁止所有警告...同意@也很简单肮脏 – PALEN 2016-03-02 17:41:57