この記事の例では、PHP が pcntl_fork を使用して画像のマルチプロセス ダウンロードを実装する方法を説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
PHP pcntl_fork — 現在のプロセスの現在位置にブランチ、子プロセスを生成します。 注釈: fork は、親プロセスと子プロセスの両方がフォーク位置から実行を継続することです。親プロセスを実行すると、fork の戻り値は子プロセス番号となり、子プロセスは 0 を取得します。
注: PHP にはマルチプロセスを実装できる pcntl_fork 関数がありますが、pcntl 拡張機能をロードする必要があり、この拡張機能は Linux でのみコンパイルできます。
1. まず、ubuntu で pcntl.so をコンパイルします。ubuntu で pcntl パッケージが見つからなかったので、フォルダーを作成し、その中に pcntl パッケージ全体をダウンロードして、次のコマンドを実行しました。は次のとおりです:
インストールが成功すると extname.so が作成され、PHP のプラグイン モジュール ディレクトリに配置されます (デフォルトでは /usr/lib/php/modules/ に保存されます)。php.ini を調整して行を追加する必要があります。 extension=extname.so。この場合のみ、このプラグイン モジュールを使用できます。
#!/usr/bin/php
// クロールする必要がある Web ページのアドレス
$url = 'http://www.bkjia.com';
$content = ファイル_get_contents($url);
preg_match_all('/
list($sm, $ss) =explode(" ", microtime());
foreach ($k => $val として $matches)
{
$pid[$k] = pcntl_fork();
if(!$pid[$k])
{
ダウンロード($url, $val);
// 子プロセスは終了する必要があります。終了しないと、再帰的なマルチプロセスが実行されます。親プロセスは終了しません。終了しないと、マルチプロセスが終了します。
終了(0);
}
if ($pid[$k])
{
// pcntl_waitpid($pid[$k], $status, WUNTRACED);
}
}
エコー「ダウンロードが完了しました」
list($em, $es) =explode(" ", microtime());
echo "所要時間:",($es+$em) - ($ss + $sm),"n";
/**
* ウェブ画像を取得
*
*/
関数ダウンロード($url, $val)
{
$pic_url = $val[1];
if (strpos($val[1], '//') !== false)
{
;
}
elseif (preg_match('@^(.*?)/@', $val[1], $inner_matches) == 0)
{
$pic_url = $url.$val[1];
}
elseif (preg_match('@[:.]@', $inner_matches[1], $tmp_matches) == 0)
{
$pic_url = $url.$val[1];
}
$pic = ファイル_get_contents($pic_url);
if ($pic === false)
{
戻る
}
preg_match('@/([^/]+)$@', $pic_url, $tmp_matches);
// Assert を使用して例外を処理できます
$pic_file_name = $tmp_matches[1];
$f = fopen("tmp/".$pic_file_name, "wb");
fwrite($f, $pic);
fclose($f);
}
/* ファイルの終わり pcntl_fork.php */
?>
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
http://www.bkjia.com/PHPjc/928221.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/928221.html
技術記事
PHP は、pcntl_fork を使用して画像のマルチプロセスのダウンロードを実装します。この記事では、pcntl_fork を使用して画像のマルチプロセスのダウンロードを実装する PHP の例について説明します。参考のためにみんなで共有してください。詳細な分析...