Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z file_get_contents
Forum PHP.pl > Forum > PHP
matird
Witam, od razu przejdę do rzeczy:

kod:
  1. $link = 'http://www.youtube.com/watch?v=z374ygOmKAw&feature=related';
  2. $www = file_get_contents($link);

działa i na serwerze i na localhost, natomiast kod:
  1. $link = 'http://www.youtube.com/watch?v=ZareCmy5BWQ&feature=related';
  2. $www = file_get_contents($link);


działa tylko na localhost...

Normalnie gdyby nie działała sama funkcja, sprawdziłbym ustawienia w PHP, jednak są to przecież linki z tej samej strony, więc jak to możliwe, że dla jednego wszystko działa, dla drugiego nie ?

edit: komunikat bledu:

"Warning: file_get_contents(http://www.youtube.com/watch?v=ZareCmy5BWQ&feature=related) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found "
pozdrawiam, Mateusz Tofilski
tehaha
jakbyś zajrzał do manuala to byś wiedział, że to zależy od ustawień na serwerze i przeważnie na hostingach współdzielonych jest to zablokowane

http://www.php.net/manual/pl/filesystem.co...allow-url-fopen
matird
z całym szacunkiem, ale jakbyś czytał ze zrozumieniem to byś takiej głupoty nie napisałsmile.gif Jak łatwo można zauważyć obydwa linki pochodzą z tej samej strony internetowej, również wspomniałem, że jeden z nich (jak również całe grono innych) działa bezproblemowo - więc Twoje spostrzeżenie odnośnie ustawień serwera jest zupełnie nie trafione tiredsmiley.gif

@edit jeśli byłby to problem, o którym piszesz pojawił by się inny błąd...

Mam nadzieje, że znajdzie się ktoś mądrzejszy ode mnie i wytłumaczy o co w tym chodzi smile.gif
wizu
Czy oba te pobrania występują jeden po drugim, czy testowałeś raz dla tego i osobno dla drugiego?

Do zabawy w parsowanie stron polecał bym jednak curl.
matird
Cytat(matird @ 19.08.2011, 22:25:08 ) *
Witaj, oba kody uruchamiam osobno, w osobnych plikach. Nie mam pojęcia skąd ten problem, dlatego przerzucam się na cURL. Strony pobiera, ALE:

-mój serwer ma lokalizacje niemiecką, więc serwis youtube otwiera się tak jakby 'w wersji niemieckiej'
-zmieniłem język i useragenta - wszystko super, ale youtube po IP i tak wie ze serwer niemiecki bo niektóre klipy blokuje z powodu niedostępności w danym kraju.
-pomyślałem o proxy - to powinno rozwiązac problem, ale niestety nie chce działać, proszę spojrzeć na kod:

  1. $curl = curl_init();
  2. curl_setopt($curl, CURLOPT_URL, $adres);
  3. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  4. curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, FALSE);
  5. curl_setopt($curl, CURLOPT_PROXY, 'przykladowy_proxy:80');
  6. curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3');
  7. $str = curl_exec($curl);
  8. curl_close($curl);


z proxy - nic nie wchodzi, ale nie wiem czy to problem dobrania dobrego serwera
bez proxy - wchodzi stronka youtube z informacja, ze w tym kraju (niemcy) zostalo zablokowane wyswietlanie klipu

Macie jakies pomysly ?

@edit: przykladowy link: http://www.youtube.com/watch?v=ZareCmy5BWQ (niech beda Pink Floydzi)


No cóż, po raz kolejny jestem zmuszony sam odpowiadać sobie na pytanie...

Poniżej skrypcik, który napisałem dla sprawdzania kilku proxy:

  1. $tab = array('178.218.226.70:8080',
  2. '178.218.225.232:8080',
  3. '178.218.226.70:8080',
  4. '77.245.242.230:8080',
  5. '82.177.67.1:8080'//,
  6. //'212.182.64.86:3128'
  7. );
  8. $best_time = 100;
  9. foreach ($tab as $proxy){
  10. $ch = curl_init();
  11. curl_setopt($ch, CURLOPT_URL, $link);
  12. curl_setopt($ch, CURLOPT_HEADER, 1);
  13. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3');
  14. $headers = array('Accept-Language: pl,en-us;q=0.7,en;q=0.3',
  15. 'Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7');
  16. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  17. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  18. curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
  19. curl_setopt($ch, CURLOPT_PROXY, $proxy);
  20. //curl_setopt($ch, CURLOPT_TIMEOUT,5);
  21.  
  22. curl_exec($ch);
  23.  
  24. if(curl_errno($ch))
  25. {
  26. echo 'Proxy: '.$proxy.' Błąd: ' . curl_error($ch).'<br/>';
  27. }
  28. else
  29. {
  30. $info = curl_getinfo($ch);
  31. if ($info['total_time'] < $best_time) {
  32. $best_time = $info['total_time'];
  33. $best_proxy = $proxy;
  34. }
  35. if ($info['total_time'] < 4) {
  36. echo '<div style="color:green">Proxy: '.$proxy.' Czas rządania: ' . $info['total_time'] . ' sek. dla adresu: ' . $info['url'].'<br/></div>';
  37. //echo curl_exec($ch);
  38. //return 0;
  39. }else{
  40. echo 'Proxy: '.$proxy.' Czas rządania: ' . $info['total_time'] . ' sek. dla adresu: ' . $info['url'].'<br/>';
  41. }
  42. }
  43. curl_close($ch);
  44. }
  45. echo '<br/>Zapisano do bazy proxy: '.$best_proxy.' o czasie odpowiedzi: '.$best_time.' s';


Jak zwykle nie mam za bardzo komu dziękować za pomoc, jednakże podziękuje przynajmniej za zaglądnięcie tutaj...

pozdrawiam, Mateusz Tofilski
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.