PHP編程實(shí)現(xiàn)腳本異步執(zhí)行的方法
本文實(shí)例講述了PHP編程實(shí)現(xiàn)腳本異步執(zhí)行的方法。分享給大家供大家參考,具體如下:
php語(yǔ)言得用fsockopen()
函數(shù),實(shí)現(xiàn)腳本異步運(yùn)行,代碼如下
異步請(qǐng)求函數(shù)(用debug參數(shù)若為true則為用為調(diào)試,開啟調(diào)試可以看到異步的執(zhí)行情況,但是失去異步的效果)
main.php
<?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轉(zhuǎn)碼以防模擬post提交的數(shù)據(jù)中有&符而導(dǎo)致post參數(shù)鍵值對(duì)紊亂 } $_post = implode('&', $_post); $header .= "Content-Type: application/x-www-form-urlencoded\r\n";//POST數(shù)據(jù) $header .= "Content-Length: ". strlen($_post) ."\r\n";//POST數(shù)據(jù)的長(zhǎng)度 $header.="Connection: Close\r\n\r\n";//長(zhǎng)連接關(guān)閉 $header .= $_post; //傳遞POST數(shù)據(jù) }else{ $header.="Connection: Close\r\n\r\n";//長(zhǎng)連接關(guān)閉 } fwrite($fp, $header); //-----------------調(diào)試代碼區(qū)間----------------- //注如果開啟下面的注釋,異步將不生效可是方便調(diào)試 if($debug){ $html = ''; while (!feof($fp)) { $html.=fgets($fp); } echo $html; } //-----------------調(diào)試代碼區(qū)間----------------- fclose($fp); } $data=array('name'=>'guoyu','pwd'=>'123456'); $url='http://localhost/test/other.php'; request_by_fsockopen($url,$data,true);//
other.php
<?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; ?>
使用實(shí)例:
[運(yùn)行的main.php主腳本文件]
$data=array('name'=>'guoyu','pwd'=>'123456'); $url='http://localhost/test/other.php'; request_by_fsockopen($url,$data,true);//把應(yīng)用B的用戶表異步-同步數(shù)據(jù)
[導(dǎo)步執(zhí)行文件other.php]
在other.php中便可以用$_POST接收main.php提交過(guò)來(lái)的參數(shù),從而進(jìn)行下一步操作
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php socket用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《php curl用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》及《php字符串(string)用法總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- PHP 執(zhí)行系統(tǒng)外部命令 system() exec() passthru()
- PHP用反撇號(hào)執(zhí)行外部命令
- PHP 中執(zhí)行系統(tǒng)外部命令
- PHP在linux上執(zhí)行外部命令的方法
- php外部執(zhí)行命令函數(shù)用法小結(jié)
- 在PHP中執(zhí)行系統(tǒng)外部命令
- Ubuntu系統(tǒng)下用Crontab命令定時(shí)執(zhí)行PHP文件詳解
- 如何離線執(zhí)行php任務(wù)
- linux系統(tǒng)下定時(shí)執(zhí)行php腳本的方法
- 淺談PHP命令執(zhí)行php文件需要注意的問(wèn)題
- PHP實(shí)現(xiàn)執(zhí)行外部程序的方法詳解
相關(guān)文章
PHP簡(jiǎn)單實(shí)現(xiàn)模擬登陸功能示例
這篇文章主要介紹了PHP簡(jiǎn)單實(shí)現(xiàn)模擬登陸功能,涉及php使用curl實(shí)現(xiàn)模擬登陸的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09PHP正則刪除html代碼中a標(biāo)簽并保留標(biāo)簽內(nèi)容的方法
這篇文章主要介紹了PHP正則刪除html代碼中a標(biāo)簽并保留標(biāo)簽內(nèi)容的方法,涉及php基于正則的字符串匹配與子表達(dá)式操作相關(guān)技巧,需要的朋友可以參考下2017-05-05php格式化時(shí)間戳顯示友好的時(shí)間實(shí)現(xiàn)思路及代碼
顯示為2014-10-20 10:22顯得很呆板,那么用php怎么實(shí)現(xiàn)友好的時(shí)間格式呢?下面將思路與實(shí)現(xiàn)代碼與大家分享下2014-10-10PHP下ajax跨域的解決方案之jsonp實(shí)例分析
這篇文章主要介紹了PHP下ajax跨域的解決方案之jsonp,結(jié)合實(shí)例形式分析了PHP ajax跨域的解決方案jsonp相關(guān)原理、實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2020-03-03PHP如何實(shí)現(xiàn)給頁(yè)面設(shè)置獨(dú)立訪問(wèn)密碼
這篇文章主要為大家詳細(xì)介紹了PHP如何實(shí)現(xiàn)給頁(yè)面設(shè)置獨(dú)立訪問(wèn)密碼,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以了解下2024-03-03PHP實(shí)現(xiàn)事件機(jī)制實(shí)例分析
這篇文章主要介紹了PHP實(shí)現(xiàn)事件機(jī)制的方法,實(shí)例分析了事件機(jī)制的原理與php的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-06-06