ここでは、URL を「,」で区切った文字列に結合して、クロスドメインのニーズに対応しています。getjson に関するいくつかの一般的な問題については、「いくつかの問題」を参照してください。 $.getjson> で遭遇しました
// 365 枚の写真を取得
error_reporting(E_ALL ^ E_NOT ICE);
set_time_limit(0);//PHP タイムアウトを設定します
/* *
* 現在時刻を取得します
*/
function getMicrotime() {
list ($usec, $sec) =explode(" ", microtime()); (float) $usec + (float) $sec);
$stime = getMicrotime();
$hrefs = $_GET['hrefs']; urlarray =explode(',',$hrefs);
//指定されたurlからすべての画像を取得します
function getimgs($url){
$dirname =basename($url,".php"); file_exists($dirname)){
mkdir('365/'.$dirname.'');
$data = file_get_contents($url);
preg_match_all("/(href|src); (["|']?)([^ "'> ]+.(jpg|png|PNG|JPG|gif))2/i", $data, $matches);
//$matches[3] = array_unique($matches[3]);
$i=0;
if(count($matches[3])>0){
foreach($matches[3]) k=>$v){
//相対パスではなく標準URLかどうかの簡易判定
if(substr($v,0,4)=='http'){
$ext = pathinfo($v ,PATHINFO_EXTENSION);//画像拡張子
if(!file_exists( '365/'.$dirname.'/'.$k.'.'.$ext)){
file_put_contents('365/'.$dirname. '/'.$k.'.'.$ext,file_get_contents ($v));
}else{
unset($v);
clearstatcache(); $v);
}
}
unset($matches);
return $i;
}
foreach($urlarray as $k=>$v){
if($v!='') {
$j +=getimgs($v);
}
}
$etime = getMicrotime();
echo "合計 ".$j." の写真が収集されました。"; etime-$stime)."秒";
パフォーマンスの問題を考慮: getimgs メソッドで使用される変数は、メモリを解放するために使用後に設定解除されます。
それが標準の有効な画像 URL であるかどうかを判断するために設計されたいくつかの知識ポイント
if(substr($v,0,4)=='http') これは、一致した画像 URL が標準 URL であるかどうかを単純に判断するだけです。収集された画像には相対パスがある可能性があるため、ここではこの種の画像の収集を直接放棄します。もちろん、この種の画像を標準の画像パスに復元することもできます。次のような URL 形式 画像がまだ存在するかどうかわからないため、画像が収集されない可能性があります。画像の URL が有効ではない可能性があります。画像の URL が本物で有効であるかどうかをより厳密に判断したい場合は、次のようにします。以前の「PHP でリモート URL が有効かどうかを確認する」を読むことをお勧めします。 いくつかの方法》 有効な URL かどうかを確認するには 3 つの方法があります。
画像形式を取得する
$ext = pathinfo($v,PATHINFO_EXTENSION);//画像拡張子
ここでは pathinfo メソッドを使用して、ファイル形式を取得する方法は 7 つあります。 7つのフォーマット方法》
ダウンロードしてローカルに保存
file_put_contents('365/'.$dirname.'/'.$k.'.'.$ext,file_get_contents($v));文字列をファイルに書き込みます。
fopen()、fwrite()、fclose() を順番に呼び出すのと同じ関数。
file_get_contents() 関数は、ファイル全体を文字列に読み取ります。
サーバーが file_get_contents をサポートしているため、サーバーがこの機能を無効にしている場合、このツールは file_get_contents よりも強力です。「CURL の学習と応用 (マルチスレッド)」を学習することをお勧めします。マルチスレッドのダウンロード ストレージの効果はさらに素晴らしいです
ファイル操作キャッシュをクリアします
clearstatcache() 関数はファイル ステータス キャッシュをクリアします。 clearstatcache() 関数は、特定の関数から返された情報をキャッシュして、パフォーマンスを向上させます。ただし、スクリプト内で同じファイルを複数回チェックし、スクリプトの実行中にファイルが削除または変更される危険性がある場合など、正しい結果を得るためにファイル ステータス キャッシュをクリアする必要がある場合があります。これを行うには、clearstatcache() 関数を使用します。公式マニュアル: プログラム実行時間の計算
コードをコピー
コードは以下の通り: /**
* 現在時刻を取得します
*/
function getMicrotime() {
list ($usec, $sec ) =explode (" ", microtime());
return ((float) $usec + (float) $sec);
このブログ記事「PHP ページの実行時間の取得;」を参照してください。読み取りと書き込み時間、関数の呼び出し回数など [THINKPHP]》
最後に効果を見てみましょう
409 秒で 214 枚の写真を収集し、約 2 秒で 1 枚の写真をダウンロードして保存しました。写真のサイズは約62Mで、次のようになります:

1つの60*60時間で、約1800枚の美しい女性の写真をダウンロードできます。
http://www.bkjia.com/PHPjc/327182.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/327182.html技術記事設計思想としては、単にWebページから画像を収集するのは面倒なので、その一覧ページを直接収集し、その一覧のURLを取得して一つずつ収集するのですが、一覧ページとの照合にはphpを使用します。 .