頁面1.php里面寫具體的執(zhí)行語句
創(chuàng)新互聯(lián)主要從事做網(wǎng)站、成都做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)克拉瑪依,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
頁面2.php直接使用curl調(diào)用頁面1.php 并設(shè)置超時(shí)時(shí)間;根據(jù)你自己的需求寫但是你不一定如果超時(shí)時(shí)間內(nèi) 數(shù)據(jù)庫沒執(zhí)行玩 那你可能就獲取不到插入結(jié)果了
訪問2.php應(yīng)該就是你說的異步了
使用Ajax 與 img 標(biāo)記
原理,服務(wù)器返回的html中插入Ajax 代碼或 img 標(biāo)記,img的src為需要執(zhí)行的程序。
優(yōu)點(diǎn):實(shí)現(xiàn)簡單,服務(wù)端無需執(zhí)行任何調(diào)用
缺點(diǎn):在執(zhí)行期間,瀏覽器會(huì)一直處于loading狀態(tài),因此這種方法并不算真正的異步調(diào)用。
$.get("doRequest.php",?{?name:?"fdipzone"}?);
img?src="doRequest.php?name=fdipzone"
使用popen
使用popen執(zhí)行命令,語法:
優(yōu)點(diǎn):執(zhí)行速度快
缺點(diǎn):
1).只能在本機(jī)執(zhí)行
2).不能傳遞大量參數(shù)
3).訪問量高時(shí)會(huì)創(chuàng)建很多進(jìn)程
//?popen?—?打開進(jìn)程文件指針??
resource?popen?(?string?$command?,?string?$mode?)
pclose(popen('php?/home/fdipzone/doRequest.php?',?'r'));
使用curl
設(shè)置curl的超時(shí)時(shí)間 CURLOPT_TIMEOUT 為1 (最小為1),因此客戶端需要等待1秒
?php?
$ch?=?curl_init();?
$curl_opt?=?array(?
CURLOPT_URL,?''
CURLOPT_RETURNTRANSFER,1,?
CURLOPT_TIMEOUT,1?
);?
curl_setopt_array($ch,?$curl_opt);?
curl_exec($ch);?
curl_close($ch);?
?
使用fsockopen
fsockopen是最好的,缺點(diǎn)是需要自己拼接header部分。
?php?
$url?=?'';?
$param?=?array(?
'name'='fdipzone',?
'gender'='male',?
'age'=30?
);?
doRequest($url,?$param);?
function?doRequest($url,?$param=array()){?
$urlinfo?=?parse_url($url);?
$host?=?$urlinfo['host'];?
$path?=?$urlinfo['path'];?
$query?=?isset($param)??http_build_query($param)?:?'';?
$port?=?80;?
$errno?=?0;?
$errstr?=?'';?
$timeout?=?10;?
$fp?=?fsockopen($host,?$port,?$errno,?$errstr,?$timeout);?
$out?=?"POST?".$path."?HTTP/1.1\r\n";?
$out?.=?"host:".$host."\r\n";?
$out?.=?"content-length:".strlen($query)."\r\n";?
$out?.=?"content-type:application/x-www-form-urlencoded\r\n";?
$out?.=?"connection:close\r\n\r\n";?
$out?.=?$query;?
fputs($fp,?$out);?
fclose($fp);?
}?
?
注意:當(dāng)執(zhí)行過程中,客戶端連接斷開或連接超時(shí),都會(huì)有可能造成執(zhí)行不完整,因此需要加上
ignore_user_abort(true);?//?忽略客戶端斷開?
set_time_limit(0);????//?設(shè)置執(zhí)行不超時(shí)
ajax會(huì)嗎 不要給action加提交鏈接 給form設(shè)一個(gè)點(diǎn)擊事件,用js獲取input的值 用axaj提交并返回
利用php的系統(tǒng)調(diào)用,開啟新的進(jìn)程來實(shí)現(xiàn)。
php
提供了fsockopen函數(shù),此函數(shù)的功能為初始化一個(gè)套接字連接到指定主機(jī),默認(rèn)情況下將以阻塞模式開啟套接字連接。當(dāng)然你可以通過stream_set_blocking()將它轉(zhuǎn)換到非阻塞模式。這是關(guān)鍵。所以,思路就是:開啟一個(gè)非阻塞的套接字連接到本機(jī),本機(jī)收到之后作一些耗時(shí)處理。
首先看你Ajax是通過哪種提交方式提交的,比如說你設(shè)置的Ajax是通過post方式提交的 那后臺(tái)PHP直接就通過$_post['']獲取到傳過來的值 關(guān)于你說的這個(gè)異步上傳 最好是使用一些插件 我之前用過一個(gè)jQuery的異步上傳的插件不錯(cuò) 我這里也有源碼 這個(gè)是我的博客 上面寫的很詳細(xì) 另外那個(gè)插件我也也有 給分我傳你郵箱
首先 php 7以下 不支持異步方式(有個(gè)類庫 可以勉強(qiáng)算是支持了異步 名字忘了)
其次 php腳本 由于是逐行解析的,不常駐線程(當(dāng)然可以設(shè)置為永久連接,不自動(dòng)超時(shí)退出) 異步意義不大。
第三 我懷疑你是想問javascript的異步請(qǐng)求? 如何用php處理?
如果沒問錯(cuò)的話 可以用其他方式來解決異步問題,就是同時(shí)發(fā)出多個(gè)web request請(qǐng)求 等多個(gè)請(qǐng)求成功之后將結(jié)果寫入數(shù)據(jù)庫(文件) 然后 有一個(gè) 一直在等待結(jié)果的php請(qǐng)求進(jìn)程 一旦讀取到了這個(gè)寫入完畢的(數(shù)據(jù)庫)文件結(jié)果 馬上返回給瀏覽器