如何验证外部服务器上的PHP是否存在XML标记

时间:2017-05-30 18:08:36

标签: php xml curl

请告诉我的英语。

我正在为我的网站开发一种sitemap.xml系统,以便将产品从外部网站包含到我的数据库中,就像谷歌用他的" Spiders",我刚开发了这整个脚本验证特定的sitemap.xml是否包含所有必需的标记,并且它有效:如果缺少任何标记,脚本将返回错误,但是如果所有"产品"具有必需的标记,脚本返回成功消息。

但我只有一个问题:如果xml外部文件有任何错误,如缺少"关闭"标签,脚本停止工作并返回错误。

我需要验证外部xml文件是否包含任何错误,然后继续执行我编写的其余代码,如果结果为" NO"。

这是我开发的脚本:

<?
$sitemap = htmlspecialchars(addslashes(stripslashes(strip_tags(trim($_POST['sitemap'])))));
$ref = htmlspecialchars(addslashes(stripslashes(strip_tags(trim($_POST['ver_id'])))));
    error_reporting(E_ALL);
        ini_set('display_errors', '1');

        session_start();

        include dirname(dirname(__FILE__))."/connectdb.php";
    $query = "SELECT * FROM website WHERE `ver_id` = '$ref'";
    $result = $mysqli->query($query);
    /* array asociativo */
    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    $url = $row['url'];
    $long_url = $url.'/'.$sitemap;
?>
<?php
$total = 0;
$xml=simplexml_load_file("$long_url") or die("Error: Cannot create object");
$count = $xml->count();
foreach($xml->children() as $producto) { 
    $id = $producto->id;
    $titulo = $producto->titulo; 
    $descripcion = $producto->descripcion;
    $fotografia = $producto->fotografia; 
    $precio = $producto->precio; 
    $costo = $producto->costo; 
    $horario = $producto->horario; 
    $tiempo = $producto->tiempo; 
    $cobertura = $producto->cobertura; 
    $keywords = $producto->keywords; 
    $destacar = $producto->destacar; 
    $delivery = $producto->delivery;

    if (!empty($id) && !empty($titulo) && !empty($descripcion) && !empty($fotografia) && !empty($precio) && !empty($costo) && !empty($horario) && !empty($tiempo) && !empty($cobertura) && !empty($keywords) && !empty($destacar) && !empty($delivery)) {
        $total = $total + 1; } else { $total = $total - 1; }        
}       
        if($total < $count){ header("Location:/user/sitio.php?id=$ref&mensaje=1"); } else 
            if($total == $count){   
            $query = "UPDATE website SET sitemap='$sitemap',sitemap_status='active' WHERE ver_id='$ref'";
            $result = $mysqli->query($query);
            header("Location:/user/sitio.php?id=$ref&mensaje=2");
            }
?>

1 个答案:

答案 0 :(得分:0)

用这个简单的脚本解决了!

<?
$dom = new DOMDocument;
$dom->Load($long_url);
if ($dom->validate()) {
    echo "Valid File";
} else { echo "Invalid File"; }
?>

感谢所有人。

相关问题