PHP マルチスレッド コンテキストでファイル実装コードを安全に作成する_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:42:05
オリジナル
847 人が閲覧しました

复制代码代码如下:

/**
* @usage: マルチスレッドコンテキスト、任意のファイルタイプで安全なファイル書き込み操作を提供するために使用されます
* @author: Rocky Zhang
* @time: 2009 年 11 月 11 日
* @demo[0]: $handler = mfopen($ファイル、「a+」);
* mfwrite($handler, $str);
*/
function mfopen($file, $mode='w+') {
$tempfile =generateTempfile('./ tempdir', $file);
preg_match('/b/i', $mode) || ($mode .= 'b'); // 'b' が推奨されます
if (preg_match('/w|a/i', $mode) && !is_writable($file)) {
exit("{$file} は書き込み可能ではありません!");
}
$filemtime = $filemtime2 = 0;
$tempdir = ディレクトリ名($tempfile);
is_dir($tempdir) || mkdir($tempdir, 0777);
do { // do-while は、長時間にわたる変更を避けるために使用されます。 copy
clearstatcache();
$filemtime = filemtime($file);
copy($file, $tempfile);
$filemtime2 = filemtime($file);
} while ( ($filemtime2 - $filemtime) != 0 );
if (!$handler = fopen($tempfile, $mode)) {
exit('一時ファイルのオープンに失敗しました。一時ディレクトリへの書き込み認証が必要です!');
}
return array(0=>$handler, 1=>$filemtime, 2=>$file, 3=>$tempfile, 4=>$mode);
}

// この関数はさらに最適化されるべきだと思います
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] ) { // ソースファイルと一時ファイルを比較
if ( $num && $num > 0 ) { // 一時ファイルが更新されたので、ソースファイルにコピー
copy ($handler[3]、$handler[2]) || ($handler[3]、$handler[2])出口;
$handler[1] = filemtime($handler[3]);
touch($handler[2], $handler[1], $handler[1]);
}
} else { // ソース ファイルが変更されました。ソース ファイルを一時ファイルにロードします
copy($handler[2], $handler[3]) ||出口;
touch($handler[3], $mtime, $mtime);
$handler[1] = $mtime;
}
}

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

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/321068.html技術記事复制代码 代码如下: ?php /** * @usage: マルチスレッドコンテキスト、任意のファイルタイプで安全なファイル書き込み操作を提供するために使用 * @author: Rocky Zhang * @time: 2009 年 11 月 11 日 *...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート