PHP使用pcntl_fork实现多进程下载图片的方法_php技巧_脚本之家

运行上面程序发现进程数指数增长
刚好是2^5=32个;原因是每一条都执行了while循环,到最后成了进程的指数增长——也就是说fork的时候把while循环也带了进去,父进程在执行fork的过程中;会得到子进程的进程号

1.首先在ubuntu下编译pcntl.so,我的ubuntu下找不到pcntl的包,于是创建一个文件夹下载了整个PHP包,在里面找到了pcntl包运行如下命令,代码如下:复制代码 代码如下:# mkdir php # cd php #
apt-get source php5 # cd php5-/ext/pcntl # phpize # ./configure #
make # make install phpize 命令是用来准备 PHP 外挂模块的编译环境的

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP进程与线程操作技巧总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《PHP数组操作技巧大全》、《php字符串用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

PHP pcntl_fork —
在当前进程当前位置产生分支,子进程,译注:fork是创建了一个子进程,父进程和子进程
都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程号,而子进程得到的是0.

译注:fork是创建了一个子进程,父进程和子进程
都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程号,而子进程得到的是0。失败时,在
父进程上下文返回-1,不会创建子进程,并且会引发一个PHP错误。

pcntl_exec — 在当前进程空间执行指定程序,代码如下:复制代码 代码如下:$cmds=array(
array('/home/jerry/projects/www/test2.php'),
array('/home/jerry/projects/www/test3.php') ); foreach{
$pid=pcntl_fork{ //进程创建失败 echo '创建子进程失败时返回-1'; exit{
//父进程会得到子进程号,所以这里是父进程执行的逻辑 pcntl_wait; } else{
//子进程处理逻辑 sleep; pcntl_exec; exit; }
}例,实例多图片同步下载,代码如下:复制代码
代码如下:#!/usr/bin/php $val) { $pid[$k] = pcntl_fork { download; //
子进程要exit否则会进行递归多进程,父进程不要exit否则终止多进程 exit { //
pcntl_waitpid($pid[$k], $status, WUNTRACED); } } echo "下载完成n";
list = explode; echo "用时:", - ,"n"; /** * 抓取网页图片 * */
function download { $pic_url = $val[1]; if !== 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 =
file_get_contents; if { return; } preg_match$@', $pic_url,
$tmp_matches); // 可使用assert处理异常 $pic_file_name =
$tmp_matches[1]; $f = fopen("tmp/".$pic_file_name, "wb"); #
fwrite; } /* End of file pcntl_fork.php */ ?>

希望本文所述对大家PHP程序设计有所帮助。

例:复制代码 代码如下:void
pcntl_新京葡娱乐场网址,exec(string $path [,array $args [,array $envs ]])

本文实例讲述了PHP多进程。分享给大家供大家参考,具体如下:

成功的安装将建立 extname.so 并放置于 PHP 的外挂模块目录中(预设存放于
/usr/lib/php/modules/ 内),需要调整 php.ini,加入 extension=extname.so
这一行之后才能使用此外挂模块.

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。