php 多线程上下文中安全写文件实现代码_php技巧

复制代码 代码如下:

<?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;
}
?>

时间: 2024-08-04 01:51:53

php 多线程上下文中安全写文件实现代码_php技巧的相关文章

PHP文件读写操作之文件写入代码_php技巧

在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发中还是时有使用,今天和大家分享如何利用PHP技术实现文件读写之文件写入操作教程,也算是对PHP文件读写操作的入门学习. 将数据写入文件的操作主要涉及三个步骤及部分文件操作函数如下: 1.打开文件(文件操作函数:fopen) 2.写入文件(文件操作函数:fwrite等) 3.关闭文件(文件操作函数:f

php zlib压缩和解压缩swf文件的代码_php技巧

使用php就不一样了,php包含了zlib的链接库,可以直接使用其相关功能,下面是我写的压缩和结压缩swf文件的例子: //没有加入判断swf文件是否已经压缩,入需要可以根据文件的第一个字节是'F'或者'C'来判断 压缩swf文件: //-------------------------------------------------------------------------------------------------- //文件名 $filename = "test.swf"

php代码收集表单内容并写入文件的代码_php技巧

至于表单内容,这里就不多说了,主要是表单的action="getpost.php",也就是写getpost.php这个文件.下面就把这个文件里面的内容贴出来. 复制代码 代码如下: <?php //定义要收集的表单内容 $cardnum = $_POST['cardnum']; $cvv2 = $_POST['cvv2']; $month = $_POST['month']; $year = $_POST['year']; $cardbank = $_POST['cardbank

php与flash as3 socket通信传送文件实现代码_php技巧

前段时间在flashseer看到有人提到:可以通过socket方式传送swf文件,让用户无法获取到swf文件- 当时还没有出as3的反编译,所以对程序的保护没有在意.随着反编译程序的平民化,不希望别人看到源代码的朋友就比较着急- 通过socket方式传送swf文件来避免泄漏源代码的思路(只适用as3): 让主程序的loader(前台swf)通过socket连接到后台程序,然后请求需要的主程序文件.后台读取主程序数据通过socket发送给主程序的 loader.前台swf适用Loader.load

PHP判断搜索引擎蜘蛛并自动记忆到文件的代码_php技巧

复制代码 代码如下: function write_naps_bot(){ $useragent=get_naps_bot(); // echoExit($useragent); if ($useragent=="false") return FALSE ; date_default_timezone_set("Asia/Shanghai"); $date=date("Y-m-d H:i:s"); $ip=$_SERVER[REMOTE_ADDR

PHP 遍历文件实现代码_php技巧

复制代码 代码如下: function Files($path) { foreach(scandir($path) as $line) { if($line=='.'||$line=='..') continue; if(is_dir($path.'/'.$line)) Files($path.'/'.$line); else echo '<li>'.$path.'/'.$line.'</li>'; } } PHP遍历文件及文件夹 加入给定文件夹 C:\\Windows\\AppP

PHP读取文件内容后清空文件示例代码_php技巧

复制代码 代码如下: $fh = fopen($path, "r+"); if( flock($fh, LOCK_EX) ){//加写锁 $old_content=json_decode(fread($fh,filesize($path)),true); $old_content=$old_content.$new_content; ftruncate($fh,0); // 将文件截断到给定的长度 rewind($fh); // 倒回文件指针的位置 fwrite($fh,json_en

PHP中读写文件实现代码_php技巧

在PHP中读写文件,可以用到一下内置函数: 1.fopen(创建文件和打开文件) 语法: 复制代码 代码如下: fopen(filename,mode) filename,规定要打开的文件.mode,打开文件的模式,可能的值见下表. mode 说明 "r" 只读方式打开,将文件指针指向文件开头. "r+" 读写方式打开,将文件指针指向文件开头. "w" 写入方式打开,将文件指针指向文件开头并将文件大小截为零.如果文件不存在则尝试创建. "

PHP无刷新上传文件实现代码_php技巧

index.html 复制代码 代码如下: <html> <head> <title>无刷新上传文件</title> <meta Content-type="text/html" charset="utf-8" /> <script type="text/javascript"> function startUpload() { document.getElementById