Ben html kodu görüntüleri ayıklamak ve benim web sunucusunda depolanan eğer doğrulamak nasıl

3 Cevap php

Ben bir yazı editörü üzerinde çalışıyorum, ben bütün temel görüntü özelliklerini almak istiyorsanız bunu yapmak için önce, html kodu üzerinde takılı tüm görüntülerden küçük oluşturmak istiyorsanız, bu yüzden

Örnek:

$mydomain = 'mysite.com';
$htmlcode = <<<EOD
<p>sample text</p>
<img src='/path/to/my/image.ext' width='120' height='90'  />
<hr />
<img src='html://www.mysite.com/some/ther/path/image.ext' /> <!-- no attributes -->
<hr />
<p>blah blah <img src="http://www.notmyserver.com/path/lorem-ipsum.ext" widht='120' height='90' /></p>
EOD;


function get_all_image_attributes($htmlcode){    
// some code... 
return $images; // array with image src (required), width (if has), heigth (if has)...
}

// then validate (I really need this part)    
$images   = get_all_image_attributes($htmlcode);

function verify($images,$mydomain){
// code...
return $valid_images;
}

Geçerli bir görüntü (. Jpg,. Jpeg,. Gif,. Png) olacaktır

src = "/ yol / resim.uzantısı"

src = "http://www.mysite.com/path/image.ext"

src = "http://www.mysite.com/some/path/image.ext"

src = "http://mysite.com/some/path/image.ext"

src = "www.mysite.com / yol / resim.uzantısı"

ps.

Küçük oluşturmak için kısmı zaten yapılır, merak etmeyin :)

updated

//I have done the following
$html = str_get_html($html);
$images = $html->find('img');
foreach ($images as $image){
 $filename = getfilename($image);
// I would like validate the file if is located in other path,
// or if it contains 'http://[www.]mysite.com/'
 if(file_exists(PUBLICPATH.'post_images/'.$filename))
  valid_imgs[] =  BASEURL.'post_images/'.$filename;
}

function getfilename($full_filename){
    $filename = substr( strrchr($full_filename , "/") ,1);	
    if(!$filename)
      $filename = $full_filename;	
    $filename = preg_replace("/^[.]*/","",$filename);
    return $filename;
}

3 Cevap

public function GetImagesFromHTML($strHTMLContent) {
    $HTMLDOM = new DOMDocument();
    $HTMLDOM->loadHTML($strHTMLContent);
    $arrContentImages = array();

    foreach ($HTMLDOM->getElementsByTagName("img") as $objImage) {
        $arrContentImages[] = $objImage->getAttribute("src");

    }

    return (!empty($arrContentImages)) ? $arrContentImages : false;

}

Ben XPath kullanabilirsiniz böylece SimpleXML içine DOM nesnesi dönüştürme hakkında, ben bunu denedim ve çalıştı ise tüm umurumda eğer hala sadece sunucu için daha fazla iş ekler sonucu iç içe nesnenin ayrıca işlenmesi gereken birkaç öneri gördüm HTML bir blok tüm görüntüler için src değerini alma, bu yüzden işi yapmak için yukarıdaki işlevini yazdı, XPath dönüşümü gerektirmez, sadece DOM çözümleyici inşa PHP5 kullanan ve size bir dizi geri verir gibi:

Array(
   [0] => value1.jpg
   [1] => value2.jpg
   [2] => value3.jpg
   [3] => res/upload.jpg
   [4] => value4.jpg
   [5] => value5.jpg
   [6] => value6.jpg
)

Işlev ,00071001052856445 saniye için toplam süre exection

Bir HTML çözümleyici kullanın. PHP Simple HTML DOM Parser ile, bu satırlar boyunca bir şey yapabilirsiniz:

$html = str_get_html($htmlcode);
foreach($html->find('img') as $element) {
    verify_image($element->src);
}

Böyle bir şey muhtemelen iyi olurdu:

#!/usr/bin/perl 
open(F, 'tmp.txt');
while(<F>) { 
   while (m/img[^>]* src="([^"]+)"/g) { 
      my $imgurl = $1;
      verify_image($imgurl);
   }
}