Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Generowanie linku na ip?
Forum PHP.pl > Forum > Przedszkole
screv
Jak cześć może wie z innego tematu, posiadam klasę, umożliwiającą sciąganie filmów bezpośrednio z serwera MegaVideo. Problem w tym, ze generując link na localhoście, wszystko pięknie chodzi, lecz na hoście klasa generuje złe linki. Spowodowane jest to generowaniem linku na IP?
Czy da rade przepisać to tak, żeby link był generowany na serwerze, a każdy korzystający mógł z tego linku ściągać?


  1. <?
  2. class Megavideo
  3. {
  4.  
  5. function __construct($url)
  6. {
  7. preg_match('#\?v=(.+?)$#', $url, $id);
  8.  
  9. $this->id = $id[1]?$id[1]:$url;
  10.  
  11. $this->getxml();
  12.  
  13. $parse = array ( 'runtimehms' => 'duration',
  14. 'size' => 'size',
  15. 's' => 'server',
  16. 'title' => 'title',
  17. 'description' => 'description',
  18. 'added' => 'added',
  19. 'username' => 'username',
  20. 'category' => 'category',
  21. 'views' => 'views',
  22. 'comments' => 'comments',
  23. 'favorited' => 'favorited',
  24. 'rating' => 'rating',
  25. 'k1' => 'key1',
  26. 'k2' => 'key2',
  27. 'un' => 'str');
  28.  
  29. foreach($parse as $key=>$val)
  30. {
  31. $this->parsexml($key, $val);
  32. }
  33.  
  34. $this->size = round($this->size/(1024*1024));
  35.  
  36. }
  37.  
  38. function get($what=false)
  39. {
  40. $all = array( "URL" => "http://www".$this->server.
  41. ".megavideo.com/files/".
  42. $this->decrypt($this->str, $this->key1, $this->key2)."/",
  43. "SIZE" => $this->size,
  44. "TITLE" => $this->title,
  45. "DURATION" => $this->duration,
  46. "SERVER" => $this->server,
  47. "DESCRIPTION" => $this->description,
  48. "ADDED" => $this->added,
  49. "USERNAME" => $this->username,
  50. "CATEGORY" => $this->category,
  51. "VIEWS" => $this->views,
  52. "COMMENTS" => $this->comments,
  53. "FAVORITED" => $this->favorited,
  54. "RATING" => $this->rating
  55. );
  56.  
  57. return $what&&array_key_exists(strtoupper($what),$all)?$all[strtoupper($what)]:$all;
  58. }
  59.  
  60. function getxml()
  61. {
  62. $this->xml = file_get_contents("http://www.megavideo.com/xml/videolink.php?v=".$this->id."&id=".time()) or
  63. die("Error!\n");
  64. }
  65.  
  66.  
  67. function parsexml($attribute, $name)
  68. {
  69. preg_match("#\s$attribute=\"(.+?)\"#", $this->xml, $tmp);
  70. list(,$this->$name) = $tmp;
  71. }
  72.  
  73. function decrypt($str, $key1, $key2)
  74. {
  75. $reg1 = array();
  76.  
  77. for($reg3=0; $reg3<strlen($str); $reg3++)
  78. {
  79. $reg0 = $str[$reg3];
  80.  
  81. switch($reg0)
  82. {
  83. case '0': $reg1[] = '0000'; break;
  84. case '1': $reg1[] = '0001'; break;
  85. case '2': $reg1[] = '0010'; break;
  86. case '3': $reg1[] = '0011'; break;
  87. case '4': $reg1[] = '0100'; break;
  88. case '5': $reg1[] = '0101'; break;
  89. case '6': $reg1[] = '0110'; break;
  90. case '7': $reg1[] = '0111'; break;
  91. case '8': $reg1[] = '1000'; break;
  92. case '9': $reg1[] = '1001'; break;
  93. case 'a': $reg1[] = '1010'; break;
  94. case 'b': $reg1[] = '1011'; break;
  95. case 'c': $reg1[] = '1100'; break;
  96. case 'd': $reg1[] = '1101'; break;
  97. case 'e': $reg1[] = '1110'; break;
  98. case 'f': $reg1[] = '1111'; break;
  99. }
  100. }
  101.  
  102. $reg1 = join($reg1);
  103. $reg6 = array();
  104.  
  105. for($reg3=0; $reg3<384; $reg3++)
  106. {
  107. $key1 = ($key1 * 11 + 77213) % 81371;
  108. $key2 = ($key2 * 17 + 92717) % 192811;
  109. $reg6[] = ($key1 + $key2) % 128;
  110. }
  111.  
  112. for($reg3=256; $reg3>=0; $reg3--)
  113. {
  114. $reg5 = $reg6[$reg3];
  115. $reg4 = $reg3 % 128;
  116. $reg8 = $reg1[$reg5];
  117. $reg1[$reg5] = $reg1[$reg4];
  118. $reg1[$reg4] = $reg8;
  119. }
  120.  
  121. for($reg3=0; $reg3<128; $reg3++)
  122. {
  123. $reg1[$reg3] = $reg1[$reg3] ^ ($reg6[$reg3+256] & 1);
  124. }
  125.  
  126. $reg12 = $reg1;
  127. $reg7 = array();
  128.  
  129. for($reg3=0; $reg3<strlen($reg12); $reg3+=4)
  130. {
  131. $reg9 = substr($reg12, $reg3, 4);
  132. $reg7[] = $reg9;
  133. }
  134.  
  135. $reg2 = array();
  136.  
  137. for($reg3=0; $reg3<count($reg7); $reg3++)
  138. {
  139. $reg0 = $reg7[$reg3];
  140.  
  141. switch($reg0)
  142. {
  143. case '0000': $reg2[] = '0'; break;
  144. case '0001': $reg2[] = '1'; break;
  145. case '0010': $reg2[] = '2'; break;
  146. case '0011': $reg2[] = '3'; break;
  147. case '0100': $reg2[] = '4'; break;
  148. case '0101': $reg2[] = '5'; break;
  149. case '0110': $reg2[] = '6'; break;
  150. case '0111': $reg2[] = '7'; break;
  151. case '1000': $reg2[] = '8'; break;
  152. case '1001': $reg2[] = '9'; break;
  153. case '1010': $reg2[] = 'a'; break;
  154. case '1011': $reg2[] = 'b'; break;
  155. case '1100': $reg2[] = 'c'; break;
  156. case '1101': $reg2[] = 'd'; break;
  157. case '1110': $reg2[] = 'e'; break;
  158. case '1111': $reg2[] = 'f'; break;
  159. }
  160. }
  161.  
  162. return join($reg2);
  163.  
  164. }
  165.  
  166. }
  167. ?>





