Hallo,

Ik wil graag code ophalen uit een externe pagina. Ik heb daar toestemming voor. De pagina toont een aantal afbeeldingen maar die worden niet gecached op die server terwijl ik dat wel wil. Het idee is dan ook dat ik die code ophaal, inclusief die afbeeldingen (die kopieer ik dan naar mijn server) en die worden vervolgens getoond.

Het ophalen van de pagina gaat ondertussen. Daar gebruik ik deze code voor:
<?php
header("Cache-Control: max-age=172800");
$filename = '[externe_url]';
$html = file_get_contents($filename);
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML($html);
$body = "";
foreach($dom->getElementsByTagName("body")->item(0)->childNodes as $child) {
$body .= $dom->saveHTML($child);
}
?>

Dat gaat prima. Ik krijg netjes de body van die pagina die ik in mijn eigen body kan stoppen. Ik wil dus ook graag die regels met de afbeeldingen los ophalen, die afbeeldingen opslaan en vervolgens de 'nieuwe' afbeelding tonen. Verder wordt de afbeelding gelinkt naar een pagina die ik niet op de server heb staan. Daar moet dus nog een http://www.website voor. Hoe kan ik dat doen? Ik gebruik er nu geen database bij maar eventueel kan dat wel. Het is de bedoeling dat ik het script dan ongeveer 1x per dag ga draaien met cronjob.

Alvast bedankt voor jullie antwoorden!
zelf zou ik zoeken naar bijvoorbeeld src="...." binnen een <img > tag.

met preg_math_all() en dan rekening houdend met de mogelijkheid dat de src-propertie niet als eerste staat, en dat er enters tussen staan:

<img width="100"
src="/plaatje.jpg" height=99
/>

en dat er eventueel ook geen " staat waar je die zou kunnen verwachten (zoals bij 99)

MAar gaat het alleen om plaatjes?
Aangezien hij het al in een DOMdocument object laadt lijkt het mij niet nodig om met een regex te gaan werken. In dat geval kan je gewoon alle img tags eruit filteren (via getElementsByTagName) en door die lijst lopen en van elk element het src attribuut ophalen (via getAttribute).

Daarna moet je inderdaad rekening houden met de relatieve links. Als inderdaad geen volledige urls worden gegeven zal je moeten kijken of er een base url is gedefinieerd (zoek naar een base tag in de head), of anders zal je het pad van de url die je zojuist hebt ingeladen moeten gebruiken.

Reageren