URL: https://www.overclockers.at/coding-stuff/php_hilfe_200045/page_1 - zur Vollversion wechseln!
Hallo!
Ich bin gerade daran mein PHP-Wissen aufzufrissen und arbeite momentan an einem kleinen content grabber der mir den Inhalt dann in eine Datenbank speichern soll.
Konkret will ich von einem URL die Bilder und natürlich den Namen des Bildes abspeichern. Am besten sogar lokal oder/und in dem Verzeichnis des PHP-Files.
Also bisher hab ich diesen Code gebastelt...
Code: PHP<?php { $domnam = "http://www.eineseite.com/"; $replvar = "ProdID="; $url = file_get_contents("http://www.eineseite.com/Search/Default.aspx?SortBy=LatestRelease"); $erste_linie = strpos($url, $replvar); $zweite_linie = strpos($url, $replvar, $erste_linie+1); $dritte_linie = strpos($url, $replvar, $zweite_linie+1); $vierte_linie = strpos($url, $replvar, $dritte_linie+1); $funfte_linie = strpos($url, $replvar, $vierte_linie+1); $linkliste = substr($url, $erste_linie); $imgsooncom = str_ireplace("image-placeholder.gif","#", $linkliste); $sauber = str_ireplace("src=\"/", "src=\"".$domnam, $linkliste); echo strip_tags(iconv("UTF-8", "ISO-8859-1", $sauber), "<img><br>"); } ?>

Ich hab den Post ehrlich gesagt nur überflogen, weil ich gerade am Sprung bin, aber schau dir mal http://at.php.net/preg_split, http://at.php.net/preg_grep und Konsorten, http://at.php.net/manual/en/function.strstr.php und http://at.php.net/manual/en/function.explode.php an.
Ich glaube dein Problem könnte vor allem mit RegEx elegant zu lösen sein.
Wenn du mit lokal abspeichern meinst, dass du Files am HTTP-Client ablegen willst, so ist PHP der falsche Weg dafür. Files am Server abzulegen ist aber natürlich problemlos möglich.
Du holst dir den Code von der Seite und suchst nach einem <img>-Tag liest den Rest bist zum </img>-Tag und lädtst (ggf. Seitenurl +) Bildurl. Wenn du auf deinem "Lokalen" Rechner, wie du es nennst - einen Fileserver oder eine Datenbank einrichtest und ein entsprechendes Port-Forwarding einrichtest, spricht auch nix dagegen, die Bilder auf diesem Rechner zu speichern.
Ach ja, das erste_linie, zweite_linie wird warscheinlich ein wenig Fad, dazu gibts Schleifen 
Zitat von ObermotzDu holst dir den Code von der Seite und suchst nach einem <img>-Tag liest den Rest bist zum </img>-Tag [...]
Hätt ich noch nie gesehen und wär imho auch nicht html-konform..
Kommt auf die DTD an - aber das ist ziemlich egal, denn "in the wild" kommt das sehr wohl vor. <img> wird in der Regel nicht (HTML4 und darunter) bzw. implizit (XHTML1.0 und darueber) geschlossen. Aber das ist auch gar nicht weiter wichtig; eine einfache RegEx wie z. B. /<img.*?src=['"](.*?)['"]/ sollte das einzig wirklich Interessante, den URL zur Bilddatei naemlich, schon fetchen koennen.
Jede vernuenftige Programmiersprache - und vermutlich sogar PHP! - bietet allerdings Tokenizer/Parser fuer SGML/XML (und damit auch HTML und XHTML), mit der man das ganz einfach machen koennen sollte.
Also soll ich mir das mal mit RegExpresions anschaun, ob man sowas verwenden kann... Wär super wenn ich das irgendwie hinbekomm, dann spar ich mir nämlich so einen blöden grabber
Regular Expressions wollen auch gelernt sein 
Ich liebe das Thema (i..i..iiirroo ach jetzt fällt mir das Wort nicht mehr ein).
Hilfe gibts hier:
http://www.regular-expressions.info/tutorial.html
Gute IdeeZitat von COLOSSUSJede vernuenftige Programmiersprache - und vermutlich sogar PHP! - bietet allerdings Tokenizer/Parser fuer SGML/XML (und damit auch HTML und XHTML), mit der man das ganz einfach machen koennen sollte.

danke vielmals für die vielen antworten.
hoffentlich bin ich weit genug um diese dinge auch anwenden zu können..
Zitat von ObermotzHätt ich noch nie gesehen und wär imho auch nicht html-konform..

Was heisst das?Zitat von LizardkingonT

http://www.weberdev.com/get_example-1817.html
Bittesehr, ein bisschen modifiziert und du hast deine Lösung..
so, ist jetzt sehr quick n' dirty in wenigen minuten gepfuscht - gibt auch keine kontrolle, ob die gesuchte property innerhalb des tags vorkommt - bei <img> kann man aber mal davon ausgehen, dass ein src-wert angegeben ist 
die oben gepostete variante ist ev. eleganter - schneller wahrscheinlich nicht, da dort jedes Tag einzeln nochmal als array explodet wird - performance test wär mal interessant ..
hth
Code: PHP<? // zu durchsuchende Datei $file = "test.html"; // Tag Start $tagStart = '<img'; // Eigenschaft $property = 'src'; $imageTags = array(); $images = array(); // Datei einlesen $content = file_get_contents($file); $pointer = 0; // Start- und Endpositionen aller gewünschten Tags filtern while($pointer < strlen($content)) { $nextImageTag = stripos($content,$tagStart,$pointer); if($nextImageTag === false) { break; } $pointer = $nextImageTag + strlen($tagStart); $imageTags[] = $nextImageTag; } $pointer = 0; // Substrings der Properties filtern foreach($imageTags as $img) { $valueStart = stripos($content,$property,$img) + strlen($property) + 2; // Property unter doppeöten Hochkommas if(substr($content,$valueStart -1,1) == '"') { $valueEnd = stripos($content,'"',$valueStart); $nextImage = substr($content,$valueStart,($valueEnd - $valueStart)); } else { $valueEnd = stripos($content,"'",$valueStart); $nextImage = substr($content,$valueStart,($valueEnd - $valueStart)); } $images[] = $nextImage; } // Array $images nach Belieben weiterverarbeiten ?>
Hier ein Script basierend auf Regex.:
ich hoffe das is weitestgehend selbsterklärendCode: PHP$str = file_get_contents("http://www.overclockers.at"); # extract src-links from images $hits = array(); preg_match_all("/<img[^\>]+?src=\"(.*?)\".*?\/?\>/si", $str, $hits); $hits = array_unique($hits[1]); sort($hits); print_r($hits); # extract src-links from images, skip those that start with https? $hits = array(); preg_match_all("/<img[^\>]+?src=\"((?!http\:\/\/|https\:\/\/).*?)\".*?\/?\>/si", $str, $hits); $hits = array_unique($hits[1]); sort($hits); print_r($hits);


overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026