サンプルコード 1: file_get_contents を使用して get モードでコンテンツを取得します
コードをコピーします コードは次のとおりです:
< ;?php
$url='http://www.baidu.com/';
$html=file_get_contents($url);
//print_r($http_response_header); $html);
printhr();
printhr();
サンプルコード 2: fopen で URL を取得し、コンテンツを取得するメソッド
コードは次のとおりです。 >$fp=fopen($url,' r'); printarr(stream_get_meta_data($fp));
while(!feof($fp)); result.=fgets($fp,1024) ;}
echo "url body: $result";
fclose($fp); 🎜>
サンプル コード 3: file_get_contents 関数を使用して投稿モードで URL を取得します
コードをコピーします
コードは次のとおりです。
'http'=>array( 'method'=>'POST', 'header'=>"Content-type: application/x-www-form -urlencodedrn". "Content-Length: ".strlen( $data)."rn", 'content'=>$data
),);
$context =stream_context_create($opts);
$html=file_get_contents(' http://localhost/e/admin/test.html',false,$context);
サンプル コード 4: fsockopen 関数を使用します。 URL を開き、ヘッダーと本文を含む完全なデータを取得モードで取得します。
コードをコピーします
コードは次のとおりです:
functionget_url($url,$cookie=false){
$url=parse_url($url); $query=$url[パス]."?".$url[クエリ];
ec("クエリ:".$query);
$request="GET$ queryHTTP/1.1rn"; $request.="ホスト:$url[ホスト] rn"; $request.="接続: 閉じる"; if($cookie)$request.=" Cookie: $cookien"; $request.="rn";
fwrite ($fp,$request);while(!@feof($fp)){
$result.= @fgets($fp,1024);
}
fclose($fp) ;
}
}
// URL の HTML 部分を取得します。ヘッダーを削除します
functionGetUrlHTML($url,$cookie=false){
$rowdata=get_url ($url,$cookie)
if($rowdata)
{
$body= stristr($rowdata,"rnrn");
$body=substr($body,4,strlen ($body));
returnfalse;
?>
サンプルコード 5: fsockopen 関数で URL を開き、ヘッダーと本文を含む完全なデータを POST モードで取得します
コードをコピー
コードは次のとおりです:
>functionHTTP_Post($URL,$data,$cookie,$referrer=""){
/ / 指定された URL を解析します
$URL_Info=parse_url($URL);
// リファラーを構築します
if($referrer=="")// 指定されていない場合は、このスクリプトをリファラーとして使用します。
$referrer="111";
// $data から文字列を作成
// 必要なポートを調べます - 指定されていない場合は標準 (=80) を使用します if(!isset($URL_Info["port"])) $URL_Info["port"]=80 ;
// POST リクエストの構築:$request.="POST ".$URL_Info["path"]." HTTP/1.1n";
$request.="ホスト: ".$URL_Info["host"]."n";
$request.="リファラー:$referern";
$request.="Content-type: application/x-www-form-urlencodedn" ;
$request.="Content-length: ".strlen($data_string)."n ";
$request.="接続: 閉じる";
$request.="Cookie: $cookien ";
$request.="n";
$request.=$data_string. "n";
$fp=fsockopen($URL_Info["host"],$URL_Info[" port"]);
fputs($fp,$request); feof($fp)){
$result.=fgets($fp,1024);
fclose($fp);
return$result; ();
?>
サンプル コード 6:curl ライブラリを使用する場合は、ライブラリをカールする前に、php.ini をチェックして、curl 拡張機能が有効になっているかどうかを確認する必要があります。
コードをコピーします
コードは次のとおりです。
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, 'http://www.baidu.com/');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); $ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents ($ch);
echo $
?>
curl ライブラリについて:
curl 公式 Web サイト http://curl.haxx.se/
curl は、URL 構文を使用したファイル転送ツールで、FTP、FTPS、HTTP HTTPS SCP SFTP TFTP TELNET DICT FILE およびLDAP。 curl は、SSL 証明書、HTTP POST、HTTP PUT、FTP アップロード、Kerberos、HTTP ベースのアップロード、プロキシ、Cookie、ユーザー + パスワードの証明、ファイル転送の回復、http プロキシ チャネル、およびその他の多くの便利なトリックをサポートしています
コードをコピー コードは次のとおりです:
<
functionprintarr(array$arr)
{
echo"
";
foreach($arras$key=>$value)
{
echo"$key= $value < ;br>";
}
}
?>
コードをコピーします コードは次のとおりです:
/*
--------------------- ------------- -----------------------------
コードを取得するにはWeb ページのタイトルを入力するには、このコード スニペットを直接コピーし、.php ファイルとして保存して実行します。
---------------------- はい。 ------------------------ --------------
*/
error_reporting(7);
$file = fopen ("http://www.jb51.net /", "r");
if (!$file) {
echo "リモート ファイルを開けません。n";
exit;
}
while (!feof ($file)) {
$line = fgets ($file) , 1024);
if ("
php /* -- ----------------
DNSing Spider ----------------
*/
$ fp = fsockopen("www.dnsing.com", 80, $ errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)
n"; else {
$out = "GET / HTTP/1.1rn";
$out .= "ホスト:www.dnsing.comrn";
$out .= "接続: rnrn を閉じます"; );
while (!feof($fp)) {
echo fgets($fp, 128)
}
fclose ($fp);
?>
上記の 2 つのコード スニペットをコピーして実行し、効果を確認してください。上記の例は、Web ページ データをより適切に使用するためのプロトタイプです。したがって、プログラム愛好家にとっては状況が異なります。 、気をつけて勉強しましょう
===============================。 =
それは少し意味があります。関数は次のとおりです: get_content_by_socket()、get_url()、get_content_url()、get_content_object いくつかの関数を使用すると、いくつかのアイデアが得られるかもしれません。
//すべてのコンテンツ URL を取得し、ファイルに保存します
function get_index($save_file, $prefix="index_"){
$count = 68; 🎜> $i = 1;
if (file_exists($save_file)) @unlink($save_file);
$fp = fopen($save_file, "a ") または die("Open ". $save_file . " 失敗しました ");
while($i<$count){
$url = $prefix .".htm";
echo ". $url ." ;
$url_str = get_content_url(get_url($url));
echo " OKn";
$i>; ($ fp);
}
//ターゲットのマルチメディア オブジェクトを取得します
function get_object($url_file, $save_file, $split="|--:**:--|") {
if (!file_exists($url_file)) die($url_file ." 存在しません");
$file_arr = file($url_file);
if (!is_array($file_arr) || 空($file_arr )) die($url_file ." コンテンツではありません");
$url_arr = array_unique($file_arr)
if (file_exists($save_file)) @unlink($save_file); fp = fopen ($save_file, "a ") または die("保存ファイルを開く ". $save_file ." 失敗しました");
foreach($url_arr as $url){
if (empty($url) ) 続行;
$html_str = get_url);
echo $url; ;
$obj_str = get_content_str);
echo " OKn";
fclose($fp);
// ディレクトリを走査してファイルの内容を取得します
function get_dir($save_file, $dir){
$dp = opendir($dir)
if (file_exists($save_file); )) @unlink($ save_file);
$fp = fopen($save_file, "a ") または die("保存ファイル ". $save_file ." を開くことができませんでした"); readdir($dp)) != false){
if ($file!="." && $file!=".."){
echo "ファイルを読み取ります ". $file ."... ";
$ file_content = file_get_contents($dir . $file);
$obj_str = get_content_object($file_content);
echo " OKn";
fwrite($fp, $obj_str);
}
}
fclose($fp);
}
//指定された URL コンテンツを取得します
function get_url($url){
$ reg = '/^http: //[^/]. $/'
if (!preg_match($reg, $url)) die($url ." 無効"); ($url, "r" ) または die("URL を開く: ". $url ." に失敗しました。");
while($fc = fread($fp, 8192)){
$content .= $fc;
}
fclose($fp);
if (empty($content)){
die("URL の取得に失敗しました。"); 🎜>}
return $content;
}
//ソケットを使用して指定された Web ページを取得します
function get_content_by_socket($url, $host){
$fp = fsockopen ($host, 80) または die(" Open ". $url ." 失敗しました");
$header = "GET /".$url ." HTTP/1.1rn"; Accept: */*rn";
$header .= "Accept-Language: zh-cnrn";
$header .= "Accept-Encoding: gzip, deflatern";
$header .= "ユーザー エージェント: Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)rn";
$header .= "ホスト: ". $host . "rn";
$header . = "接続: Keep-Alivern";
//$header .= "Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755-rnrn";
$header .= "接続: Closernrn";
fwrite($fp, $header);
while (!feof($fp)) {
$contents .= fgets( $fp, 8192);
}
fclose($fp);
return $contents;
// 指定されたコンテンツの URL を取得します。 >function get_content_url($host_url, $file_contents){
//$reg = '/^(#|javascript.*?|ftp://. |http://. |.*?href. *?|play.*?|index.* ?|.*?asp) $/i'
//$reg = '/^(down.*?.html|d _d .htm.*?) $/i';
$rex = "/([hH][rR][eE][Ff])s*=s*['"]*([^>'"s] )["' >]*s*/i";
$reg = '/^(down.*?.html)$/i';
preg_match_all ($rex, $file_contents, $r);
$result = ""; //array() ;
foreach($r as $c){
if (is_array($c)){
foreach($c as $d){ >if (preg_match($reg, $d) ){ $result .= $host_url . $d."n" }
}
}
return
; }
//content で指定されたマルチメディア ファイルを取得します
function get_content_object($str, $split="|--:**:--|"){
$regx = "/ hrefs*=s*['"]*( [^>'"s] )["'>]*s*(.*?)/i"; preg_match_all($regx, $str, $result) ;
if (count($result) == 3){
$result[2] = str_replace("マルチメディア: ", "", $result[2]);
$result[2] = str_replace("", "", $result[2]); [0] .$result[2 ][0] . "n"
}
; =========== ====================================== ====
同じ ドメイン名が複数の IP に対応する場合、リモート Web ページのコンテンツを取得する PHP の機能
fgc は単純にそれを読み取り、すべての操作をカプセル化します
fopen も実行しますいくつかのカプセル化が行われますが、すべてのデータをループで読み取る必要があります。
fsockopen これは直線のソケット操作です。
HTML ページを読むだけの場合は、fgc の方が適しています。
会社がファイアウォールを介してインターネットにアクセスしている場合、一般的な file_get_content 関数は機能しません。もちろん、いくつかのソケット操作を通じて http リクエストをプロキシに直接書き込むこともできますが、それはより面倒です。
ファイルが小さいことが確認できた場合は、上記の 2 つのメソッド fopen,join('',file($file)); のいずれかを選択できます。たとえば、1k 未満のファイルのみを操作する場合は、file_get_contents を使用するのが最適です。
ファイルが大きいことが確実な場合、またはファイルのサイズを特定できない場合は、ファイル ストリームを使用するのが最善です。 1K ファイルを開くことと 1G ファイルを開くことの間に明らかな違いはありません。コンテンツが長い場合、スクリプトを読み終えるのではなく、読むのに時間がかかります。
------------------------------------------ ------ --------
http://www.phpcake.cn/archives/tag/fsockopen
PHP には、独自のメソッドを使用するなど、リモート Web コンテンツを取得するさまざまな方法があります。 file_get_contents や fopen などの関数。
echo file_get_contents("http://img.jb51.net/abc.php");
?> ただし、DNS ではクエリなどの負荷分散では、同じドメイン名が複数のサーバー、複数のIPに対応する場合があります。 img.jb51.net は、DNS によって 72.249.146.213、72.249.146.214、および 72.249.146.215 の 3 つの IP に解決されると仮定します。ユーザーが img.jb51.net にアクセスするたびに、システムは、対応する負荷分散アルゴリズム。
先週、ビデオ プロジェクトに取り組んでいたときに、このような要件に遭遇しました。このサーバーの送信ステータスをクエリするために、各サーバー上の PHP インターフェイス プログラム (abc.php とします) にアクセスする必要がありました。
現時点では、file_get_contents を使用して http://img.jb51.net/abc.php に直接アクセスすることはできません。特定のサーバーに繰り返しアクセスし続ける可能性があるためです。
そして、http://72.249.146.213/abc.php、http://72.249.146.214/abc.php、http://72.249.146.215/abc.php に順番にアクセスする方法を使用して、こちら 3台のWebサーバーに複数の仮想ホストが搭載されている場合も不可です。
ホストは同じドメイン名に対応する複数の IP を設定できないため、ローカルホストを設定することはできません。
これは、PHP および HTTP プロトコルを通じてのみ実現できます。abc.php にアクセスするときに、ヘッダーに img.jb51.net ドメイン名を追加します。そこで、次の PHP 関数を作成しました。
コードをコピー コードは次のとおりです。
/************************
* 機能の使い方: 同一ドメイン名が複数のIPに対応する場合、指定したサーバーのリモートWebページのコンテンツを取得
* 作成時刻:2008-12-09
* 作成者: Zhang Yan (img.jb51.net)
* パラメータの説明:
* $ip サーバーの IP アドレス
* $host サーバーのホスト名
* $url サーバーの URL アドレス (ドメイン名を除く)
* 戻り値:
* リモート Web ページのコンテンツを取得しました
* false リモート Web にアクセスできませんでしたページ
******* *****************/
関数 HttpVisit($ip, $host, $url)
{
$errstr = '';
$errno = ''; 🎜> $fp = fsockopen ($ip, 80, $errno, $errstr, 90);
if (!$fp)
{
return false
}
else
{
$out = "GET {$url} HTTP/1.1rn";
$out .= "ホスト:{$host}rn";
$out .= "接続: closenrn";
fputs ($fp, $out);
while($line = fread($fp, 4096)){
$response .= $line>}
fclose; ( $ fp );
//ヘッダーヘッダー情報を削除します
$pos = strpos($response, "rnrn");
$response = substr($response, $pos 4); 🎜>
return $response;
}
}
//メソッドの呼び出し:
$server_info1 = HttpVisit("72.249.146.213", "img.jb51.net", "/abc.php");
$server_info2 = HttpVisit("72.249.146.214", "img.jb51.net", "/abc.php"); ", "img.jb51.net", "/abc.php");
?>