@edit

Pomocy potrzebuję dość pilnie. Nie ma sprytnego, mogącego mnie naprowadzić do celu?

/
darko
A w linii 70. nie ma błędu ? Nie brakuje tam jednego argumentu ?
list(TUTAJ, $this->$name) = $tmp; ?
screv
Faktycznie jest przecinek, a nie ma argumentu, jednak jest to gotowa klasa i od poczatku tego nie bylo.
Jeszcze raz dodam, że wszystko pięknie chodzi na localhoście, a na serwerze zewnetrznym, generuje linki, z ktorych nie mogę sciągać.
darko
Jedyne co mi przychodzi w tym momencie do głowy to ewentualnie nieaktualny czas na serwerze (?)
screv
Zgadza się. Serwer stoi za granicą naszego kraju.
Czas na serwerze: 07:30:07
Czas u mnie: 08:30

To może być przyczyną?
W takim razie, jak to ominąć?

@edit

  1. function getxml()
  2. {
  3. $czas = time() + 3600;
  4. $ch = curl_init ("http://www.megavideo.com/xml/videolink.php?v=".$this->id."&id=".$czas);
  5.  
  6. curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt($ch,CURLOPT_HEADER, 0);
  8.  
  9. $r = curl_exec($ch);
  10. curl_close($ch);
  11.  
  12. $this->xml = $r;
  13. }


Tak wyglada getxml przerobiony na CURL`a z dodaną godziną, iż serwer ma inną strefę czasową.
I znow to samo. Wyrzuca wszystkie dane, poza dobrym linkiem sciagania.
darko
Tak dodajesz 1 godzinę do timestamp:
  1. $my_time = strtotime("+1 hour");
  2. $this->xml = file_get_contents("http://www.megavideo.com/xml/videolink.php?v=".$this->id."&id=".$my_time) or die("Error!\n");

questionmark.gif
Jak odpalisz u siebie lokalnie po tej zmianie, to znowu nie będzie działać, ale wrzuć na serwer i sprawdź.

// edit @post niżej:
dry.gif poddaję się, chociaż tego nie lubię, może ktoś inny pomoże...
screv
Zwraca identyczne wynika jak " time () + 3600; ".
Dalej to samo. Tytul, długość filmu i waga jest, link do ściagania jest nie odpowiedni.

//edit
Dodam, że wszystkie wersje testuje na serwerze, nie na localu.

//edit2
@post wyzej:
wielkie dzięki za chęci. poczekam dalej, może znajdzie się ktoś kto da rade pomóc winksmiley.jpg

//edit3
To chyba nie jest zależne od czasu. Mimo dodania godziny do time() na localu dalej śmiga pięknie.
Inny uzytkownik tego forum, w innym temacie uznał, że to wina generowania linku na ip (?) Jeżeli chciałbym, żeby chodziło musiałbym ściagać plik na serwer.
Ale jestem pewien, że da się to jakoś ominąć, tylko nie wiem jeszcze jak. Dalej liczę na waszą chęć pomocy smile.gif


//edit....999
Czy może być to wina leżąca po stronie serwera? Juz trzeba bylo przerabiac skrypt na CURL`a, może coś jeszcze wymaga przerobienia?
  1. "URL" => "http://www".$this->server.
  2. ".megavideo.com/files/".
  3. $this->decrypt($this->str, $this->key1, $this->key2)."/",

Wina leży gdzieś w odnośnikach od tej linijki, bo tylko to wywala źle...

.

.
darko
Tak na marginesie, to nie pomagamy w omijaniu zabezpieczeń smile.gif (chyba zapiszę to w stopce w końcu, bo zbyt często się powtarzam)
screv
Przecież to tylko w celach edukacyjnych ; )
webdice
Cytat(darko @ 30.01.2010, 07:30:53 ) *
Tak na marginesie, to nie pomagamy w omijaniu zabezpieczeń smile.gif


Zamykam.
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.