Heim >Backend-Entwicklung >PHP-Tutorial >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?
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>