1. 問題:
2. 嘗試過的方法:
ajax 提交資料到 php ,然後php 通過fsockopen 的方式啟用另乙個php 來進行文件轉換。問題是使用者提交後頁面一直不能動,
說明該程序處於被占用狀態。和用ajax提交然後等待處理完成的效果是一樣的,使用者體驗不好。
$url_array = parse_url($url);
$host = $url_array["host"];
$path = $url_array["path"];
$geturl = $path."?task_id=".$task_id;
$fp = fsockopen($host , 80, $errno, $errstr, 30);
if (!$fp) else
fclose($fp);
}
3. 解決方法:
(1)考慮到使用者提交的引數比較多 php間非同步通訊時不方便 如果文件轉換失敗 也沒有記錄,所以對使用者的請求進行資料庫儲存,包括提交的引數。
(2) 建立乙個php a.php 來進行文件轉換並儲存到資料庫(要先從任務表中查到一些引數)。
(3) 建立乙個指令碼檔案 b.sh ,來執行 a.php
#!/bin/bash
task_id=$1
cd /usr/local/nginx/html
/usr/local/php/bin/php /usr/local/nginx/html/a.php $task_id
(4)最後在使用者請求的php 中呼叫指令碼
$cmd = "/usr/local/nginx/html/b.sh"." ".$task_id." > /dev/null &";
exec($cmd);
這樣的話,使用者提交完後,當前程序不會被占用,使用者就可以幹其他事,使用者體驗得到了提公升。
php怎麼進行非同步程式設計,PHP如何實現非同步資料呼叫
瀏覽器和伺服器之間只有一種面向無連線的http協議進行通訊的,面向無連線的程式的特點是客戶端請求服務端,服務端根據請求返回相應的程式,不能保持持久連線。這樣就出現了乙個問題,乙個客戶端的相應服務端可能執行1秒也有可能執行1分鐘,這樣瀏覽器就會一直處於等待狀態,如果程式執行緩慢,使用者可能就沒耐心關掉...
PHP非同步操作方法
timeout array asyn true,time 3000 毫秒 是否非同步 str http request post 127.0.0.1 80,url,getdataarr,postdataarr,cookiedataarr,customheader,timeout,req hdr,re...
php非同步操作類庫
前3個算是比較完整的類,所以後面的暫時不考慮了。庫的選擇一般原則是找用的人多,更新持久的,因此 pear http client 一馬當先,但這個必須是統籌在pear之下,因為要用到一些pear的輔助類,不是很適合單獨使用,請回去等錄用通知吧。這回合snoopy 領先一步,但粗略一看核心檔案snoo...