2017-06-20 2 views
0

je reçois des images à partir d'une URL spécifique. avec ce script, je suis capable de les afficher sur mon site web sans aucun problème. le site Web que je reçois les images a plus d'une (environ 200) pages dont j'ai besoin des images.code PHP en double bloc

Je ne veux pas copier le bloc de code PHP manuellement et remplissez le numéro de page à chaque fois de 1 à 200. Est-il possible de le faire dans un bloc? Comme: $ html = file_get_html ('http://example.com/page/1 ... à ... 200');

<?php 

require_once('simple_html_dom.php'); 
$html = file_get_html('http://example.com/page/1'); 
foreach($html->find('img') as $element) { 
    echo '<img src="'.$element->src.'"/>'; 
} 

$html = file_get_html('http://example.com/page/2'); 
foreach($html->find('img') as $element) { 
    echo '<img src="'.$element->src.'"/>'; 
} 

$html = file_get_html('http://example.com/page/3'); 
foreach($html->find('img') as $element) { 
    echo '<img src="'.$element->src.'"/>'; 
} 
?> 
+0

chose simple, utilisez une variable de compteur de boucle pour changer le numéro de la page –

Répondre

1

Vous pouvez utiliser une boucle comme ceci:

require_once('simple_html_dom.php'); 
for($i = 1; $i <= 200; $i++){ 
    $html = file_get_html('http://example.com/page/'.$i); 
    foreach($html->find('img') as $element) { 
     echo '<img src="'.$element->src.'"/>'; 
    } 
} 

Alors maintenant, vous avez un bloc de code, qui exécutera 200 fois.

Il modifie le numéro de page en ajoutant la valeur $i à l'URL, et chaque fois que la boucle termine un tour, la valeur $i devient $i + 1.

si vous souhaitez démarrer sur un numéro de page plus, il vous suffit de changer la valeur de $i = 1-$i = 2 ou tout autre numéro, et vous pouvez changer le 200 à ce que le maximum est pour votre cas.

+0

Mais cela ne marche pas faire une page 2 ..-> .. n – Martijn

+0

@Martijn dans son exemple il le fait la page 1 ..-> .. n c'est pourquoi je l'ai aussi gardé à cela. – FMashiro

1

D'abord, les stocker dans une base de données. Vous pouvez (/ devez) télécharger les images sur votre propre serveur, ou également stocker l'uri sur l'image. Vous pouvez utiliser du code comme FMashiro's pour cela, ou quelque chose de similaire, mais l'ouverture de 200 pages et l'analyse de leur HTML prend une éternité. Chaque page vue.

Et vous utilisez simplement le LIMIT functionallity dans les requêtes pour créer vous-même des pages.

Je recommande cette méthode de toute façon, car ce sera beaucoup plus rapide que l'analyse de HTML à chaque fois que quelqu'un ouvre cette page. Et vous aurez des options de tri et d'autres pro une base de données vous donne.

+0

Si cela est vrai, il peut rapidement devenir un gâchis si le site vous récupérez vos données de modifications du contenu de leurs pages régulièrement. – FMashiro

+0

Exactement aussi désordonné que votre réponse, pour aller chercher, comme je suggère votre code pour le faire;) Si l'OP va pour la version de téléchargement, tout ce qu'il faut, c'est un aller chercher. – Martijn

+0

Je voulais simplement dire que le stockage des données d'un autre site sur votre propre serveur est difficile à gérer, car le site dont vous téléchargez (peut-être illégalement) le contenu peut changer régulièrement de page. Donc garder une trace des dernières données sera juste incroyablement difficile si vous souhaitez garder votre serveur sain au moins. Vous aurez plein de doublons ou de données périmées. – FMashiro

1

Il existe de nombreuses solutions, sur d'entre eux: essayer de faire une boucle à partir de 1 à 200

for($i = 1; $i <= 200; $i++){ 
    $html = file_get_html('http://example.com/page/'.$i); 
    foreach($html->find('img') as $element) { 
     echo '<img src="'.$element->src.'"/>'; 
    } 
} 
+0

Chaque page, votre code ouvrira 200 pages et analyser tout ce html. Cela va prendre du temps, engloutir toutes vos ressources et certains de l'autre site, ce qui pourrait vous bloquer pour cela. – Martijn

+0

@Martijn absolument vous avez raison, c'est un travail horrible pour analyser ce nombre de pages, mais il a juste demandé un moyen de boucle sur eux, alors ma réponse est basée sur la question req. :) – Mohammad

+0

Haha en effet, mais je ne pense pas OP même si ce loin en avance – Martijn

1
<?php 
function SendHtml($httpline) { 
    $html = file_get_html($httpline); 
foreach($html->find('img') as $element) { 
    echo '<img src="'.$element->src.'"/>'; 
} 
} 


for ($x = 1; $x <= 200; $x++) { 
$httpline="http://example.com/page/"; 
$httpline.=$x; 
SendHtml($httpline); 
} 

?> 

boucle Just. Créer une fonction d'envoi et une boucle pour faire les appels. je vous recommande de lire tous les php docu dans https://www.w3schools.com/php/default.asp

+0

Bon exemple. Réutilisable aussi. – Kray

+0

Pourrait utiliser un formatage, et vous devriez probablement simplement ajouter la variable increment à la définition de '$ httpline' au lieu d'en faire une deuxième ligne et concaténer là pour la lisibilité. – FMashiro

+0

@FMashiro sans aucun doute vous avez raison, mais, pour une personne qui ne sait pas comment faire une boucle, j'essaie d'être un enseignant facile, c'est aussi la raison pour laquelle le lien vers w3schools =) –