file_get_contents関数はPHPのバッチデータ収集ではあまり使われませんが、少量であれば使いやすいだけでなく習得も容易なfile_get_contents関数を使用する方法を紹介します。 file_get_contents のプロセスで問題を解決します。
まず問題を見てみましょう
file_get_contents はポートを指定して URL を取得できません
例:
コードは次のとおりです | コードをコピー |
file_get_contents('http://localhost:12345'); |
得るものは何もありません。
解決策は: selinux をオフにすることです
1 永続的な方法 – サーバーを再起動する必要があります
/etc/selinux/config ファイルを変更して SELINUX=disabled を設定し、サーバーを再起動します。
2 一時的な方法 – システムパラメータを設定します
コマンド setenforce 0 を使用します
添付ファイル:
setenforce 1 SELinux を強制モードに設定します
setenforce 0 SELinux を許可モードに設定します
file_get_contents がタイムアウトしました
コードは次のとおりです | コードをコピー |
関数_file_get_contents($url)
|
コードは次のとおりです | コードをコピー |
//全国的には$REQUEST_URIにhtmlが含まれているかどうかが判定条件となります if (!strpos($_SERVER["REQUEST_URI"],".html")) { $page="http://qq.ip138.com/weather/"; $html = file_get_contents($page,'r'); $pattern="/全国の主要都市および郡における当日および今後 5 日間の天気傾向予測のオンライン クエリ(.*?) preg_match($pattern,$html,$pg); エコー「」 ; // 定期的にリモート アドレスをローカル アドレスに置き換えます $p=preg_replace('//weather/(w+)/index.htm/', 'tq.php/$1.html', $pg[1]); エコー $p } //都道府県、$REQUEST_URIが含まれるかどうかが判定条件? else if(!strpos($_SERVER["REQUEST_URI"],"?")){ //yoyo はデータを取得するためにセグメンテーションを使用することを推奨します。これは州名です $province=explode("/",$_SERVER["REQUEST_URI"]); $province=explode(".",$province[count($province)-1]); $province=$province[0] ; //コメントアウトしたのは自分で書いた正規表現です、書き方が悪い気もしますが、効果は上記と同じです 。 //preg_match('/[^/]+[.(html)]$/',$_SERVER["REQUEST_URI"],$pro); //$province=preg_replace('/.html/','',$pro[0]); $page="http://qq.ip138.com/weather/".$province."/index.htm"; //悪意のある入力アドレスによるエラーを防ぐために、HTML データを取得する前にページを開いてみてください if (!@fopen($page, "r")) { die("申し訳ありませんが、アドレスが存在しません!ここをクリックして戻る"); 終了(0); } $html = file_get_contents($page,'r'); $pattern="/5 日間の天気傾向予報(.*?)都市/市を入力してください preg_match($pattern,$html,$pg); エコー「」 ; //定期的な置換、都道府県、都市の取得 $p=preg_replace('//weather/(w+)/(w+).htm/', '$2.html?pro=$1', $pg[1]); エコー $p } 他 { //市、州を通過して取得 $pro=$_REQUEST['プロ'] $city=explode("/",$_SERVER["REQUEST_URI"]); $city=explode(".",$city[count($city)-1]); $city=$city[0] //preg_match('/[^/]+[.(html)]+[?]/',$_SERVER["REQUEST_URI"],$cit); //$city=preg_replace('/.html?/','',$cit[0]); $page="http://qq.ip138.com/weather/".$pro."/".$city.".htm"; if (!@fopen($page, "r")) { die("申し訳ありませんが、アドレスが存在しません!ここをクリックして戻る"); 終了(0); } $html = file_get_contents($page,'r'); $pattern="/5 日間の天気傾向予報(.*?)都市/市を入力してください preg_match($pattern,$html,$pg); エコー「」 ; //実際のイメージアドレスを取得します $p=preg_replace('//image//', 'http://qq.ip138.com/image/', $pg[1]); エコー $p } ?> 上記の方法でデータを収集できない場合は、それを使用してデータを処理できます コードは次のとおりです コードをコピー $url = "http://www.bKjia.c0m"; $ch =curl_init(); $タイムアウト = 5; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); //次の 2 行をユーザー検出が必要な Web ページに追加する必要があります //curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); //curl_setopt($ch, CURLOPT_USERPWD, US_NAME.":".US_PWD); $contents =curl_exec($ch); カール_クローズ($ch); $contents をエコーします。 ?> |