Bonjour,
J'avais créé un script php afin de récupérer à l'aide d'un REGEX, des URL sur des sites distants. Les url des sites distants sont stockées dans ma base. Une fois les url récupérées sur les sites distants, je récupère les ip des serveurs correspondants aux url extraites.
Le problème est que php traite les données ligne par ligne. J'ai besoin maintenant de connections asynchrone pour traiter par paquet de 20 url à la fois...et je me tourne donc vers PERL. J'ai commencé à lire les tutos, mais je trouve que cela est difficile...
SCRIPT PHP:
Voici le début du script en perl:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 //Fixe le temps maximum d'exécution d'un script et court circuite parametre du serveur set_time_limit(0); $filename = "../dbconnect.php"; if (file_exists($filename)) include($filename); $SelectionDonnees = mysql_query("SELECT url FROM listeUrl") or die('Impossible de récupérer les données dans la base'.mysql_error()); if (mysql_num_rows($req) > 0) { // on fait une boucle qui va faire un tour pour chaque enregistrement while($data = mysql_fetch_array($req)) { $text = file_get_contents("'".$data['url']."'"); //On converti les caractères html < etc...en balise html $a = html_entity_decode($text); // extraction ip $pattern = preg_match_all( '#(<a>|<li>|value=")([a-z0-9]{0,}-?){1,}(\.[a-z0-9]{1,}){1,4}#i', $a, $match2 ); if ($pattern) { foreach($match2[0] as $resultat) { list($value, $url) = split('[">]', $resultat); //$ip = gethostbyname($url); echo "Url extraite :$url et IP= $ip<br>"; $insertBase = mysql_real_escape_string(mysql_query("INSERT IGNORE INTO listeIp (Ipadress, port, url, InsertDate) VALUES ('$ip', '$port', '$url', now())")) or die ('Erreur SQL...veuillez contacter l\'administrateur'.mysql_error()); } } } }
Ce début de script est il déjà juste pour le moment?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #!/usr/bin/perl -w use strict; use warnings; use DBI; use LWP::Simple; use URI::URL; #Params================= my $urllimit = '20'; #nombre d'url à tester my $sqlhost="localhost"; # mysql server my $sqluser = ""; #pseudo mysql my $sqlpass = ""; #mot de passe root? my $sqldb = ""; #ip adress db my $sqltable = "listeUrl"; #Fin params============= $dbh = DBI->connect("DBI:mysql:database=$sqldb:host=$sqlhost",$sqluser,$sqlpass) or die ("Impossible de se connecter à la base"); $sel = $dbh->prepare("select url FROM listeUrl"); $sel->execute() or die "Impossible de récupérer les URL de la base. : $DBI::errstr"; while(($jenesaispas) $sel->fetchrow_array){ { my $url = url('$jenesaispas') ; $contenu = get($url); } $sel->finish; $dbh->disconnect();
Merci
Partager