導航:首頁 > 編程語言 > php非同步

php非同步

發布時間:2022-02-05 21:24:15

1. php中非同步訪問

這個推薦你用jquery來實現.
jquery的ajax實現中,直接有對json的處理.
=========
jquery的手冊中的例子
=============
從 test.js 載入 JSON 數據,附加參數,顯示 JSON 數據中一個 name 欄位數據。

jQuery 代碼:

$.getJSON("test.js", { name: "John", time: "2pm" }, function(json){
alert("JSON Data: " + json.users[3].name);
});

2. php 延遲非同步執行執行怎麼做

用js,給b方法加個setTimeout()定時器,設定20秒後執行b方法即可,其他方法正常運行。

3. PHP怎樣才能非同步發送郵件

<?php
$domain="domain";
$url="/system_mail.php";
$par="email=".implode(',',$emailarr)."&........";
$header="POST$urlHTTP/1.0 ";
$header.="Content-Type:application/x-www-form-urlencoded ";
$header.="Content-Length:".strlen($par)." ";
$fp=@fsockopen($domain,80,$errno,$errstr,30);
fputs($fp,$header.$par);
fclose($fp);

echo''發送完畢';
?>

4. php 同步編程和非同步編程的區別

傳統的同步編程是一種請求響應模型,調用一個方法,等待其響應返回.

非同步編程就是要重新考慮是否需要響應的問題,也就是縮小需要響應的地方。因為越快獲得響應,就是越同步化,順序化,事務化,性能差化。

非同步編程通常是通過fire and forget方式實現,發射事件後即忘記,做別的事情了,無需立即等待剛才發射的響應結果了。(發射事件的地方稱為生產者,而將在另外一個地方響應事件的處理者稱為消費者).非同步編程是一種事件驅動編程,需要完全改變思路,將「請求響應」的思路轉變到「事件驅動」思路上,是一種軟體編程思維的轉變.

5. php是否有非同步函數

沒有這樣的,除非你在兩個方法之間加上sleep(5);
執行時間差5秒

6. PHP非同步處理有哪些方法

客戶端與伺服器端是通過HTTP協議進行連接通訊,客戶端發起請求,伺服器端接收到請求後執行處理,並返回處理結果。
有時伺服器需要執行很耗時的操作,這個操作的結果並不需要返回給客戶端。但因為php是同步執行的,所以客戶端需要等待服務處理完才可以進行下一步。
因此對於耗時的操作適合非同步執行,伺服器接收到請求後,處理完客戶端需要的數據就返回,再非同步在伺服器執行耗時的操作。
1.使用Ajax 與 img 標記
原理,伺服器返回的html中插入Ajax 代碼或 img 標記,img的src為需要執行的程序。
優點:實現簡單,服務端無需執行任何調用
缺點:在執行期間,瀏覽器會一直處於loading狀態,因此這種方法並不算真正的非同步調用。

$.get("doRequest.php", { name: "fdipzone"} );
<img src="doRequest.php?name=fdipzone">

2.使用popen
使用popen執行命令,語法:

// popen — 打開進程文件指針
resource popen ( string $command , string $mode )
pclose(popen('php /home/fdipzone/doRequest.php &', 'r'));

優點:執行速度快
缺點:

1).只能在本機執行
2).不能傳遞大量參數
3).訪問量高時會創建很多進程
3.使用curl
設置curl的超時時間 CURLOPT_TIMEOUT 為1 (最小為1),因此客戶端需要等待1秒

<?php
$ch = curl_init();
$curl_opt = array(
CURLOPT_URL, 'http://www.example.com/doRequest.php'
CURLOPT_RETURNTRANSFER,1,
CURLOPT_TIMEOUT,1
);
curl_setopt_array($ch, $curl_opt);
curl_exec($ch);
curl_close($ch);
?>

4.使用fsockopen
fsockopen是最好的,缺點是需要自己拼接header部分。

<?php

$url = 'http://www.example.com/doRequest.php';
$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);
}

?>

注意:當執行過程中,客戶端連接斷開或連接超時,都會有可能造成執行不完整,因此需要加上

ignore_user_abort(true); // 忽略客戶端斷開
set_time_limit(0); // 設置執行不超時

7. php 怎樣實現非同步處理介面

