php多執行緒操作同一檔案 待續

2022-07-15 06:42:08 字數 2384 閱讀 2776

同意檔案操作同意檔案的問題在於邏輯有些地方不合適,如果多個執行緒同時寫入,在不加鎖的情況下,可能導致得到結果不如意,為了安全,和髒讀(資料庫的詞),應該使用排他鎖,這就意味著每次只能被乙個執行緒操作。其他執行緒只能等待,如果超時則會報錯。

1

關鍵函式:

2fopen

() // 開啟檔案或乙個http位址,形成乙個檔案流

3flock

()  // 對檔案加鎖及解鎖

4fwrite

()  // 對檔案讀寫操作

5fclose()  // 關閉檔案流

1

fopen() resource

fopen ( string

$filename , string

$mode [, bool $use_include_path = false [, resource

$context

]] )23

檔案開啟模式:

4 'r'唯讀方式開啟,將檔案指標指向檔案頭。

5 'r+'讀寫方式開啟,將檔案指標指向檔案頭。

6 'w'寫入方式開啟,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則嘗試建立之。

7 'w+'讀寫方式開啟,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則嘗試建立之。

8 'a'寫入方式開啟,將檔案指標指向檔案末尾。如果檔案不存在則嘗試建立之。

9 'a+'讀寫方式開啟,將檔案指標指向檔案末尾。如果檔案不存在則嘗試建立之。

10 'x' 建立並以寫入方式開啟,將檔案指標指向檔案頭。如果檔案已存在,則 fopen() 呼叫失敗並返回 false,並生成一條 e_warning 級別的錯誤資訊。如果檔案不存在則嘗試建立之。這和給 底層的 open(2) 系統呼叫指定 o_excl|o_creat 標記是等價的。

11 'x+' 建立並以讀寫方式開啟,其他的行為和 'x' 一樣。

1

flock() bool flock ( resource

$handle , int $operation [, int &$wouldblock

] )234

handle

5 檔案系統指標,是典型地由 fopen() 建立的 resource

(資源)。

6operation

7operation 可以是以下值之一:

8◦ lock_sh取得共享鎖定(讀取的程式)。

9◦ lock_ex 取得獨佔鎖定(寫入的程式。

10◦ lock_un 釋放鎖定(無論共享或獨佔)。

1112

13 如果不希望 flock

() 在鎖定時堵塞,則是 lock_nb(windows 上還不支援),即遇到有鎖不等待,直接報錯返回ewouldblock

14 寫法為:$re = flock(lockfd,lock_ex|lock_nb)

15 有錯則返回$re = -1,errno = ewouldblock

1

fwrite() int fwrite ( resource

$handle , string

$string [, int $length

] )2

3handle

4 檔案系統指標,是典型地由 fopen() 建立的 resource

(資源)。

5string

6 the string that is to be written.

7length

8 如果指定了 length,當寫入了 length 個位元組或者寫完了 string

以後,寫入就會停止,視乎先碰到哪種情況。

910 注意如果給出了 length 引數,則 magic_quotes_runtime 配置選項將被忽略,而 string

中的斜線將不會被抽去。

1112

fwrite() 返回寫入的字元數,出現錯誤時則返回 false 。

1

fclose() bool fclose ( resource

$handle)2

3handle

4 檔案指標必須有效,並且是通過 fopen() 或 fsockopen() 成功開啟的。

通常這樣子並不能從根本解決阻塞問題,只能是緩解一下,最好是通過中介軟體或者reids把請求排成乙個佇列,保證請求佇列不會資料丟失,但是對於寫入的資料不是那麼重要的,可以用這個方法,直接寫入,丟失就丟失了。

在前期除錯的時候,可以先用這個方法直接把資料寫在檔案裡,視覺化強烈一些,後期可以用mongodb替換檔案寫入,或者多個檔案分類分目錄寫入,而控制阻塞問題需要使用redis等來控制確保單檔案操作的同時,請求不會丟失。

python(一) 檔案操作

my file open my file.txt w 用法 open 檔名 形式 其中形式有 w write r read.my file.write text 該語句會寫入先前定義好的 text my file.close 關閉檔案 this is my first test.this is th...

PHP函式應用一 檔案操作 日誌

url public log date y date m d log.txt dir name dirname url 目錄不存在就建立 if file exists dir name print r url die fp fopen url,a 開啟檔案資源通道 不存在則自動建立 fwrite f...

提取同一資料夾下所有檔案的同一列

import pandas as pd import os from pandas import series,dataframe dir r c users user pythonproject venv 資料 raw data 設定工作路徑 新建列表,存放檔名 可以忽略,但是為了做的過程能心裡有...