本文实例讲述了PHP编程实现脚本异步执行的方法。分享给大家供大家参考,具体如下:
php语言得用fsockopen()
函数,实现脚本异步运行,代码如下
异步请求函数(用debug参数若为true则为用为调试,开启调试可以看到异步的执行情况,但是失去异步的效果)
main.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<?php
function request_by_fsockopen( $url , $post_data = array (), $debug =false){
$url_array = parse_url ( $url );
$hostname = $url_array [ 'host' ];
$port = isset( $url_array [ 'port' ])? $url_array [ 'port' ] : 80;
@ $requestPath = $url_array [ 'path' ] . "?" . $url_array [ 'query' ];
$fp = fsockopen ( $hostname , $port , $errno , $errstr , 10);
if (! $fp ) {
echo "$errstr ($errno)" ;
return false;
}
$method = "GET" ;
if (! empty ( $post_data )){
$method = "POST" ;
}
$header = "$method $requestPath HTTP/1.1\r\n" ;
$header .= "Host: $hostname\r\n" ;
if (! empty ( $post_data )){
$_post = strval (NULL);
foreach ( $post_data as $k => $v ){
$_post []= $k . "=" .urlencode( $v ); //必须做url转码以防模拟post提交的数据中有&符而导致post参数键值对紊乱
}
$_post = implode( '&' , $_post );
$header .= "Content-Type: application/x-www-form-urlencoded\r\n" ; //POST数据
$header .= "Content-Length: " . strlen ( $_post ) . "\r\n" ; //POST数据的长度
$header .= "Connection: Close\r\n\r\n" ; //长连接关闭
$header .= $_post ; //传递POST数据
} else {
$header .= "Connection: Close\r\n\r\n" ; //长连接关闭
}
fwrite( $fp , $header );
//-----------------调试代码区间-----------------
//注如果开启下面的注释,异步将不生效可是方便调试
if ( $debug ){
$html = '' ;
while (! feof ( $fp )) {
$html .= fgets ( $fp );
}
echo $html ;
}
//-----------------调试代码区间-----------------
fclose( $fp );
}
$data = array ( 'name' => 'guoyu' , 'pwd' => '123456' );
$url = 'http://localhost/test/other.php' ;
request_by_fsockopen( $url , $data ,true); //
|
other.php
1
2
3
4
5
6
7
8
9
10
11
|
<?php
header( "content-type:text/html;charset=utf-8" );
//error_reporting(0);
//ini_set('html_errors',false);
//ini_set('display_errors',false);
$name = isset( $_POST [ 'name' ])? $_POST [ 'name' ]: '' ;
$pwd = isset( $_POST [ 'pwd' ])? $_POST [ 'pwd' ]: '' ;
echo $name . $pwd ;
echo 'success ok' ;
die ;
?>
|
使用实例:
[运行的main.php主脚本文件]
1
2
3
|
$data = array ( 'name' => 'guoyu' , 'pwd' => '123456' );
$url = 'http://localhost/test/other.php' ;
request_by_fsockopen( $url , $data ,true); //把应用B的用户表异步-同步数据
|
[导步执行文件other.php]
在other.php中便可以用$_POST接收main.php提交过来的参数,从而进行下一步操作
希望本文所述对大家PHP程序设计有所帮助。
原文链接:http://blog.csdn.net/phpfenghuo/article/details/45132395