首先 php 7以下 不支持非同步方式(有個類庫 可以勉強算是支持了非同步 名字忘了)
其次 php腳本 由於是逐行解析的,不常駐線程(當然可以設置為永久連接,不自動超時退出) 非同步意義不大。
第三 我懷疑你是想問javascript的非同步請求? 如何用php處理?

如果沒問錯的話 可以用其他方式來解決非同步問題,就是同時發出多個web request請求 等多個請求成功之後將結果寫入資料庫(文件) 然後 有一個 一直在等待結果的php請求進程 一旦讀取到了這個寫入完畢的(資料庫)文件結果 馬上返回給瀏覽器

8. php輸出的內容怎樣非同步輸出

轉化為json 用json_encode()將數組轉化為json 然後用jquery的 ajax方法

9. PHP-php 怎樣實現非同步處理介面

回復 6# rubylc_unix 如果要精確到秒執行,你在腳本做一個進隊,出隊的邏輯,保持列隊,然後使用crontab每分鍾去監控腳本。不過如果是長時間運行腳本做隊列,我覺得php已經不適合你開發需求了。

10. 請教PHP的非同步處理,pcntl

client:
<?php
$client=newGearmanClient();
$client->addServer('127.0.0.1', 4730);//本機可以直接addServer(),默認伺服器端使用4730埠
$client->setCompleteCallback('completeCallBack');//先綁定才有效

$result1=$client->do('say','do');//do是同步進行,進行處理並返回處理結果。
$result2=$client->doBackground('say','doBackground');//非同步進行,只返回處理句柄。
$result3=$client->addTask('say','addTask');//添加任務到隊列,同步進行?通過添加task可以設置回調函數。
$result4=$client->addTaskBackground('say','addTaskBackground');//添加後台任務到隊列,非同步進行?
$client->runTasks();//運行隊列中的任務,只是do系列不需要runTask()。

echo'result1:';
var_mp($result1);
echo'<br/>';

echo'result2:';
var_mp($result2);
echo'<br/>';

echo'result3:';
var_mp($result3);
echo'<br/>';

echo'result4:';
var_mp($result4);
echo'<br/>';

//綁定回調函數,只對addTask有效
functioncompleteCallBack($task)
{
echo'CompleteCallback!handle result:'.$task->data().'<br/>';
}

worker:
<?php
$worker=newGearmanWorker();
$worker->addServer();
$worker->addFunction('say',function(GearmanJob$job){
$workload=$job->workload();//接收client傳遞的數據
echo'receive data:'.$workload.PHP_EOL;
returnstrrev($workload);//僅作反轉處理
});

//無際循環運行,gearman內部已有處理,不會出現佔用過高死掉的情況
while($worker->work()){
if($worker->returnCode() !== GEARMAN_SUCCESS){
echo'error'.PHP_EOL;
}
}

以上client輸出:
CompleteCallback!handle result:ksaTdda
result1:string(2) 「od」
result2:string(17) 「H:iZ943bixttyZ:87″
result3:object(GearmanTask)#2 (0) { }
result4:object(GearmanTask)#3 (0) { }
worker輸出:
receive data:do
receive data:doBackground
receive data:addTaskBackground
receive data:addTask

閱讀全文

與php非同步相關的資料

熱點內容
命令行讀文件 瀏覽:350
phpjson轉多維數組 瀏覽:910
linuxboot修復 瀏覽:843
程序在線編譯系統的設計與實現 瀏覽:722
電腦c盤記錄存在哪個文件夾 瀏覽:155
演算法分析與設計替換方法 瀏覽:850
老程序員丟失手機 瀏覽:272
新世紀日本語pdf 瀏覽:85
基於單片機的數字示波器 瀏覽:36
登qq伺服器連接中什麼意思 瀏覽:436
表格宏命令 瀏覽:994
肯德基app設定在哪裡 瀏覽:472
蘋果電腦文件夾怎麼添加列印機 瀏覽:701
pythonswagger 瀏覽:235
作業打卡解壓素材 瀏覽:159
pdf導入ibooks 瀏覽:577
xps文件轉pdf 瀏覽:134
怎麼樣獲得命令方塊 瀏覽:899
安卓studio如何改主題 瀏覽:933
linux自動獲取ip命令行 瀏覽:208