最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php 多線程上下文中安全寫(xiě)文件實(shí)現(xiàn)代碼

 更新時(shí)間:2009年12月28日 22:28:01   作者:  
提供一個(gè)php多線程上下文中安全寫(xiě)文件的實(shí)現(xiàn)方法。這個(gè)實(shí)現(xiàn)沒(méi)有使用php 的file lock機(jī)制,使用的是臨時(shí)文件機(jī)制。多線程中的各個(gè)線程都是對(duì)各自(每個(gè)線程獨(dú)占一個(gè))的臨時(shí)文件寫(xiě),然后再同步到原文件中。
復(fù)制代碼 代碼如下:

<?php
/**
* @usage: used to offer safe file write operation in multiple threads context, arbitory file type
* @author: Rocky Zhang
* @time: Nov. 11 2009
* @demo[0]: $handler = mfopen($file, 'a+');
* mfwrite($handler, $str);
*/
function mfopen($file, $mode='w+') {
$tempfile = generateTempfile('./tempdir', $file);
preg_match('/b/i', $mode) || ($mode .= 'b'); // 'b' is recommended
if (preg_match('/\w|a/i', $mode) && !is_writable($file)) {
exit("{$file} is not writable!");
}
$filemtime = $filemtime2 = 0;
$tempdir = dirname($tempfile);
is_dir($tempdir) || mkdir($tempdir, 0777);
do { // do-while used to avoid modify in a long time copy
clearstatcache();
$filemtime = filemtime($file);
copy($file, $tempfile);
$filemtime2 = filemtime($file);
} while ( ($filemtime2 - $filemtime) != 0 );
if (!$handler = fopen($tempfile, $mode)) {
exit('Fail on opening tempfile, write authentication is must on temporary dir!');
}
return array(0=>$handler, 1=>$filemtime, 2=>$file, 3=>$tempfile, 4=>$mode);
}

// I do think that this function should be optimized further
function mfwrite(&$handler, $str='') {
if (strlen($str) > 0) {
$num = fwrite($handler[0], $str);
fflush($handler[0]);
}
clearstatcache();
$mtime = filemtime($handler[2]);
if ( $mtime == $handler[1] ) { // compare between source file and temporary file
if ( $num && $num > 0 ) { // temporary file has been updated, copy to source file
copy($handler[3], $handler[2]) || exit;
$handler[1] = filemtime($handler[3]);
touch($handler[2], $handler[1], $handler[1]);
}
} else { // source file has been modified, load source file to temporary file
copy($handler[2], $handler[3]) || exit;
touch($handler[3], $mtime, $mtime);
$handler[1] = $mtime;
}
}

function generateTempfile($tempdir='tempdir', $file) {
$rand = md5(microtime());
return "{$tempdir}/{$rand}_".$file;
}
?>

相關(guān)文章

最新評(píng)論

松江区| 怀化市| 遂平县| 抚远县| 灵丘县| 永修县| 海门市| 鹰潭市| 望都县| 嘉兴市| 蚌埠市| 嫩江县| 泾川县| 德格县| 荣成市| 教育| 仁怀市| 峡江县| 土默特左旗| 石狮市| 偃师市| 赤城县| 珠海市| 天津市| 资溪县| 聂荣县| 合肥市| 那曲县| 文安县| 溧水县| 伽师县| 姜堰市| 宁陕县| 通渭县| 康平县| 安图县| 临武县| 洛隆县| 五河县| 安达市| 宁阳县|