ďťż

[php]pobieranie źródła strony w http

       

Podstrony


telcocafe

Jak za pomocom skryptu php pobrać źródło strony z adresu http??
Taka funkcaj jak np. tu: http://tools.webmast...map-creator.php
Z góry dziękuję za pomoc



Musisz mieć możliwość czytania z gniazdek i tyle - używasz zwykłych funkcji do otwierania plików.
// Edytowano
@piotr94:
Dopiero teraz zauważyłem. Co to za "pomocom"?
@niżej:
CURL to złe rozwiązanie. Raz - większe obciążenie, dwa - należy mieć włączoną jego obsługę wraz z gniazdami. (Czyli na jedno wychodzi).
Użytkownik andrzej_aa edytował ten post 22 sierpień 2008, 17:53
ewentualnie użyj curl.

Zwykłych to znaczy file_get_contents dla PHP 5 i ew dla 4 (co jest już rzadkością) - fopen -> fread ->fclose




Musisz mieć możliwość czytania z gniazdek i tyle - używasz zwykłych funkcji do otwierania plików.
Co to jest to czytanie z gniazdek??

Konkretnie to powinieneś mieć ustawione w konfiguracji allow_url_fopen = on. Konfiguracji, czyli php.ini.

aha, czyli wtedy otwieram url poprzez fopen();
ale na nie własnym serwerze to nie zadziała ;-)
//EDIT:
zastosowałem takie metody:
<?php $ctx = stream_context_create(array( 'http' => array( 'timeout' => 1 ) ) ); $val=file_get_contents("http://www.net21.pl/index.php", 0, $ctx); echo('<pre>I funkcja:<br>'); print_r($ctx); print_r($val); echo('<hr><br>II Funkcja:<br>'); function file_post_contents($url,$headers=false) { $url = parse_url($url); if (!isset($url['port'])) { if ($url['scheme'] == 'http') { $url['port']=80; } elseif ($url['scheme'] == 'https') { $url['port']=443; } } $url['query']=isset($url['query'])?$url[' query']:''; $url['protocol']=$url['scheme'].'://'; $eol="\r\n"; $headers = "POST ".$url['protocol'].$url['host'].$url['path' ]." HTTP/1.0".$eol. "Host: ".$url['host'].$eol. "Referer: ".$url['protocol'].$url['host'].$url['path' ].$eol. "Content-Type: application/x-www-form-urlencoded".$eol. "Content-Length: ".strlen($url['query']).$eol. $eol.$url['query']; $fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30); if($fp) { fputs($fp, $headers); $result = ''; while(!feof($fp)) { $result .= fgets($fp, 128); } fclose($fp); if (!$headers) { //removes headers $pattern="/^.*\r\n\r\n/s"; $result=preg_replace($pattern,'',$result); } return $result; } } echo(file_post_contents('http://www.net21.pl/index.php',0)); echo('<hr>'); ?>
i wszystko działa
dzięki za pomoc
(temat do zamknięcia)
Użytkownik piotr94 edytował ten post 28 sierpień 2008, 11:39
imo tak będzie prościej
<?php $ch = curl_init("http://www.example.com/"); $fp = fopen("example_homepage.txt", "w"); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); fclose($fp); ?>
Przykład zerżnięty z manuala. W pliku example_homepage.txt będziesz miał zapisane źródło strony.

@Dawid-San:
Nie trzeba od razu rżnąć manuala, bo biblioteka cURL-a nie musi być załadowana, a i przykład zły, bo trzeba sięgać do pliku, a wystarczy odrobinę zmodyfikować kod i będzie zwracany wynik.
@piotr94:
I która funkcja zwraca wynik? Druga łączy się przez gniazdko (socket), ale pierwsza (choć trochę niepotrzebnie zaśmiecona tym ograniczeniem czasu), powinna równie dobrze działać.

Wynik zwracają obie. Nie ma żadnych błędów.
1 funkcja jest prostsza i działa zawsze. 2 miała problemy, gdy chciałem sczytać cokolwiek z google, ale za to w konwencjonalnych zastosowaniach pozwala na wyłuskiwanie dokładniejszych danych.
Dawid-San:
A co masz do manuala??
Na razie nie potrzebuje takiej funkcji do jakiegoś konkretnego projektu. Po prostu eksperymentuję dla przyjemności, a jak będę na tym opierał jakiś skrypt to wtedy dostosuję wszystko do własnych potrzeb i napiszę pewnie własną funkcję.

zerżnąłem manuala bo biblioteka ta jest do uruchomienia to raz, a dwa jest to dobry przykład, ponieważ sam go zastosowałem do pobrania źródła strony i spisał się świetnie. Masz rację bo małej modyfikacji będzie ładnie zwracał wynik, ale fundament solidny dostał więc nie widzę problemów

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.