[PHP] Optimiser mon bout de code?

reaverlost Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   -  
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   -
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 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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   Statut Membre Dernière intervention   21
 
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 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
une boucle for
0