[PHP] Optimiser mon bout de code?

Fermé
reaverlost Messages postés 150 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 14 mai 2018 - 7 févr. 2014 à 12:41
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 - 7 févr. 2014 à 20:41
Bonjour,

J'ai une page qui contient une liste de 396 liens d'imprimantes.

En cliquant sur ces liens, on accède aux détails de l'imprimante (nom, ville, adresse IP...)

Je dois récupérer le code source de la première page afin de récupérer le nom des imprimante, puis récupérer le code source du détail de l'imprimante pour récupérer son IP.

Jusque la mon code fonctionne.

Mais je dois faire un file_get_contents 396 fois, ce qui me donne un temps d'attente beaucoup trop long, et fatalement une fatal error.

M'est-il possible d'optimiser mon code? Ou y'a t'il une autre façon de faire?

Voici mon code :

$nb = 0;

$link = array ();

set_time_limit (10);

$var =  file_get_contents('http://wsdscer128d4.sddc:10080/cgi-bin/rsdadmin/printers.cgi');

preg_match_all ('#<a href="(.+)" target="_blank">(.+)</a>#i', $var, $liens);

foreach ($liens[0] as $complet)
{
	$texte = $liens[2][$nb];
	
	if ($texte == "*")
	{
		$nb++;
	}
	else
	{
		$link[$nb] = 'http://wsdscer128d4.sddc:10080/cgi-bin/rsdadmin/printers.cgi?action=upd&name='.$texte;
		
		$nb++;
	}
}

$nbr = 0;

foreach ($link as $imp)
{
	if ($to = file_get_contents ($imp))
	{
		preg_match_all ('#<input type="text" name="Printer_Name" value="(.+)" size="10" readonly class="ro"#i', $to, $nom_imprimante);
		preg_match_all ('#<input type="text" name="Description" value="(.+)" size="(.+)" >#i', $to, $description);
		preg_match_all ('#<input type="text" name="Status" value="(.+)" size="5" readonly class="ro">#i', $to, $status);
		preg_match_all ('#<input type="text" name="Destination_URI" value="socketapi://(.+)" size="31" >#i', $to, $lien);
		
		foreach ($nom_imprimante[0] as $final)
		{
			$nom = $nom_imprimante[1][$nbr].'<br />';
			echo 'Imprimante : <strong>'.$nom.'</strong>';
		}
		
		foreach ($description[0] as $final2)
		{
			$desc = $description[1][$nbr].'<br />';
			echo $desc;
		}
		
		foreach ($status[0] as $final3)
		{
			$stat = $status[1][$nbr].'<br />';
			echo $stat;
		}
		
		foreach ($lien[0] as $final4)
		{
			$ip = $lien[1][$nbr].'<br /><br />';
			echo $ip;
		}
		
		// echo $nom.' '.$desc.' '.$stat.' '.$ip;
	}
}


Merci à vous :)

A voir également:

2 réponses

mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
7 févr. 2014 à 15:02
Bonjour,

Concernant: "Mais je dois faire un file_get_contents 396 fois, ce qui me donne un temps d'attente beaucoup trop long, et fatalement une fatal error. "

OUI

Simplement en créant une table en base de données,

puis en mettant le résultat du file_get_contents avec une date de création

faites ça par paquets de 10 ou 20....

Exécutez le script une trentaine de fois jusqu'à ce que vous ayez chargé toute la base....

Ensuite, plus besoin de faire file_get_contents vu que vous avez le résultat en table....

Si les paramètres d'une imprimante change, vous refaites un file_get_contents et mettez à jour les données en table de cette imprimante....

moi c'est comme ça que je vous les choses

A+
0
reaverlost Messages postés 150 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 14 mai 2018 21
7 févr. 2014 à 15:09
Salut, merci de la réponse.

Comment je fais pour lancer la file_get_contents par petits paquets de 20?
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
7 févr. 2014 à 20:41
une boucle for
0