Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> file_get_contents - przekierowanie
kubu65
post 11.06.2012, 01:52:34
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 11.06.2012

Ostrzeżenie: (0%)
-----


Witam, posiadam taki kod (adres przykladowy):
  1. for( $x = 1; $x <= 10; $x++ ){
  2.  
  3. $dane = file_get_contents('http://www.adres.pl/'.$x.',1.html');

Więc tak, x to id produktu, a 1 (po przecinku) to id kategorii. Wchodząc na stronę zmieniając tylko id produktu strona przekierowuje na stronę z odpowiednim id kategorii. I tak wchodząc np na http://www.adres.pl/1001,1.html i kiedy produkt jest w kategorii id 5, przekierowuje na http://www.adres.pl/1001,5.html.
Oczywiście skrypt tego nie ogarnia i nie pobiera danych. Próbowałem zrobić opóznienie, aby był czas na pobranie danych, ale to z góry skazane było na niepowodzenie. Jest jakiś sposób na rozwiązanie tego problemu? Wiem że mogę przelecieć wszystko id produktów w każdej kategorii, ale wtedy z 150tys. robi się ok. 75mln zapytań.
Z góry wielkie dzięki.

EDIT:
teraz spróbowałem użyć:
  1. $url = 'http://www.adres.pl/1001,1.html';
  2. print_r(get_headers($url));

ale tylko dostałem
  1. [0] => HTTP/1.1 200 OK
  2. [1] => Date: Mon, 11 Jun 2012 01:08:51 GMT
  3. [2] => Server: Apache
  4. [3] => Set-Cookie: PHPSESSID=251867da4fa79520b6966c301daae2e6; path=/
  5. [4] => Expires: Thu, 19 Nov 1981 08:52:00 GMT
  6. [5] => Cache-Control: no-cache, must-revalidate
  7. [6] => Pragma: no-cache
  8. [7] => Vary: Accept-Encoding
  9. [8] => Content-Length: 57
  10. [9] => Connection: close
  11. [10] => Content-Type: text/html; charset=utf-8


Ten post edytował kubu65 11.06.2012, 02:12:32
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sephirus
post 11.06.2012, 07:37:06
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Do takich rzeczy najlepiej było by użyć jednak CURL.

Dzięki niemu możesz nakazać pożądanie za przekierowaniami i w ten sposób otrzymywać ostateczną treść strony jeśli zostanie przekierowana.

Przykład:

  1. // pętla for...
  2. $ch = curl_init('http://www.adres.pl/'.$x.',1.html');
  3. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  4. curl_setopt($ch, CURLOPT_HEADER, 0);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  6. $dane = curl_exec($ch);
  7.  
  8. // przetwarzanie danych...


Jeśli nie masz dostępu do CURL lub masz włączone OPEN_BASEDIR (wówczas nie działa CURLOPT_FOLLOWLOCATION) proponuje użyć fopen lub fsocketopen i śledzić manualnie nagłówki. Czyli pobierasz strone z nagłówkami i patrzysz czy w nagłówkach nie ma "Location: jakis_adres" (preg_match) jeśli jest to robisz nowy request na ten adres i tak do skutku - jak nie ma już Location to bierzesz treść.


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 20:51