Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] file_get_contents Warning
Forum PHP.pl > Forum > Przedszkole
Addd
Pobieram sobie przykładową stronę za pomocą:

$content = file_get_contents('http://www.onet.pl')

i gdyby powyższa strona nie działała to wyskakuje błąd "Warning: file_get_contents(http://www.onet.pl)..."

Jaka funkcja spowoduje ze jak nie połączy z tą stroną to zamiast błędu wyskoczy moja informacja typu echo 'nie dziala'; ?
Michael2318
  1. if ( !($content = @file_get_contents('http://www.onet.pl')) )
  2. {
  3. echo 'nie działa';
  4. }
  5. else
  6. {
  7. echo $content;
  8. }
Addd
Dałem @ przed file_get_contents

$content = @file_get_contents('http://www.onet.pl')

i również działa, ale czy jest to prawidłowe rozwiązanie?
!*!
Nie, ponieważ wyciszasz błąd, a nie go rozwiązujesz. @ w kodzie się nie używa.

Sprawdź pierw jakie nagłówki odbiera strona i czy w ogóle przez get_headers jak będzie 200 to ok, odczytujesz źródło.
Addd
Dzięki wielkie za wyjaśnienie smile.gif

To jeszcze jedna sprawa dotycząca file_get_contents

Mam kod

  1. <?php
  2. $url = 'www.onet.pl';
  3. function pobierzFacebook($url)
  4. {
  5. $facebook = file_get_contents('http://www.facebook.com/plugins/like.php?layout=button_count&href=' . urlencode($url));
  6. }
  7. echo pobierzFacebook($url);
  8. ?>


Powyższy skrypt nie wyświetla nić, a adres http://www.facebook.com/plugins/like.php?l...ref=www.onet.pl działa prawidłowo, dlaczego wiec nie pobiera mi tej stron?
b4x
  1. function pobierzFacebook($url)
  2. {
  3. $ch = curl_init();
  4. curl_setopt_array($ch, [
  5. CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:20.0) Gecko/20100101 Firefox/20.0',
  6. CURLOPT_RETURNTRANSFER => TRUE,
  7. CURLOPT_URL => 'http://www.facebook.com/plugins/like.php?layout=button_count&href='. urlencode($url)
  8. ]);
  9.  
  10. $response = curl_exec($ch);
  11. curl_close($ch);
  12. return $response;
  13. }
  14. var_dump(pobierzFacebook('http://www.wp.pl'));


Facebook chyba sprawdza user-agenta, z tego co zobaczyłem.
Addd
Dzięki działa, jeszcze mała prośba przy niedzieli smile.gif

  1. $pobranastrona = pobierzFacebook($url);
  2.  
  3. preg_match_all("/\<span class=\"pluginCountTextDisconnected\"\>(.+?)\<\/span\>/",$pobrana,$ile);
  4. return $ile[1];
  5.  
  6. foreach($ile as $lajki)
  7. {
  8. echo $lajki;
  9. }


Powyższym skryptem chce pobrać tylko ilość lajków (samą liczbę), ale nie wyświetla się nic, gdzie jest błąd?
Addd
oczywiscie w preg_match_all ma być $pobranastrona a nie $pobrana (więc to nie ten błąd) smile.gif
Crozin
@!*!: Nic nie stoi na przeszkodzie by pomiędzy wywołaniem get_headers(), a file_get_contents() strona/łącze padło i pojawił się Warning. Tutaj należałoby skorzystać z cURLa, który pozwala na w miarę normalną obsługę błędów.
@-Addd-: Zdajesz sobie sprawę z tego, że Facebook udostępnia w swoim API normalny sposób na pobranie liczby polubień danej strony?
Addd
o API wiem, ale chce to zrobić po swojemu i przy okazji się czegoś nauczyć.
Crozin
Naucz się najważniejszej rzeczy, tj. korzystania z gotowych rozwiązań. Zresztą już to robisz, bo nie widzę byś pytał się o to jak napisać własną funkcję file_get_contents() czy preg_match_all() - o PHP samym w sobie nie wspominając.
b4x
  1. $pobranastrona = pobierzFacebook($url);
  2.  
  3. preg_match_all('/<span class="pluginCountTextDisconnected">(.+?)<\/span>/is', $pobranastrona, $ile);
  4.  
  5. foreach($ile[1] as $lajki)
  6. {
  7. echo $lajki;
  8. }


Powinno działać.
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.