Beispiel #1
0
/**
 * 写日志到文件中。每次写入并入一行,并添加时间戳。
 * @param string $name 日志名。
 * @param string $_ 可变参数。要记录的数据。
 * @return void
 */
function write_log($name)
{
    if (func_num_args() < 2) {
        return;
    }
    $web = SAPI === SAPI_WEB;
    if ($web) {
        $browser = web::browser();
        $ip = $browser->ip;
        $ua = $browser->useragent;
        $m = $browser->method;
        $url = $browser->request;
    }
    $ds = DIRECTORY_SEPARATOR;
    $dir = BASE . DS . 'logs' . DS . date("Y{$ds}m");
    if (!is_dir($dir)) {
        @mkdir($dir, 0777, true);
        if (!is_dir($dir)) {
            error_log("Cannot create directory \"{$dir}\".");
            return;
        }
    }
    $file = $dir . DS . $name . '-' . date('d') . '.log';
    $h = fopen($file, 'a');
    if ($h) {
        $time = date('Y-m-d H:i:s');
        $time = "[{$time}] " . ($web ? "[{$ip}] {$m} {$url}\n" : '');
        if (flock($h, LOCK_EX)) {
            fwrite($h, $time);
            for ($i = 1; $i < func_num_args(); $i++) {
                $var = func_get_arg($i);
                if (!is_scalar($var)) {
                    $var = PHP_EOL . print_r($var, true) . PHP_EOL;
                } else {
                    if (is_resource($var)) {
                        $var = '[RESOURCE]';
                    }
                }
                fwrite($h, ($i > 0 ? "\t" : '') . $var . '');
            }
            fwrite($h, PHP_EOL);
            flock($h, LOCK_UN);
        }
        fclose($h);
    } else {
        error_log("Cannot write file \"{$file}\".");
    }
}