【发布时间】:2013-12-03 21:45:23
【问题描述】:
我正在尝试确保上传的文件是有效的 gpx 文件,并尝试了两种不同的检查(针对 xml),因为 GPX 是 xml(某种)。
第一次检查拒绝一个有效文件,并带有消息 no DTD found。
$dom = new DOMDocument;
$dom->Load($_FILES["gps"]["tmp_name"]);
if ($dom->validate()) {
}
else {
echo '<script>alert("Not a valid GPS file!");</script>';
exit();
}
第二次检查不会拒绝 jpg 或 pdf 等无效文件。
$xmlcontents = XMLReader::open($_FILES["gps"]["tmp_name"]);
$xmlcontents->setParserProperty(XMLReader::VALIDATE, true);
if($xmlcontents->isValid()) {
}
else {
echo '<script>alert("Not a valid GPS file!");</script>';
exit();
}
我做错了什么?!
【问题讨论】:
-
也许你可以用这个:topografix.com/gpx_validation.asp
-
有效的 xml 和格式不一样。 “有效” xml 仅表示文档符合 XML 要求。它没有说明 xml 的内容。格式良好意味着它的有效 XML AND 满足特定 DTD 的要求。
<foo><bar /></foo>是有效的 xml,但如果您针对(例如)X-HTML DTD 验证它,它的格式将不正确。 -
@LajosVeres 谢谢,但我无法在我的网站空间上安装任何东西。
-
@MarcB 谢谢!我只想检查文件是否是“真正的”XML,而不是可疑的东西。当然,除了扩展检查。
-
->isValid()仅检查 xml 有效性。->validate()期望 DTD 检查格式正确,并且您的系统不能有 GPX dtd 可用于检查。