1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
<?php
/** This file is part of KCFinder project * * @desc Minify JS & CSS * @package KCFinder * @version 3.12 * @author Pavel Tzonkov <sunhater@sunhater.com> * @copyright 2010-2014 KCFinder Project * @license http://opensource.org/licenses/GPL-3.0 GPLv3 * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3 * @link http://kcfinder.sunhater.com */
namespace kcfinder;
class minifier {
protected $config; protected $type = "js"; protected $minCmd = ""; protected $mime = array( 'js' => "text/javascript", 'css' => "text/css" );
public function __construct($type=null) { require "conf/config.php"; $this->config = $_CONFIG; $type = strtolower($type); if (isset($this->mime[$type])) $this->type = $type; if (isset($_CONFIG["_{$this->type}MinCmd"])) $this->minCmd = $_CONFIG["_{$this->type}MinCmd"]; }
public function minify($cacheFile=null, $dir=null) { if ($dir === null) $dir = dirname($_SERVER['SCRIPT_FILENAME']);
// MODIFICATION TIME FILES $mtFiles = array( __FILE__, $_SERVER['SCRIPT_FILENAME'], "conf/config.php" );
// GET SOURCE CODE FILES $files = dir::content($dir, array( 'types' => "file", 'pattern' => '/^.*\.' . $this->type . '$/' ));
// GET NEWEST MODIFICATION TIME $mtime = 0; foreach (array_merge($mtFiles, $files) as $file) { $fmtime = filemtime($file); if ($fmtime > $mtime) $mtime = $fmtime; }
$header = "Content-Type: {$this->mime[$this->type]}";
// GET SOURCE CODE FROM CLIENT HTTP CACHE IF EXISTS httpCache::checkMTime($mtime, $header);
// OUTPUT SOURCE CODE header($header);
// GET SOURCE CODE FROM SERVER-SIDE CACHE if (($cacheFile !== null) && file_exists($cacheFile) && ( (filemtime($cacheFile) >= $mtime) || !is_writable($cacheFile) // if cache file cannot be modified ) // the script will output it always ) { // with its distribution content readfile($cacheFile); die; }
// MINIFY AND JOIN SOURCE CODE $source = ""; foreach ($files as $file) {
if (strlen($this->minCmd) && (substr($file, 4, 1) != "_")) { $cmd = str_replace("{file}", $file, $this->minCmd); $source .= `$cmd`;
} else $source .= file_get_contents($file); }
// UPDATE SERVER-SIDE CACHE if (($cacheFile !== null) && ( is_writable($cacheFile) || ( !file_exists($cacheFile) && dir::isWritable(dirname($cacheFile)) ) ) ) { file_put_contents($cacheFile, $source); touch($cacheFile, $mtime); }
// OUTPUT SOURCE CODE echo $source;
} }
?>
|