AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > PHP编程

高并发下PHP写文件日志丢失

51自学网 2016-09-17 http://www.wanshiok.com
<?php/** * Created by PhpStorm. * User: andyfeng * Date: 2015/6/24 * Time: 13:31 */class LogFileUtil {     public static $fileHandlerCache;    private static $initFlag = false;    private static $MAX_LOOP_COUNT = 3;     private static function init() {        self::$initFlag = true;        register_shutdown_function(array("LogFileUtil", "shutdown_func"));    }     /**     * 输出到文件日志     * @param $filePath 文件路径     * @param $msg  日志信息     * @return int     */    public static function out($filePath, $msg) {        if (!self::$initFlag) {            self::init();        }        return self::internalOut($filePath, $msg);    }     /**     * @param $filePath     * @param $msg     * @param $loop     * @return int     */    private static function internalOut($filePath, $msg, $loop = 0) {        //以防一直添加失败造成死循环        if ($loop > self::$MAX_LOOP_COUNT) {            $result = 0;        } else {            $loop++;            $fp = self::$fileHandlerCache["$filePath"];            if (empty($fp)) {                $fp = fopen($filePath, "a+");                self::$fileHandlerCache[$filePath] = $fp;            }            if (flock($fp, LOCK_EX)) {                $result = fwrite($fp, $msg);                flock($fp, LOCK_UN);            } else {                $result = self::internalOut($filePath, $msg, $loop);            }        }        return $result;    }     function shutdown_func() {        if (!empty(LogFileUtil::$fileHandlerCache)) {            if (is_array(LogFileUtil::$fileHandlerCache)) {                foreach (LogFileUtil::$fileHandlerCache as $k => $v) {                    if (is_resource($v))                        //file_put_contents("close.txt",$k);                        fclose($v);                }            }        }    }}



说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
 
上一篇:PHP数组与对象之间使用递归实现转换  下一篇:代码分享--遍历数据库结构