/*
$ary 要写入数据
$filename 要写入文件 的文件名
$files 文件隶属 的文件夹
$k 数据写入开头
*/
function data_log($ary = "error", $filename = "error.txt", $files = "./error", $k = "") {
//如果是数组,则按照 键->值 方式写入文件
if (is_array($ary)) {
foreach ($ary as $key => $val) {
data_log($val, $filename, $files, $k."->".$key);//递归--带入"键"
}
//如需简单点 以上 可替换为
data_log(print_r($ary,true),$filename,$files);
} else {
$msg = !empty($k)? $k . "=" . $ary:$ary;//是否指定数据开头
if (!file_exists($files)) {
create_folders($files);//创建目录
}
$fp = fopen($files . "/" . $filename, "a+");//尝试打开该文件,如不存在则创建,存在指针移向末尾
flock($fp, LOCK_EX + LOCK_NB);//文件上锁
fwrite($fp, $msg . "\r\n");//文件末尾添加换行
flock($fp, LOCK_UN);//解锁
fclose($fp);//关闭
}
}
放入类中
/**
* 日志写入
* @param type $ary 要写入数据
* @param type $filename 要写入文件 的文件名
* @param type $files 文件隶属 的文件夹
* @param type $k 数据写入开头
*
*/
function data_log($ary = "error", $filename = "error.txt", $files = "./error", $k = "") {
//如果是数组,则按照 键->值 方式写入文件
if (is_array($ary)) {
foreach ($ary as $key => $val) {
$this->data_log($val, $filename, $files, $k . "->" . $key); //递归--带入"键"
}
//如需简单点 以上 可替换为
// data_log(print_r($ary, true), $filename, $files);
} else {
$msg = !empty($k) ? $k . "=" . $ary : $ary; //是否指定数据开头
if (!file_exists($files)) {
$this->create_folders($files); //创建目录
}
$fp = fopen($files . "/" . $filename, "a+"); //尝试打开该文件,如不存在则创建,存在指针移向末尾
flock($fp, LOCK_EX + LOCK_NB); //文件上锁
fwrite($fp, $msg . "\r\n"); //文件末尾添加换行
flock($fp, LOCK_UN); //解锁
fclose($fp); //关闭
}
}
/*
* 创建多级目录
*
* mkdir() 只能在已经存在的目录中创建创建文件夹(即父级必须有才行)。
* mkdirs() 可以在不存在的目录中创建文件夹。诸如:a\b,既可以创建多级目录。
* dirname() 是返回路径中的目录部分。
* is_dir() 用于判断给出的文件名是否是一个有效的目录
*
* */
function create_folders($dir) {
return is_dir($dir) or (create_folders(dirname($dir)) and mkdir(iconv("UTF-8", "GBK", $dir), 0777, true));
}