IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

crawler en php/curl


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut crawler en php/curl
    Bonjour,

    J'ai un petit soucis, j'ai un robot d'indexation que j'ai codé en php/curl. Pour ne pas perdre de temps, et relancer le robot sur la prochaine url dés qu'il a terminé l'actuel j'ai ajouté en fin de code une requête curl qui boucle sur le fichier du robot.

    Problème, malgré que j'ai désactivé la récupération du contenu de la page, le premier lancement du script du robot attends le résultat de la requête curl sur lui même et ainsi de suite et on fini sur une erreur 500 ce qui a pour effet de me laisser de plus en plus de connexion mysql ouvertes et ça fini par poser des problèmes.

    Deuxième point, moins grave, les logs serveur m'affichent une erreur 401 malgré que la requête aboutie bien.

    Le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $http_auth_ident = "login:mdp";
    $c = curl_init();
    curl_setopt($c, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    curl_setopt($c, CURLOPT_USERPWD, $http_auth_ident); 
    curl_setopt($c, CURLOPT_URL, "urlducrawler");
    curl_exec($c);                
    curl_close($c);
    Merci d'avance de votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    attends le résultat de la requête curl sur lui même
    Je n'ai pas compris cette phrase.

    En tout cas, je ne sais pas comment tu as fait ton code (puisque tu ne l'as pas dit) mais un script PHP attend forcemment la fin de l'étape précédente pour avancer. Si tu veux lancer plusieurs actions sans attendre, il faut t'interesser soit au multithread soit lancer de nouvelles instances de php dans ton script.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    Je vais essayer de faire simple.

    Disons que mon script s'appelle crawl.php

    crawl.php se compose ainsi :

    #recherche en BDD de la page à crawler
    #crawl de cette page via php/curl
    #enregistrement en BDD du resultat du crawl

    #lancement d'une requête php/curl (code donné dans le premier message) sur crawl.php pour le relancer afin qu'il crawl la prochaine page

    Vu que je ne demande pas à cette dernière requête curl de récupérer le contenu de crawl.php je pensais que php n'attendrait pas le résultat de la requête.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faudrait également que tu regardes quelle est l'erreur PHP derrière ton erreur 500.
    Tu peux faire une interface en Ajax, tu pourras voir les resultat au fur et à mesure des réponses.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    ajax m'obligerait à garder une fenêtre navigateur ouverte alors que je veux que le crawler tourne en automatique sur le serveur 24h/24.

    Pour l'erreur php plus en détails, je regarde les logs apache ? Si c'est là que je dois regarder c'est déjà fais, et à heure égale je ne trouve pas d'enregistrement correspondant.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Non, les logs PHP.

    Dans ce que tu fais aussi tu as besoin de garder le navigateur ouvert.
    Si c'est un système en backoffice, il faut faire des appels en ligne de commande.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    Non, je ne garde pas le navigateur ouvert. Un cronjob appel le script toutes les 5 minutes. A chaque lancement du script j'enregistre l'heure du dernier lancement.

    Ainsi, si quand le cronjob lance le script l'heure du dernier chargement du script a moins de 5 minutes on ne fait rien, si le dernier lancement est plus vieux que de 5 minutes on relance parce qu'on considère que le script c'est arrêté. Du coup le crawler tourne en tache de fond sur le serveur sans aucune action de ma part.

    Je n'arrive pas à trouver dans le répertoire log du serveur de fichier plus précis sur le soucis. Comment peut s'appeler le fichier de log php ?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu lances ton script en cron, c'est encore plus inutile de passer par curl et le serveur web pour l'appeller a nouveau depuis lui même.

    Le fichier de log est défini dans ton php.ini (la valeur est donc visible dans le phpinfo() est également).

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    Merci, je vais regarder coté log php.

    Un cron toutes les minutes me fait perdre beaucoup de temps, certains crawl ne prennent que quelques secondes, c'est pour ça que je boucle avec curl. Pour gagner ce temps.

Discussions similaires

  1. PHP + Curl + header
    Par krm666 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/07/2012, 16h09
  2. php curl principe
    Par altair8080 dans le forum Langage
    Réponses: 0
    Dernier message: 14/04/2012, 17h43
  3. Probleme php - curl - function
    Par thibaut06 dans le forum Langage
    Réponses: 2
    Dernier message: 29/11/2010, 10h41
  4. PHP & CURL
    Par 123pierre dans le forum Langage
    Réponses: 8
    Dernier message: 05/02/2009, 05h39
  5. un crawler en php
    Par kodokan dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2006, 23h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo