我每天通过一些xml文件获取一些产品。
有时有4个文件,有时最多有10个。
我想在一个循环中使用来自URL的SimpleXMLElement来处理它们。
以下是我的尝试:
for ($i = 1; $i <= 10; $i++) {
try {
$SimpleXML = new \MFF_System\SimpleXMLExtended($file, LIBXML_NOCDATA, true);
} catch (Exception $e) {
var_dump($e);
}
}
但不幸的是我发出了警告:
SimpleXMLElement :: __ construct():http://example.com/file_6.xml:42: 解析器错误:输入不正确UTF-8,表示编码!字节: 0xE1 0x6D 0x6F 0x67
在这种情况下,只有5个文件,所以当我试图获得第6个时,那就是从网站上获取主页面。我也试图压制警告但没有成功。
$SimpleXML = @new \MFF_System\SimpleXMLExtended($file, LIBXML_NOCDATA, true);
有没有办法处理这些错误以避免它们停止我的脚本?
修改
我无法使用file_get_contents
,因为在这种情况下,我遇到了内存限制错误,我无法增加内存。这些是如此大的文件,其中一个是1GB。猜猜是什么,这些文件的开发者将产品图像二进制文件放入文件中:((((((((我不能和他说话)。
EDIT2
在php文档中(here)我读过$var = @new some_class();
应该有用。
如果我正在使用:
$SimpleXML = @new \MFF_System\SimpleXMLExtended($file, LIBXML_NOCDATA, true);
我明白了:
异常:在第19行的........ \ Parser.php中无法将字符串解析为XML
我想,是的,它会好得多,因为这是Expection
。如果我用try/catch
换行,我就会得到同样的错误。
try {
$SimpleXML = @new \MFF_System\SimpleXMLExtended($file, LIBXML_NOCDATA, true);
} catch (Exception $e) {
die('Exception');
}
\MFF_System\SimpleXMLExtended
只是扩展了SimpleXMLElement
类,并使用方法添加CDATA
,没什么特别的。