php實現非同步操作

2021-06-07 15:45:47 字數 994 閱讀 7995

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...