關於phpfilelock的信息

本文目錄一覽:

php 鎖定文件的問題。

問題在於,flock()這個函數不好使。

這是由PHP先天決定的。

用戶A訪問你的程序後,PHP在服務器端會啟動一個線程,flock這個函數只能在當前線程中鎖住這個文件。

同時,如果有另外的用戶B也訪問了這個程序,PHP會再啟動一個線程 ,flock只對B的線程起作用.A和B之間互不影響。A此時,A線程對文件的鎖定不影響 B對文件的操作!

有個

16200文本論壇,你從百度上搜一下,載下來參考一下它在數據操作上是怎麼做的。挺複雜的文件操作。

PHP如何解決多進程同時讀寫一個文件的方法

/*

*flock(file,lock,block)

*file 必需,規定要鎖定或釋放的已打開的文件

*lock 必需。規定要使用哪種鎖定類型。

*block 可選。若設置為 1 或 true,則當進行鎖定時阻擋其他進程。

*lock

*LOCK_SH 要取得共享鎖定(讀取的程序)

*LOCK_EX 要取得獨佔鎖定(寫入的程序)

*LOCK_UN 要釋放鎖定(無論共享或獨佔)

*LOCK_NB 如果不希望 flock() 在鎖定時堵塞

/*

if (flock($file,LOCK_EX))

{

fwrite($file,’write more words’);

flock($file,LOCK_UN);

}

else

{

//處理錯誤邏輯

}

fclose($file);

)

php中後綴名是lock的文件用什麼打開,有什麼作用,怎樣構建一個後綴名是.lock的文件

php是一種網頁服務器端腳本語言,一般網頁的某個頁面會是.php

iso是鏡像文件,可以用虛擬光驅軟件裝載後打開或直接用rar文件解壓

td是迅雷下載某個文件時,產生的兩個臨時文件之一的後綴

出現這個文件說明你的文件還沒有下載完畢,如果這個時候你吧 .td 去掉,直接用虛擬光驅軟件裝載後打開或用rar文件解壓,運氣好的話這個文件還是可以用的,如果你才下載了小於50%的內容,那麼這個文件恐怕就沒有辦法正常打開了.

PHP如何使用文件鎖解決高並發問題

?php

//連接數據庫

$con=mysqli_connect(“192.168.2.186″,”root”,”root”,”test”);

//查詢商品數量是否大於0,大於0才能下單,並減少庫存

$fp = fopen(“lock.txt”, “r”);

//加鎖

if(flock($fp,LOCK_EX))

{

$res=mysqli_fetch_assoc(mysqli_query($con,’SELECT total FROM shop WHERE id=1 LIMIT 1′));

if($res[‘total’]0){mysqli_query($con,’UPDATE shop SET total=total-1 WHERE id=1′);}

//執行完成解鎖

flock($fp,LOCK_UN);

}

//關閉文件

fclose($fp);

unset($res);

mysqli_close($con);

?

php flock 獨佔鎖啥意思

於php中文件鎖函數flock函數用法簡介,希望通過本文的介紹大家對於Linux方面能夠更加的了解

flock

(PHP 4, PHP 5)

flock — 輕便的諮詢文件鎖定

說明

bool flock ( int $handle , int $operation [, int $wouldblock ] )

PHP 支持以諮詢方式(也就是說所有訪問程序必須使用同一方式鎖定, 否則它不會工作)鎖定全部文件的一種輕便方法。

Note:

在 Windows 下 flock() 將會強制執行。

flock() 操作的 handle 必須是一個已經打開的文件指針。operation 可以是以下值之一:

要取得共享鎖定(讀取的程序),將 operation 設為 LOCK_SH(PHP 4.0.1 以前的版本設置為 1)。

要取得獨佔鎖定(寫入的程序),將 operation 設為 LOCK_EX(PHP 4.0.1 以前的版本中設置為 2)。

要釋放鎖定(無論共享或獨佔),將 operation 設為 LOCK_UN(PHP 4.0.1 以前的版本中設置為 3)。

如果不希望 flock() 在鎖定時堵塞,則給 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中設置為 4)。

flock() 允許執行一個簡單的可以在任何平台中使用的讀取/寫入模型(包括大部分的 Unix 派生版和甚至是 Windows)。如果鎖定會堵塞的話(EWOULDBLOCK 錯誤碼情況下),可選的第三個參數會被設置為 TRUE。鎖定操作也可以被 fclose() 釋放(代碼執行完畢時也會自動調用)。

成功時返回 TRUE, 或者在失敗時返回 FALSE.

Example #1 flock() 例子

複製代碼 代碼如下:

?php

$fp = fopen(“/tmp/lock.txt”, “w+”);

if (flock($fp, LOCK_EX)) { // 進行排它型鎖定

fwrite($fp, “Write something here “);

flock($fp, LOCK_UN); // 釋放鎖定

} else {

echo “Couldn’t lock the file !”;

}

fclose($fp);

?

Note:

由於 flock() 需要一個文件指針, 因此可能不得不用一個特殊的鎖定文件來保護打算通過寫模式打開的文件的訪問(在 fopen() 函數中加入 “w” 或 “w+”)。

Warning

flock() 不能用於 NFS 以及其它一些網絡文件系統。詳細資料查看自己操作系統的文檔。

在部分操作系統中 flock() 以進程級實現。當用一個多線程服務器 API(比如 ISAPI)時,可能不可以依靠 flock() 來保護文件,因為運行於同一服務器實例中其它並行線程的 PHP 腳本可以對該文件進行處理。

flock() 不支持舊的文件系統,如 FAT 以及它的派生系統。因此,此環境下總是返回 FALSE(尤其是對 Windows 98 用戶來說)。

php中文件鎖函數flock函數用法簡介:

語法:

bool flock ( int $handle , int $operation [, int $wouldblock ] )

flock() 操作的 handle 必須是一個已經打開的文件指針。operation 可以是以下值之一:

1. 要取得共享鎖定(讀取程序),將 operation 設為 LOCK_SH(PHP 4.0.1 以前的版本設置為 1)

2. 要取得獨佔鎖定(寫入程序),將 operation 設為 LOCK_EX(PHP 4.0.1 以前的版本中設置為 2)

3. 要釋放鎖定(無論共享或獨佔),將 operation 設為 LOCK_UN(PHP 4.0.1 以前的版本中設置為 3)

4. 如果你不希望 flock() 在鎖定時堵塞,則給 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中設置為 4)

看下面代碼:

a.php

複製代碼 代碼如下:

?php

$file = 「temp.txt」;

$fp = fopen($file , ‘w『);

if(flock($fp , LOCK_EX)){

fwrite($fp , 「abc」);

sleep(10);

fwrite($fp , 「123」);

flock($fp , LOCK_UN);

}

fclose($fp);

?

b.php

複製代碼 代碼如下:

?php

$file = 「temp.txt」;

$fp = fopen($file , ‘r’);

echo fread($fp , 100);

fclose($fp);

?

運行 a.php 後,馬上運行 b.php ,可以看到輸出:

abc

等 a.php 運行完後運行 b.php ,可以看到輸出:

abc

123

顯然,當 a.php 寫文件時數據太大,導致時間比較長時,這時 b.php 讀取數據不完整,在對b.php做修改

修改 b.php 為:

複製代碼 代碼如下:

?php

$file = 「temp.txt」;

$fp = fopen($file , ‘r『);

if(flock($fp , LOCK_EX)){

echo fread($fp , 100);

flock($fp , LOCK_UN);

} else{

echo 「Lock file failed…」;

}

fclose($fp);

?

運行 a.php 後,馬上運行 b.php ,可以發現 b.php 會等到 a.php 運行完成後(即 10 秒後)才顯示:

abc

123

讀取數據完整,但時間過長,他要等待寫鎖釋放,再對b.php做修改。

修改 b.php 為:

複製代碼 代碼如下:

?php

$file = 「temp.txt」;

$fp = fopen($file , ‘r’);

if(flock($fp , LOCK_SH | LOCK_NB)){

echo fread($fp , 100);

flock($fp , LOCK_UN);

} else{

echo 「Lock file failed…」;

}

fclose($fp);

?

運行 a.php 後,馬上運行 b.php ,可以看到輸出:

Lock file failed…

證明可以返回鎖文件失敗狀態,而不是向上面一樣要等很久。

腳本之家小編結論:

建議作文件緩存時,選好相關的鎖,不然可能導致讀取數據不完整,或重複寫入數據。

file_get_contents 好像選擇不了鎖,不知道他默認用的什麼鎖,反正和不鎖得到的輸出一樣,是不完整的數據。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/287311.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-23 13:08
下一篇 2024-12-23 13:08

相關推薦

  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • 使用Python爬蟲獲取電影信息的實現方法

    本文將介紹如何使用Python編寫爬蟲程序,來獲取和處理電影數據。需要了解基本的Python編程語言知識,並使用BeautifulSoup庫和Requests庫進行爬取。 一、準備…

    編程 2025-04-28
  • Python爬取網頁信息

    本文將從多個方面對Python爬取網頁信息做詳細的闡述。 一、爬蟲介紹 爬蟲是一種自動化程序,可以模擬人對網頁進行訪問獲取信息的行為。通過編寫代碼,我們可以指定要獲取的信息,將其從…

    編程 2025-04-28
  • 如何使用Python執行Shell命令並獲取執行過程信息

    本文將介紹如何使用Python執行Shell命令並獲取執行過程信息。我們將從以下幾個方面進行闡述: 一、執行Shell命令 Python內置的subprocess模塊可以方便地執行…

    編程 2025-04-28
  • Python實現身份信息模擬生成與查驗

    本文將從以下幾個方面對Python實現身份信息模擬生成與查驗進行詳細闡述: 一、身份信息生成 身份信息生成是指通過代碼生成符合身份信息規範的虛假數據。Python中,我們可以使用f…

    編程 2025-04-27
  • Dapper使用getschema獲取表信息

    本文旨在介紹Dapper中使用getschema獲取表信息的方法和注意事項。 一、獲取某張表的所有列信息 使用Dapper獲取某張表信息,可以使用 `IDbConnection.G…

    編程 2025-04-27
  • 通過提交信息搜索-使用git

    本篇文章重點講解如何使用git通過提交信息來搜索。我們將從多個方面介紹如何使用git來搜索提交信息,並提供相應的代碼示例以供參考。 一、搜索方式 Git提供了三種搜索方式,分別為:…

    編程 2025-04-27
  • 已裝備我軍的空中信息化作戰平台

    本文將會從多個方面詳細闡述已裝備我軍的空中信息化作戰平台。 一、平台概述 已裝備我軍的空中信息化作戰平台是一個全新的作戰系統,具備實時數據採集、處理、分析、共享的能力。它可以在不同…

    編程 2025-04-27
  • Linux查看系統信息

    一、CPU信息 Linux系統下,查看CPU的信息最常用的命令是lscpu。該命令可以顯示CPU架構、核心數量、線程數、緩存大小、CPU頻率等信息。例如: lscpu 該命令會輸出…

    編程 2025-04-24
  • 軟考 信息安全工程師

    軟考 信息安全工程師是一項技能型國家級資格認證考試,主要測試考生在信息安全領域的理論知識和實踐技能,是證明個人信息安全能力的重要證書。本文將從多個方面對軟考 信息安全工程師做詳細的…

    編程 2025-04-23

發表回復

登錄後才能評論