php併發處理 莫楓戀 新浪部落格

2021-10-10 12:06:21 字數 861 閱讀 2365

最近某個專案用php生成檔案,但是由於檔案量太大,單個程序生成需要很長的時間,所以想併發進行處理。

網上查詢了下相關的資料,php本身是沒有多執行緒的概念的,那就只能用多程序了,再找資料卻是有多程序的處理方式。

首先想到的是pcntl_fork(手冊介紹:

起程序起來併發處理,然後底層做了測試,效果也還不錯,但是當通過apache呼叫的時候卻無法執行。然後看到了pcntl_fork手冊有下面一句:

it is not possible to use the function 'pcntl_fork' when php is used as apache module. you can only use pcntl_fork in cgi mode or from command-line.

using this function will result in: 'fatal error: call to undefined function: pcntl_fork()' 所以只能想其它方法進行處理了。

後來檢視到可以用popen開程序來處理,然後用feof來確定程序是否結束:

foreach (

$generatefiles as $generatenumber =

> $generatemsg)

foreach (

$generatenumberarr as $generatenumberarr_k =

>

$generatenumberarr_v)

usleep(100000);}

pclose(

$generatenumberarr_v);}

上述方法很好的解決了我需要處理的問題

備註:對於php的外圍引數是不可以傳陣列的

php中iconv函式使用方法 莫楓戀 新浪部落格

windows下 需要用到iconv函式把抓取來過的utf 8編碼的頁面轉成gb2312,發現只有用iconv函式把抓取過來的資料一轉碼資料就會無緣無故的少一些。讓我鬱悶了好一會兒,去網上一查資料才知道這是iconv函式的乙個bug。iconv在轉換字元 到gb2312時會出錯 解決方法很簡單,就是...

關於Mysql 1067錯誤 莫楓戀 新浪部落格

在本地計算機無法啟動mysql服務錯誤1067程序意外終止 這種情況一般是my.ini檔案配置出錯了,你可以刪除系統目錄下的my.ini檔案,把下面的內容重新寫入my.ini檔案試試,要適當地改寫一下檔案路徑 我的my.ini 2007年12月31日 winmysqladmin server c m...

php併發處理

解決併發問題就必須要加鎖,各種方案的本質都是加鎖 php語言中並沒有原生的提供併發的解決方案,因此就需要借助其他方式來實現併發控制。方案一 使用檔案鎖排它鎖 flock函式用於獲取檔案的鎖,這個鎖同時只能被乙個執行緒獲取到,其它沒有獲取到鎖的執行緒要麼阻塞,要麼獲取失敗 在獲取到鎖的時候,先查詢庫存...