Heim >Backend-Entwicklung >PHP-Tutorial >Datei – PHP-Dateisperre

Datei – PHP-Dateisperre

WBOY
WBOYOriginal
2016-08-04 09:22:131252Durchsuche

Datei – PHP-Dateisperre
Datei – PHP-Dateisperre
Wie im Bild gezeigt, warum kann das zweite Skript sofort in die Datei schreiben, wenn ich zwei Skripte gleichzeitig ausführe? ist nicht im ersten Ist das Skript gesperrt?

Antwortinhalt:

Datei – PHP-Dateisperre
Datei – PHP-Dateisperre
Wie im Bild gezeigt, warum kann das zweite Skript sofort in die Datei schreiben, wenn ich zwei Skripte gleichzeitig ausführe? ist nicht im ersten Ist das Skript gesperrt?

PHP-Lese- und Schreibdateien sind gesperrt. Weitere Informationen finden Sie unter http://www.jb51.net/article/81246.htm

Ihr zweiter Fwrite wurde durchgeführt, ohne vorher die exklusive Sperre LOCK_EX zu beantragen, und er wird natürlich geschrieben.
Sie müssen LOCK_EX vor beiden Fwrites beantragen, damit er eine Sperrwirkung haben kann.

<code>foo1.php:
<?php
header('Content-Type: text/plain; charset=utf-8');
if(file_exists('arr.php')) {
    $arr = require 'arr.php'; //先require后fopen
} else {
    file_put_contents('arr.php','<?php return array();');
}
$fp = fopen('arr.php', 'r+'); //读写方式打开,将文件指针指向文件头
if(flock($fp,LOCK_EX)) { //阻塞到获取排它锁
    $arr['name'] = __FILE__;
    ftruncate($fp, 0); //截断文件
    fwrite($fp,'<?php return '.var_export($arr, true).';');
    var_export($arr);
    fflush($fp); //在释放锁之前刷新输出
    sleep(10); //睡眠10秒,在此期间访问foo2.php将被阻塞
    flock($fp, LOCK_UN); //释放锁定
}
fclose($fp);

foo2.php:
<?php
header('Content-Type: text/plain; charset=utf-8');
$arr = require 'arr.php';
$fp = fopen('arr.php', 'r+');
if(flock($fp,LOCK_EX)) {
    $arr['name'] = __FILE__;
    ftruncate($fp, 0);
    fwrite($fp,'<?php return '.var_export($arr, true).';');
    var_export($arr);
    fflush($fp);
    flock($fp, LOCK_UN);
}
fclose($fp);</code>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn