Signification [php]

Résolu
Bonjour,
que signifie cette ligne :
 $pr =
file("https://www.google.com/webhp?client=navclient-auto&gws_rd=ssl$ch&ie=UTF-8&oe=UTF-8&features=Rank&q=$adress");

(dans un script qui devrait afficher le PR d'une page (mais qui ne fonctionne pas ...)
merci
@mitiés
b g

--

le 'www' est fait aussi pour communiquer, partager et échanger, non ?
Configuration: Windows XP
Firefox 2.0.0.4

9 réponses

Résumé de la discussion

La ligne PHP citée tente de récupérer le PageRank d'une page en effectuant une requête HTTP vers Google avec la fonction file(), et le script ne produit pas le résultat attendu. Le souci vient de l'inclusion de $adress dans l'URL, les guillemets empêchant son interpolation; il faut concaténer la valeur, par exemple …&q=".$adress.". Des conseils complémentaires suggèrent de tester la requête en affichant le contenu reçu ou d'examiner la fonction file() via PHP.net pour confirmer le comportement. En parallèle, une information utile indique que certains serveurs bloquent ce type de requête, incitant à envisager une autre approche pour récupérer le PR.

Bobot (l’IA à votre service)
  1. Il prend le résultat HTML de la page : "https://www.google.com/webhp?client=navclient-auto&ch=6&gws_rd=ssl$ch&ie=UTF-8&­;oe=UTF-8&features=Rank&q=$adress" que tu as passé en paramètre et l'insert dans ton tableau nommé $pr.

    Chaque indice de ton tableau $pr contiendra une ligne du résultat de la page HTML.

    Ce qui me semble faut dans ton script et qui ferait qu'il ne marche pas est le $adress pas pris en compte par php là.

    Essaie :

    $pr =
    file("https://www.google.com/webhp?client=navclient-auto&ch=6&gws_rd=ssl$ch&ie=UTF-8&­;oe=UTF-8&features=Rank&q=".$adress);

    (J'ai déplacé le guillemet)
    1. Modérateur
      comprends plus ... tout fonctionnait impec depuis trois mois et plus du tout depuis deux jours ...
      voici le code source de la page:
      <?php 
      define('GMAG', 0xE6359A60);
      
      //unsigned shift right
      function zeroFill($a, $b)
      {
          $z = hexdec(80000000);
              if ($z & $a)
              {
                  $a = ($a>>1);
                  $a &= (~$z);
                  $a |= 0x40000000;
                  $a = ($a>>($b-1));
              }
              else
              {
                  $a = ($a>>$b);
              }
              return $a;
      } 
      
      
      function mix($a,$b,$c) {
        $a -= $b; $a -= $c; $a ^= (zeroFill($c,13)); 
        $b -= $c; $b -= $a; $b ^= ($a<<8); 
        $c -= $a; $c -= $b; $c ^= (zeroFill($b,13));
        $a -= $b; $a -= $c; $a ^= (zeroFill($c,12));
        $b -= $c; $b -= $a; $b ^= ($a<<16);
        $c -= $a; $c -= $b; $c ^= (zeroFill($b,5)); 
        $a -= $b; $a -= $c; $a ^= (zeroFill($c,3));  
        $b -= $c; $b -= $a; $b ^= ($a<<10); 
        $c -= $a; $c -= $b; $c ^= (zeroFill($b,15));
        
        return array($a,$b,$c);
      }
      
      function GCH($adress, $length=null, $init=GMAG) {
          if(is_null($length)) {
              $length = sizeof($adress);
          }
          $a = $b = 0x9E3779B9;
          $c = $init;
          $k = 0;
          $len = $length;
          while($len >= 12) {
              $a += ($adress[$k+0] +($adress[$k+1]<<8) +($adress[$k+2]<<16)
      +($adress[$k+3]<<24));
              $b += ($adress[$k+4] +($adress[$k+5]<<8) +($adress[$k+6]<<16)
      +($adress[$k+7]<<24));
              $c += ($adress[$k+8] +($adress[$k+9]<<8)
      +($adress[$k+10]<<16)+($adress[$k+11]<<24));
              $mix = mix($a,$b,$c);
              $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
              $k += 12; 
              $len -= 12;
          }
      
          $c += $length;
          switch($len)              /* all the case statements fall through */
          {
              case 11: $c+=($adress[$k+10]<<24);
              case 10: $c+=($adress[$k+9]<<16);
              case 9 : $c+=($adress[$k+8]<<8);
                /* the first byte of c is reserved for the length */
              case 8 : $b+=($adress[$k+7]<<24);
              case 7 : $b+=($adress[$k+6]<<16);
              case 6 : $b+=($adress[$k+5]<<8);
              case 5 : $b+=($adress[$k+4]);
              case 4 : $a+=($adress[$k+3]<<24);
              case 3 : $a+=($adress[$k+2]<<16);
              case 2 : $a+=($adress[$k+1]<<8);
              case 1 : $a+=($adress[$k+0]);
               /* case 0: nothing left to add */
          }
          $mix = mix($a,$b,$c);
          /*-------------------------------------------- report the result */
          return $mix[2];
      }
      
      //converts a string into an array of integers containing the numeric value of the char
      function strord($string) {
          for($i=0;$i<strlen($string);$i++) {
              $result[$i] = ord($string{$i});
          }
          return $result;
      }
      
      function getPR($_url) {
          $adress = 'info:'.$_url;
          $ch = GCH(strord($adress));
          $adress='info:'.urlencode($_url);
          $pr =
      file("https://www.google.com/webhp?client=navclient-auto&gws_rd=ssl$ch&ie=UTF-8&oe=UTF-8&features=Rank&q=$adress");
          $pr_str = implode("", $pr);
          return substr($pr_str,strrpos($pr_str, ":")+1);
      }
      
      ?>

      @+
      b g
      1. Contributeur
        a récupérer le pr d'une page.
        ne fonctionne pas selon les serveurs.
        1. Modérateur
          ok mais pourquoi depuis 2 jours ne fonctionne--il plus ?
        2. Contributeur
          demandes à ton hébergeur ;o)
        3. Modérateur
          @gryzzlybonjour
          je viens d'avoir la réponse, enfin j'espère que c'est la bonne ....
          Suite à notre mise à jour en Debian 4.0, la fonction allow_url_fopen est
          passé sur Off, il faudra peut-être créer un fichier php.ini et y mettre
          la ligne de commande suivante :
          allow_url_fopen = on

          comment créer ce fichier et surtout qu'y mettre (la ligne indiquée et c'est tout ?) et le placer où ? (dans le dossier où se trouve le script ou ailleurs ???)
          @+
          b g
        4. Contributeur
          @bg62salut,

          dans ton phpinfo, 'allow_url_fopen' est à 'on' donc si ça ne fonctionne pas cela ne vient pas de là…

          et l'url d'appel chez Google n'a pas changée ?
        5. Modérateur
          @Dalidatu y comprends qq chose toi ?
          @+
          b g
      2. Modérateur
        pour php;ini:
        allow_url_fopen = on

        et pour pr.php
        <?php 
        
        define('GMAG', 0xE6359A60);
        
        //unsigned shift right
        function zeroFill($a, $b)
        {
            $z = hexdec(80000000);
                if ($z & $a)
                {
                    $a = ($a>>1);
                    $a &= (~$z);
                    $a |= 0x40000000;
                    $a = ($a>>($b-1));
                }
                else
                {
                    $a = ($a>>$b);
                }
                return $a;
        } 
        
        
        function mix($a,$b,$c) {
          $a -= $b; $a -= $c; $a ^= (zeroFill($c,13)); 
          $b -= $c; $b -= $a; $b ^= ($a<<8); 
          $c -= $a; $c -= $b; $c ^= (zeroFill($b,13));
          $a -= $b; $a -= $c; $a ^= (zeroFill($c,12));
          $b -= $c; $b -= $a; $b ^= ($a<<16);
          $c -= $a; $c -= $b; $c ^= (zeroFill($b,5)); 
          $a -= $b; $a -= $c; $a ^= (zeroFill($c,3));  
          $b -= $c; $b -= $a; $b ^= ($a<<10); 
          $c -= $a; $c -= $b; $c ^= (zeroFill($b,15));
          
          return array($a,$b,$c);
        }
        
        function GCH($adress, $length=null, $init=GMAG) {
            if(is_null($length)) {
                $length = sizeof($adress);
            }
            $a = $b = 0x9E3779B9;
            $c = $init;
            $k = 0;
            $len = $length;
            while($len >= 12) {
                $a += ($adress[$k+0] +($adress[$k+1]<<8) +($adress[$k+2]<<16)
        +($adress[$k+3]<<24));
                $b += ($adress[$k+4] +($adress[$k+5]<<8) +($adress[$k+6]<<16)
        +($adress[$k+7]<<24));
                $c += ($adress[$k+8] +($adress[$k+9]<<8)
        +($adress[$k+10]<<16)+($adress[$k+11]<<24));
                $mix = mix($a,$b,$c);
                $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
                $k += 12; 
                $len -= 12;
            }
        
            $c += $length;
            switch($len)              /* all the case statements fall through */
            {
                case 11: $c+=($adress[$k+10]<<24);
                case 10: $c+=($adress[$k+9]<<16);
                case 9 : $c+=($adress[$k+8]<<8);
                  /* the first byte of c is reserved for the length */
                case 8 : $b+=($adress[$k+7]<<24);
                case 7 : $b+=($adress[$k+6]<<16);
                case 6 : $b+=($adress[$k+5]<<8);
                case 5 : $b+=($adress[$k+4]);
                case 4 : $a+=($adress[$k+3]<<24);
                case 3 : $a+=($adress[$k+2]<<16);
                case 2 : $a+=($adress[$k+1]<<8);
                case 1 : $a+=($adress[$k+0]);
                 /* case 0: nothing left to add */
            }
            $mix = mix($a,$b,$c);
            /*-------------------------------------------- report the result */
            return $mix[2];
        }
        
        //converts a string into an array of integers containing the numeric value of the char
        function strord($string) {
            for($i=0;$i<strlen($string);$i++) {
                $result[$i] = ord($string{$i});
            }
            return $result;
        }
        
        function getPR($_url) {
            $adress = 'info:'.$_url;
            $ch = GCH(strord($adress));
            $adress='info:'.urlencode($_url);
            $pr =
        file("https://www.google.com/webhp?client=navclient-auto&gws_rd=ssl$ch&ie=UTF-8&oe=UTF-8&features=Rank&q=$adress");
            $pr_str = implode("", $pr);
            return substr($pr_str,strrpos($pr_str, ":")+1);
        }
        
        ?>
        
        
        
        
        
        
        
        
        

        @+
        b g
        1. Salut, Bonjour,
          Tu n'as pas besoin d'include dans ton File,
          tu codes en php, sur du lLinux/Unix?
          Faut faire gaffe, aux configurations dans le "php.ini", le htdocs", sous windows, en tout cas,
          tu tournes avec un SERVEUR APACHE ASSOCIE INSTALLE EN INDEPENDANT sur un OS LINUX?(0000)
        2. Modérateur
          @davidmickaelje suis chez 1&1 en unix
          pour le reste ... tu sais que tu me parles en chinois !?
          @+
          b g
      3. Hello,
        je relance le sujet ayant le même problème avec la même fonction et sur le même hoster (one&one) mais je sais pas si c'est pas le protocole google ki a changer ou si sa vient du serveur, a tu trouvé solution a ton problème bg62 ?

        car j'essais de tester l'url google du script mais sa me renvoi une erreur est-ce moi qui passe pas les bon paramètres ou c bien le protocole qui a changer ?

        merci d'avance de donné des news bg52.
        1. Modérateur
          la requète par ce serveur semble être bannie ... il faut donc trouver un autre système ....
          1. La tu trouvé cette solution ?

            je suis entrain de regarder du cotés du script de Freeglobe, mais c plus lourd !!!
            1. Modérateur
              prendre le résultat d'un ou plusieurs sites en ligne qui eux sont acceptés ... pas toujours très fiable, mais ... bon !