Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] dziwny problem z kodem
Forum PHP.pl > Forum > Przedszkole
lopez86
Znalazlem skrypt do sprawdzania pageRank'u google i wszystko działa świetnie u mnie na kompie (krasnal server - PHP 4). Gdy wrzucam na serwer okazuje się że tam nie działa , cała sprawa polega na wyliczeniu checksum'y. Umnie wylicza zupełnie inną niż na serwerze. Więc jak dwa komputery liczą inaczej questionmark.gif

Teraz zauważyłem że po przełączeniu na PHP5 u mnie też nie działa i na PHP4 wylicza inną czeksume na PHP5 jeszcze inną a na serwerze z PHP4.3 Jeszcze inną.

  1. <?php
  2. define('GOOGLE_MAGIC', 0xE6359A60); 
  3.  
  4. //unsigned shift right 
  5. function zeroFill($a, $b) 
  6. { 
  7. $z = hexdec(80000000); 
  8. if ($z & $a) 
  9. { 
  10. $a = ($a>>1); 
  11. $a &= (~$z); 
  12. $a |= 0x40000000; 
  13. $a = ($a>>($b-1)); 
  14. } 
  15. else 
  16. { 
  17. $a = ($a>>$b); 
  18. } 
  19. return $a; 
  20. } 
  21.  
  22. function mix($a,$b,$c) { 
  23. $a -= $b; $a -= $c; $a ^= (zeroFill($c,13)); 
  24. $b -= $c; $b -= $a; $b ^= ($a<<8); 
  25. $c -= $a; $c -= $b; $c ^= (zeroFill($b,13)); 
  26. $a -= $b; $a -= $c; $a ^= (zeroFill($c,12)); 
  27. $b -= $c; $b -= $a; $b ^= ($a<<16); 
  28. $c -= $a; $c -= $b; $c ^= (zeroFill($b,5)); 
  29. $a -= $b; $a -= $c; $a ^= (zeroFill($c,3));
  30. $b -= $c; $b -= $a; $b ^= ($a<<10); 
  31. $c -= $a; $c -= $b; $c ^= (zeroFill($b,15)); 
  32.  
  33. return array($a,$b,$c); 
  34. } 
  35.  
  36. function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC) { 
  37. if(is_null($length)) { 
  38. $length = sizeof($url); 
  39. } 
  40. $a = $b = 0x9E3779B9; 
  41. $c = $init; 
  42. $k = 0; 
  43. $len = $length; 
  44. while($len >= 12) { 
  45. $a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24)); 
  46. $b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24)); 
  47. $c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24)); 
  48. $mix = mix($a,$b,$c); 
  49. $a = $mix[0]; $b = $mix[1]; $c = $mix[2]; 
  50. $k += 12; 
  51. $len -= 12; 
  52. } 
  53.  
  54. $c += $length; 
  55. switch($len) /* all the case statements fall through */ 
  56. { 
  57. case 11: $c+=($url[$k+10]<<24); 
  58. case 10: $c+=($url[$k+9]<<16); 
  59. case 9 : $c+=($url[$k+8]<<8); 
  60. /* the first byte of c is reserved for the length */ 
  61. case 8 : $b+=($url[$k+7]<<24); 
  62. case 7 : $b+=($url[$k+6]<<16); 
  63. case 6 : $b+=($url[$k+5]<<8); 
  64. case 5 : $b+=($url[$k+4]); 
  65. case 4 : $a+=($url[$k+3]<<24); 
  66. case 3 : $a+=($url[$k+2]<<16); 
  67. case 2 : $a+=($url[$k+1]<<8); 
  68. case 1 : $a+=($url[$k+0]); 
  69.  /* case 0: nothing left to add */ 
  70. } 
  71. $mix = mix($a,$b,$c); 
  72. /*-------------------------------------------- report the result */ 
  73. return $mix[2]; 
  74. } 
  75.  
  76. //converts a string into an array of integers containing the numeric value of the 
    char 
  77. function strord($string) { 
  78. for($i=0;$i<strlen($string);$i++) { 
  79. $result[$i] = ord($string{$i}); 
  80. } 
  81. return $result; 
  82. } 
  83.  
  84. function getrank($url) { 
  85. $url = 'info:'.$url; 
  86. $ch = GoogleCH(strord($url)); 
  87. $file = "http://www.google.com/search?client=navclient-auto&ch=6$ch&features=Rank&q=$url"; 
  88. $data = file($file); 
  89. $rankarray = explode (':', $data[2]); 
  90. $rank = $rankarray[2]; 
  91. return $rank; 
  92. } 
  93.  
  94.  
  95. echo getrank("qlweb.lubi.pl");
  96.  
  97. ?>


Pewnie coś w pierwszej funkcji , napewno coś związane z przechowywaniem liczb w pamięci albo z różźnicami w PHP wersji 4 i 5 . Tylko jak to przerobić żeby zadziałało na serwerze z PHP 4.3.
devnul
a można wiedziec jakie wyniki to zwraca? tzn jakie na lokalu i jakie na serwerze (dla tych samych stron)
lopez86
na lokalnym na PHP4 : http://www.google.com/search?client=navcli...info:allegro.pl PR5

na lokalnym z PHP5 : http://www.google.com/search?client=navcli...info:allegro.pl BŁĄD 403 FORBIDDEN WRONG CHECKSUM

NA SERWERZE: http://www.google.com/search?client=navcli...info:allegro.pl


PODSUMOWUJĄC otrzymywane wartości:

Lokalny PHP4: 6-145841001 - prawidłowy;

LOKALNY PHP5: 62147401746 zły;

SERWER PHP4.3: 6-2147472361 zły;

liczba "6" na początku jest zawsze taka sama i dopisywana na początku czeksumy.
devnul
nie wiem czy to pomoże ale wyguglałem coś takiego:
http://www.comscripts.com/scripts/php.calc...erank.2031.html

niby jakiś błąd z przed php4.2 załatali wiec może akurat

nie przygladałem sie specjalnie ale wygląda podobnie jak ten Twój

Cytat
echo getrank("qlweb.lubi.pl");


co do tego to nie wiem czy wiesz ale qlweby wyleciały z google i nie bardzo się zdają do pozycjonowania

więcej możesz poczytać tu: http://www.ittechnology.us/wordpress-optymalizacja-pod-seo/
lopez86
Dzięki za informację o qlwebach jak widać jestem zacofany :/ że do tej pory o tym nie wiedziałem.

Co do błędu to ja mam PHP 4.3.9 a na serwerze jest PHP 4.4.2 także błąd jest w czymś innym
devnul
a może allow_url_fopen?
lopez86
fopen dla url mam włączony napewno , gdy dam file_get_contents() dla url'a wygenerowanego u mnie lokalnie to na serwerze też działa - coś z tą chcksumą na 100%.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.