ďťż
Podstrony
|
telcocafeJak 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 |
|||
Sitedesign by AltusUmbrae. |