同意檔案操作同意檔案的問題在於邏輯有些地方不合適,如果多個執行緒同時寫入,在不加鎖的情況下,可能導致得到結果不如意,為了安全,和髒讀(資料庫的詞),應該使用排他鎖,這就意味著每次只能被乙個執行緒操作。其他執行緒只能等待,如果超時則會報錯。
1關鍵函式:
2fopen
() // 開啟檔案或乙個http位址,形成乙個檔案流
3flock
() // 對檔案加鎖及解鎖
4fwrite
() // 對檔案讀寫操作
5fclose() // 關閉檔案流
1fopen() 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' 一樣。
1flock() 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
1fwrite() 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 。
1fclose() 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 設定工作路徑 新建列表,存放檔名 可以忽略,但是為了做的過程能心裡有...