Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie strony internetowej z poziomu php
Forum PHP.pl > Forum > PHP
L_Devil
Witam!

Chciałbym napisać prosty system katalogów stron internetowych. User podawałby adres swojej strony, a mój skrypt odwiedzałby go, spisywał META, itp. O ile potafię rozbić stronę ukrytą w zmiennej na konkretne znaczniki, odczytać meta i a href'y, o tyle problemem jest dostanie tej strony.

Moje pytanie brzmi: Jak otworzyć stronę internetową przez php i dostać jej zawartość do zmiennej? Słyszałem, że może do tego posłużyć fsockopen...

Z góry dzięki za wszelką pomoc winksmiley.jpg
gszesiek
proponowałbym przeszukać choćby te forum - był temat omawiany (niedawno)
ActivePlayer
proponuje tez lekture komentarzy na fsockopen" title="Zobacz w manualu php" target="_manual
L_Devil
użyłem tej funkcji:
  1. <?php
  2. function doPost($uri,$postdata,$host){
  3.  $da = fsockopen($host, 80, $errno, $errstr);
  4.  if (!$da) {
  5.  echo "$errstr ($errno)<br/>n";
  6.  echo $da;
  7.  }
  8.  else {
  9.  $salida ="POST $uri HTTP/1.1rn";
  10.  $salida.="Host: $hostrn";
  11.  $salida.="User-Agent: php Scriptrn";
  12.  $salida.="Content-Type: application/x-www-form-urlencodedrn";
  13.  $salida.="Content-Length: ".strlen($postdata)."rn";
  14.  $salida.="Connection: closernrn";
  15.  $salida.=$postdata;
  16.  fwrite($da, $salida);
  17.  while (!feof($da))
  18.  $response.=fgets($da, 128);
  19.  $response=split("rnrn",$response);
  20.  $header=$response[0];
  21.  $responsecontent=$response[1];
  22.  if(!(strpos($header,"Transfer-Encoding: chunked")===false)){
  23.  $aux=split("rn",$responsecontent);
  24.  for($i=0;$i<count($aux);$i++)
  25.  if($i==|| ($i%2==0))
  26.  $aux[$i]="";
  27.  $responsecontent=implode("",$aux);
  28.  }//if
  29.  return chop($responsecontent);
  30.  }//else
  31.  }//function-doPost
  32. ?>


W taki sposób:

  1. <?php
  2. if($temp_database)
  3. {
  4. $temp_database['url'] = "http://localhost/moja_strona/plik.php"; // to dostaję z bazy danych
  5. $temp = substr($temp_database['url'], 7);
  6. $temp_arr = explode("/", $temp);
  7. $host = $temp_arr[0];
  8. $temp_arr[0] = "";
  9. $postdata = "";
  10. $temp = implode("/", $temp_arr);
  11. echo doPost($temp, "", $host);
  12. }
  13. ?>


I dostałem na dzień dobry stronę z Internal Server Error... po czym jeszcze powtórzoną kilkadziesiąt razy poprawną stronę odbiorcy... co robię nie tak?
eai
  1. <?php
  2.  
  3. $source = file('http://www.strona.pl/');
  4. $source = implode('', $source);
  5.  
  6. preg_match('/<title>(.*?)</title>/si', $source , $title);
  7. preg_match('/name="description" *content="(.*?)"/si', $source , $description);
  8. preg_match('/name="keywords" *content="(.*?)"/si', $source , $keywords);
  9.  
  10. echo 'Tytul strony: ' . $title[1] . ' <br />';
  11. echo 'Opis strony: ' . $description[1] . ' <br />';
  12. echo 'Slowa kluczowe: ' . $keywords[1] . ' <br />';
  13.  
  14. ?>


Warto tez pobrac jakie kodowanie jest na stronie, i przekonwertowac do kodowania ktorego uzywasz.
L_Devil
Testuję to na własnym Apachu... wywołuję to tylko raz - po czym w logach apacha znajduję:
Kod
localhost - - [21/Oct/2006:17:33:34 +0200] "GET /testpage/test_page HTTP/1.0" 200 537
localhost - - [21/Oct/2006:17:33:33 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:33 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:32 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:32 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:33 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:31 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:31 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:29 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:32 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:31 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:27 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:31 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:26 +0200] "GET /testpage/index.php HTTP/1.1" 200 8341
localhost - - [21/Oct/2006:17:33:29 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:27 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:27 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:30 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:30 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:30 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:28 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:32 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:29 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:29 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:27 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:28 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:30 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:28 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
localhost - - [21/Oct/2006:17:33:28 +0200] "GET /testpage/test_page HTTP/1.0" 200 20
O co tu chodzi?

(Po uruchomieniu strony, mięli strasznie długo, komputer zaczyna ostro pracować, itp.)
lenczewski
http://my.opera.com/lenczewski/blog/show.dml/156176
L_Devil
file_get_contents() dał ten sam efekt... strona została pobrana kilkadziesiąt razy, zamiast raz. Na pewno nie wywołuję tego w pętli (sprawdzam echo jedno przed file_get_contents... drukuje na ekran tylko raz). Co jest nie tak?

Apache 2.0.52
php 5.0.4
D4rky
daj jakiś większy kawałek kodu, który teraz używasz, to się zobaczy o co chodzi
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.