如何使用' file_get_contents'保存多个图片立即使用xml标签

时间:2016-04-23 10:47:46

标签: php mysql xml image url

我很感激一些帮助。我正在尝试使用' file_get_contents'来保存xml Feed中的图像。但问题是,它现在只需要1张图像,输入的URL也是如此。我正在寻找一个代码,它可以在每次刷新Feed时自动保存Feed中的图像,但只保存新图像,而不是已存储的图像。此外,问题是,该链接位于' ContentItem'内。标签,不易提取

这是我的XML Feed代码:

      <xml>
     <channel><title></title>
     <link>http://www.yournewssite.com</link>
     <description>gossip</description>
     <item>
     <title>title of article</title>
     <link>http://yourwebsite.com/</link>
     <description><![CDATA[<img src=http://yourwebsite.com/i.php?k=d88d4e2b336966b5389837832 width=100 height=100>
    <BR>article content<BR>]]></description>
    <ContentItem Href="http://yourwebiste.com/i.php?k=d88d4e2b336966b538983783230051c7">
    <MediaType FormalName="Picture" />
    <MimeType FormalName="image/jpg" />
    <Property FormalName="caption" value="Nick Carter" />
    </ContentItem>
    </xml>

PHP代码:

   <?php       
   $doc = new DOMDocument();
   $doc->load('http://yourwebsite.com/clients/d51b83e5/index.xml');

   $xpath = new DOMXpath($doc);
   $nodeLists = $xpath->query ('//ContentItem[@Href]');

   $arrFeeds = array();
   foreach ($doc->getElementsByTagName('item') as $node) {
    $itemRSS = array (
    'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
    'ContentItem'=>$nodeLists->item(0)->getAttribute('Href'),
    );
    array_push($arrFeeds, $itemRSS);
    }


    echo file_get_contents("http://yourwebsite.com/clients/d51b83e5/index.xml");
    $url = '';
    $img = 'C:\xampp\htdocs\trial\images\image.jpg';
    file_put_contents($img, file_get_contents($url));
  ?>

我非常感谢你对此的帮助。提前致谢。

1 个答案:

答案 0 :(得分:0)

您检索<ContentItem Href>的代码有点扭曲,但对我来说似乎有效。

您可以通过以下方式简化它:

$nodeLists = $xpath->query ('//ContentItem[@Href]');
foreach( $nodeLists as $node )
{
    $itemRSS = array (
        'title'       => $node->parentNode->getElementsByTagName('title')->item(0)->nodeValue,
        'ContentItem' => $node->getAttribute('Href'),
    );
    /* Following syntax is equivalent to array_push() when you add only one item to array: */
    $arrFeeds[] = $itemRSS;
}

要仅检索新图像,我们可以帮助您进行猜测。如果URL中的图像名称是唯一的,您可以使用它来保存图片并检查已保存的文件。

在您的示例中,链接为:

http://yourwebiste.com/i.php?k=d88d4e2b336966b538983783230051c7

所以,使用此代码:

$url = parse_url( 'http://yourwebiste.com/i.php?k=d88d4e2b336966b538983783230051c7' );
parse_str( $url['query'], $query );

$query['k']中你有:

d88d4e2b336966b538983783230051c7

如果要将其用作唯一文件名,可以编写代码以这种方式保存图像:

$localPath = '/Your/Path/To/Image/Directory';
foreach( $arrFeeds as $feed )
{
    $url = parse_url( $feed['ContentItem'] );
    parse_str( $url['query'], $query );
    $localName = "$localPath/{$query['k']}.jpg";
    if( file_exists( $localName ) )
    {
        echo "Already downloaded: '$localName'".PHP_EOL;
    }
    else
    {
        $data = file_get_contents( $feed['ContentItem'] );
        if( ! $data )
        {
            echo "Error downloading '{$feed['ContentItem']}'".PHP_EOL;
        }
        else
        {
            if( ! file_put_contents( $localName, $data ) )
            {
                echo "Error saving '$localName'".PHP_EOL;
            }
            else
            {
                echo "'$localName' successful saved".PHP_EOL;
            }
        }
    }
}