Signification [php]
Résolu
Bonjour,
que signifie cette ligne :
(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 ?
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.
-
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) -
Oups, oublié la source pour PHP : http://fr.php.net/file
-
Modérateurcomprends 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 -
Contributeura récupérer le pr d'une page.
ne fonctionne pas selon les serveurs.-
-
-
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 -
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 ?
-
Modérateur
-
-
Modérateurpour 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-
-
Modérateur@davidmickaelje suis chez 1&1 en unix
pour le reste ... tu sais que tu me parles en chinois !?
@+
b g
-
-
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. -
Modérateurla requète par ce serveur semble être bannie ... il faut donc trouver un autre système ....
-
La tu trouvé cette solution ?
je suis entrain de regarder du cotés du script de Freeglobe, mais c plus lourd !!! -
Modérateurprendre le résultat d'un ou plusieurs sites en ligne qui eux sont acceptés ... pas toujours très fiable, mais ... bon !