ホームページ  >  記事  >  バックエンド開発  >  php file_get_contents データ収集と一般的な問題解決_PHP チュートリアル

php file_get_contents データ収集と一般的な問題解決_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:44:451058ブラウズ

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)
{
$context = stream_context_create(array(
'http' => 配列(
; 'timeout' => 180 //タイムアウト時間、単位は秒
)
)); @file_get_contents($url, 0, $context) を返します;

}

コードは次のとおりです コードをコピー
//全国的には$REQUEST_URIにhtmlが含まれているかどうかが判定条件となります
if (!strpos($_SERVER["REQUEST_URI"],".html"))
{
$page="http://qq.ip138.com/weather/"; $html = file_get_contents($page,'r'); $pattern="/全国の主要都市および郡における当日および今後 5 日間の天気傾向予測のオンライン クエリ(.*?)
/し"; // 通常の試合間の html
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 をエコーし​​ます。 ?>





www.bkjia.com本当http://www.bkjia.com/PHPjc/633074.html技術記事バッチデータ収集では、PHPではfile_get_contents関数を使用することはほとんどありませんが、少量であればfile_get_contents関数を使用すると使いやすいだけでなく...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。