Compressor   F
last analyzed

Complexity

Total Complexity 76

Size/Duplication

Total Lines 405
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 76
eloc 213
dl 0
loc 405
rs 2.32
c 0
b 0
f 0

17 Methods

Rating   Name   Duplication   Size   Complexity  
A replace_scripts() 0 4 1
A get_microtime() 0 4 1
A compressor() 0 3 1
A get_html_content() 0 6 1
A get_css_content() 0 11 1
A compress_javascript() 0 13 2
A prepare_string_for_quotes() 0 10 2
C check_gzip_use() 0 23 12
A get_javascript_content() 0 7 1
A file_put_contents() 0 12 3
C check_cache() 0 51 17
A send_headers() 0 7 2
A file_get_contents() 0 7 1
F load_files() 0 131 20
A get_content() 0 14 2
B send_datas() 0 35 7
A __construct() 0 22 2

How to fix   Complexity   

Complex Class

Complex classes like Compressor often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Compressor, and based on these observations, apply Extract Interface, too.

1
<?php
2
	/******
3
	 *
4
	 *	EditArea PHP compressor
5
	 * 	Developped by Christophe Dolivet
6
	 *	Released under LGPL, Apache and BSD licenses
7
	 *	v1.1.3 (2007/01/18)	 
8
	 *
9
	******/
10
	
11
	// CONFIG
12
	$param['cache_duration']= 3600 * 24 * 10;		// 10 days util client cache expires
13
	$param['compress'] = true;						// enable the code compression, should be activated but it can be usefull to desactivate it for easier error retrieving (true or false)
14
	$param['debug'] = false;						// Enable this option if you need debuging info
15
	$param['use_disk_cache']= true;					// If you enable this option gzip files will be cached on disk.
16
	$param['use_gzip']= true;						// Enable gzip compression
17
	// END CONFIG
18
	
19
	$compressor= new Compressor($param);
20
	
21
	class Compressor{
22
	
23
		
24
		function compressor($param)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
25
		{
26
			$this->__construct($param);
27
		}
28
		
29
		function __construct($param)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
30
		{
31
			$this->start_time= $this->get_microtime();
0 ignored issues
show
Bug Best Practice introduced by
The property start_time does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
32
			$this->file_loaded_size=0;
0 ignored issues
show
Bug Best Practice introduced by
The property file_loaded_size does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
33
			$this->param= $param;
0 ignored issues
show
Bug Best Practice introduced by
The property param does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
34
			$this->script_list="";
0 ignored issues
show
Bug Best Practice introduced by
The property script_list does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
35
			$this->path= dirname(__FILE__)."/";
0 ignored issues
show
Bug Best Practice introduced by
The property path does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
36
			if(isset($_GET['plugins'])){
37
				$this->load_all_plugins= true;
0 ignored issues
show
Bug Best Practice introduced by
The property load_all_plugins does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
38
				$this->full_cache_file= $this->path."edit_area_full_with_plugins.js";
0 ignored issues
show
Bug Best Practice introduced by
The property full_cache_file does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
39
				$this->gzip_cache_file= $this->path."edit_area_full_with_plugins.gz";
0 ignored issues
show
Bug Best Practice introduced by
The property gzip_cache_file does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
40
			}else{
41
				$this->load_all_plugins= false;
42
				$this->full_cache_file= $this->path."edit_area_full.js";
43
				$this->gzip_cache_file= $this->path."edit_area_full.gz";
44
			}
45
			
46
			$this->check_gzip_use();
47
			$this->send_headers();
48
			$this->check_cache();
49
			$this->load_files();
50
			$this->send_datas();
51
		}
52
		
53
		function send_headers()
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
54
		{
55
			header("Content-type: text/javascript; charset: UTF-8");
56
			header("Vary: Accept-Encoding"); // Handle proxies
57
			header(sprintf("Expires: %s GMT", gmdate("D, d M Y H:i:s", time() + $this->param['cache_duration'])) );
58
			if($this->use_gzip)
59
				header("Content-Encoding: ".$this->gzip_enc_header);
60
		}
61
		
62
		function check_gzip_use()
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
63
		{
64
			$encodings = array();
65
			$desactivate_gzip=false;
66
					
67
			if (isset($_SERVER['HTTP_ACCEPT_ENCODING']))
68
				$encodings = explode(',', strtolower(preg_replace("/\s+/", "", $_SERVER['HTTP_ACCEPT_ENCODING'])));
69
			
70
			// desactivate gzip for IE version < 7
71
			if(preg_match("/(?:msie )([0-9.]+)/i", $_SERVER['HTTP_USER_AGENT'], $ie))
72
			{
73
				if($ie[1]<7)
74
					$desactivate_gzip=true;	
75
			}
76
			
77
			// Check for gzip header or northon internet securities
78
			if (!$desactivate_gzip && $this->param['use_gzip'] && (in_array('gzip', $encodings) || in_array('x-gzip', $encodings) || isset($_SERVER['---------------'])) && function_exists('ob_gzhandler') && !ini_get('zlib.output_compression')) {
79
				$this->gzip_enc_header= in_array('x-gzip', $encodings) ? "x-gzip" : "gzip";
0 ignored issues
show
Bug Best Practice introduced by
The property gzip_enc_header does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
80
				$this->use_gzip=true;
0 ignored issues
show
Bug Best Practice introduced by
The property use_gzip does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
81
				$this->cache_file=$this->gzip_cache_file;
0 ignored issues
show
Bug Best Practice introduced by
The property cache_file does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
82
			}else{
83
				$this->use_gzip=false;
84
				$this->cache_file=$this->full_cache_file;
85
			}
86
		}
87
		
88
		function check_cache()
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
89
		{
90
			// Only gzip the contents if clients and server support it
91
			if (file_exists($this->cache_file)) {
92
				// check if cache file must be updated
93
				$cache_date=0;				
94
				if ($dir = opendir($this->path)) {
95
					while (($file = readdir($dir)) !== false) {
96
						if(is_file($this->path.$file) && $file!="." && $file!="..")
97
							$cache_date= max($cache_date, filemtime($this->path.$file));
98
					}
99
					closedir($dir);
100
				}
101
				if($this->load_all_plugins){
102
					$plug_path= $this->path."plugins/";
103
					if (($dir = @opendir($plug_path)) !== false)
104
					{
105
						while (($file = readdir($dir)) !== false)
106
						{
107
							if ($file !== "." && $file !== "..")
108
							{
109
								if(is_dir($plug_path.$file) && file_exists($plug_path.$file."/".$file.".js"))
110
									$cache_date= max($cache_date, filemtime("plugins/".$file."/".$file.".js"));
111
							}
112
						}
113
						closedir($dir);
114
					}
115
				}
116
117
				if(filemtime($this->cache_file) >= $cache_date){
118
					// if cache file is up to date
119
					$last_modified = gmdate("D, d M Y H:i:s",filemtime($this->cache_file))." GMT";
120
					if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) && strcasecmp($_SERVER["HTTP_IF_MODIFIED_SINCE"], $last_modified) === 0)
121
					{
122
						header("HTTP/1.1 304 Not Modified");
123
						header("Last-modified: ".$last_modified);
124
						header("Cache-Control: Public"); // Tells HTTP 1.1 clients to cache
125
						header("Pragma:"); // Tells HTTP 1.0 clients to cache
126
					}
127
					else
128
					{
129
						header("Last-modified: ".$last_modified);
130
						header("Cache-Control: Public"); // Tells HTTP 1.1 clients to cache
131
						header("Pragma:"); // Tells HTTP 1.0 clients to cache
132
						header('Content-Length: '.filesize($this->cache_file));
133
						echo file_get_contents($this->cache_file);
134
					}				
135
					die;
0 ignored issues
show
Best Practice introduced by
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
136
				}
137
			}
138
			return false;
139
		}
140
		
141
		function load_files()
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
142
		{
143
			$loader= $this->get_content("edit_area_loader.js")."\n";
144
			
145
			// get the list of other files to load
146
	    	$loader= preg_replace("/(t\.scripts_to_load=\s*)\[([^\]]*)\];/e"
147
						, "\$this->replace_scripts('script_list', '\\1', '\\2')"
148
						, $loader);
149
		
150
			$loader= preg_replace("/(t\.sub_scripts_to_load=\s*)\[([^\]]*)\];/e"
151
						, "\$this->replace_scripts('sub_script_list', '\\1', '\\2')"
152
						, $loader);
153
154
			// replace languages names
155
			$reg_path= $this->path."reg_syntax/";
156
			$a_displayName	= array();
157
			if (($dir = @opendir($reg_path)) !== false)
158
			{
159
				while (($file = readdir($dir)) !== false)
160
				{
161
					if( $file !== "." && $file !== ".." && ( $pos = strpos( $file, '.js' ) ) !== false )
162
					{
163
						$jsContent	= $this->file_get_contents( $reg_path.$file );
164
						if( preg_match( '@(\'|")DISPLAY_NAME\1\s*:\s*(\'|")(.*)\2@', $jsContent, $match ) )
165
						{
166
							$a_displayName[] = "'". substr( $file, 0, $pos ) ."':'". htmlspecialchars( $match[3], ENT_QUOTES ) ."'";
167
						}
168
					}
169
				}
170
				closedir($dir);
171
			}
172
			$loader	= str_replace( '/*syntax_display_name_AUTO-FILL-BY-COMPRESSOR*/', implode( ",", $a_displayName ), $loader );
173
						
174
			$this->datas= $loader;
0 ignored issues
show
Bug Best Practice introduced by
The property datas does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
175
			$this->compress_javascript($this->datas);
176
			
177
			// load other scripts needed for the loader
178
			preg_match_all('/"([^"]*)"/', $this->script_list, $match);
179
			foreach($match[1] as $key => $value)
180
			{
181
				$content= $this->get_content(preg_replace("/\\|\//i", "", $value).".js");
182
				$this->compress_javascript($content);
183
				$this->datas.= $content."\n";
184
			}
185
			//$this->datas);
186
			//$this->datas= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', "", $this->datas);
187
			
188
			// improved compression step 1/2	
189
			$this->datas= preg_replace(array("/(\b)EditAreaLoader(\b)/", "/(\b)editAreaLoader(\b)/", "/(\b)editAreas(\b)/"), array("EAL", "eAL", "eAs"), $this->datas);
190
			//$this->datas= str_replace(array("EditAreaLoader", "editAreaLoader", "editAreas"), array("EAL", "eAL", "eAs"), $this->datas);
191
			$this->datas.= "var editAreaLoader= eAL;var editAreas=eAs;EditAreaLoader=EAL;";
192
		
193
			// load sub scripts
194
			$sub_scripts="";
195
			$sub_scripts_list= array();
196
			preg_match_all('/"([^"]*)"/', $this->sub_script_list, $match);
0 ignored issues
show
Bug introduced by
The property sub_script_list does not exist on Compressor. Did you mean script_list?
Loading history...
197
			foreach($match[1] as $value){
198
				$sub_scripts_list[]= preg_replace("/\\|\//i", "", $value).".js";
199
			}
200
		
201
			if($this->load_all_plugins){
202
				// load plugins scripts
203
				$plug_path= $this->path."plugins/";
204
				if (($dir = @opendir($plug_path)) !== false)
205
				{
206
					while (($file = readdir($dir)) !== false)
207
					{
208
						if ($file !== "." && $file !== "..")
209
						{
210
							if(is_dir($plug_path.$file) && file_exists($plug_path.$file."/".$file.".js"))
211
								$sub_scripts_list[]= "plugins/".$file."/".$file.".js";
212
						}
213
					}
214
					closedir($dir);
215
				}
216
			}
217
							
218
			foreach($sub_scripts_list as $value){
219
				$sub_scripts.= $this->get_javascript_content($value);
220
			}
221
			// improved compression step 2/2	
222
			$sub_scripts= preg_replace(array("/(\b)editAreaLoader(\b)/", "/(\b)editAreas(\b)/", "/(\b)editArea(\b)/", "/(\b)EditArea(\b)/"), array("eAL", "eAs", "eA", "EA"), $sub_scripts);
223
		//	$sub_scripts= str_replace(array("editAreaLoader", "editAreas", "editArea", "EditArea"), array("eAL", "eAs", "eA", "EA"), $sub_scripts);
224
			$sub_scripts.= "var editArea= eA;EditArea=EA;";
225
			
226
			
227
			// add the scripts
228
		//	$this->datas.= sprintf("editAreaLoader.iframe_script= \"<script type='text/javascript'>%s</script>\";\n", $sub_scripts);
229
		
230
		
231
			// add the script and use a last compression 
232
			if( $this->param['compress'] )
233
			{
234
				$last_comp	= array( 'Á' => 'this',
235
								 'Â' => 'textarea',
236
								 'Ã' => 'function',
237
								 'Ä' => 'prototype',
238
								 'Å' => 'settings',
239
								 'Æ' => 'length',
240
								 'Ç' => 'style',
241
								 'È' => 'parent',
242
								 'É' => 'last_selection',
243
								 'Ê' => 'value',
244
								 'Ë' => 'true',
245
								 'Ì' => 'false'
246
								 /*,
247
									'Î' => '"',
248
								 'Ï' => "\n",
249
								 'À' => "\r"*/);
250
			}
251
			else
252
			{
253
				$last_comp	= array();
254
			}
255
			
256
			$js_replace= '';
257
			foreach( $last_comp as $key => $val )
258
				$js_replace .= ".replace(/". $key ."/g,'". str_replace( array("\n", "\r"), array('\n','\r'), $val ) ."')";
259
			
260
			$this->datas.= sprintf("editAreaLoader.iframe_script= \"<script type='text/javascript'>%s</script>\"%s;\n",
261
								str_replace( array_values($last_comp), array_keys($last_comp), $sub_scripts ), 
262
								$js_replace);
263
			
264
			if($this->load_all_plugins)
265
				$this->datas.="editAreaLoader.all_plugins_loaded=true;\n";
266
		
267
			
268
			// load the template
269
			$this->datas.= sprintf("editAreaLoader.template= \"%s\";\n", $this->get_html_content("template.html"));
270
			// load the css
271
			$this->datas.= sprintf("editAreaLoader.iframe_css= \"<style>%s</style>\";\n", $this->get_css_content("edit_area.css"));
272
					
273
		//	$this->datas= "function editArea(){};editArea.prototype.loader= function(){alert('bouhbouh');} var a= new editArea();a.loader();";
274
					
275
		}
276
		
277
		function send_datas()
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
278
		{
279
			if($this->param['debug']){
280
				$header=sprintf("/* USE PHP COMPRESSION\n");
281
				$header.=sprintf("javascript size: based files: %s => PHP COMPRESSION => %s ", $this->file_loaded_size, strlen($this->datas));
282
				if($this->use_gzip){
283
					$gzip_datas=  gzencode($this->datas, 9, FORCE_GZIP);				
284
					$header.=sprintf("=> GZIP COMPRESSION => %s", strlen($gzip_datas));
285
					$ratio = round(100 - strlen($gzip_datas) / $this->file_loaded_size * 100.0);			
286
				}else{
287
					$ratio = round(100 - strlen($this->datas) / $this->file_loaded_size * 100.0);
288
				}
289
				$header.=sprintf(", reduced by %s%%\n", $ratio);
290
				$header.=sprintf("compression time: %s\n", $this->get_microtime()-$this->start_time); 
291
				$header.=sprintf("%s\n", implode("\n", $this->infos));
292
				$header.=sprintf("*/\n");
293
				$this->datas= $header.$this->datas;	
0 ignored issues
show
Bug Best Practice introduced by
The property datas does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
294
			}
295
			$mtime= time(); // ensure that the 2 disk files will have the same update time
296
			// generate gzip file and cahce it if using disk cache
297
			if($this->use_gzip){
298
				$this->gzip_datas= gzencode($this->datas, 9, FORCE_GZIP);
0 ignored issues
show
Bug Best Practice introduced by
The property gzip_datas does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
299
				if($this->param['use_disk_cache'])
300
					$this->file_put_contents($this->gzip_cache_file, $this->gzip_datas, $mtime);
301
			}
302
			
303
			// generate full js file and cache it if using disk cache			
304
			if($this->param['use_disk_cache'])
305
				$this->file_put_contents($this->full_cache_file, $this->datas, $mtime);
306
			
307
			// generate output
308
			if($this->use_gzip)
309
				echo $this->gzip_datas;
310
			else
311
				echo $this->datas;
312
				
313
//			die;
314
		}
315
				
316
		
317
		function get_content($end_uri)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
318
		{
319
			$end_uri=preg_replace("/\.\./", "", $end_uri); // Remove any .. (security)
320
			$file= $this->path.$end_uri;
321
			if(file_exists($file)){
322
				$this->infos[]=sprintf("'%s' loaded", $end_uri);
0 ignored issues
show
Bug Best Practice introduced by
The property infos does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
323
				/*$fd = fopen($file, 'rb');
324
				$content = fread($fd, filesize($file));
325
				fclose($fd);
326
				return $content;*/
327
				return $this->file_get_contents($file);
328
			}else{
329
				$this->infos[]=sprintf("'%s' not loaded", $end_uri);
330
				return "";
331
			}
332
		}
333
		
334
		function get_javascript_content($end_uri)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
335
		{
336
			$val=$this->get_content($end_uri);
337
	
338
			$this->compress_javascript($val);
339
			$this->prepare_string_for_quotes($val);
340
			return $val;
341
		}
342
		
343
		function compress_javascript(&$code)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
344
		{
345
			if($this->param['compress'])
346
			{
347
				// remove all comments
348
				//	(\"(?:[^\"\\]*(?:\\\\)*(?:\\\"?)?)*(?:\"|$))|(\'(?:[^\'\\]*(?:\\\\)*(?:\\'?)?)*(?:\'|$))|(?:\/\/(?:.|\r|\t)*?(\n|$))|(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))
349
				$code= preg_replace("/(\"(?:[^\"\\\\]*(?:\\\\\\\\)*(?:\\\\\"?)?)*(?:\"|$))|(\'(?:[^\'\\\\]*(?:\\\\\\\\)*(?:\\\\\'?)?)*(?:\'|$))|(?:\/\/(?:.|\r|\t)*?(\n|$))|(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))/s", "$1$2$3", $code);
350
				// remove line return, empty line and tabulation
351
				$code= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', " ", $code);
352
				// add line break before "else" otherwise navigators can't manage to parse the file
353
				$code= preg_replace('/(\b(else)\b)/', "\n$1", $code);
354
				// remove unnecessary spaces
355
				$code= preg_replace('/( |\t|\r)*(;|\{|\}|=|==|\-|\+|,|\(|\)|\|\||&\&|\:)( |\t|\r)*/', "$2", $code);
356
			}
357
		}
358
		
359
		function get_css_content($end_uri){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
360
			$code=$this->get_content($end_uri);
361
			// remove comments
362
			$code= preg_replace("/(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))/s", "", $code);
363
			// remove spaces
364
			$code= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', "", $code);
365
			// remove spaces
366
			$code= preg_replace('/( |\t|\r)?(\:|,|\{|\})( |\t|\r)+/', "$2", $code);
367
		
368
			$this->prepare_string_for_quotes($code);
369
			return $code;
370
		}
371
		
372
		function get_html_content($end_uri){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
373
			$code=$this->get_content($end_uri);
374
			//$code= preg_replace('/(\"(?:\\\"|[^\"])*(?:\"|$))|' . "(\'(?:\\\'|[^\'])*(?:\'|$))|(?:\/\/(?:.|\r|\t)*?(\n|$))|(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))/s", "$1$2$3", $code);
375
			$code= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', " ", $code);
376
			$this->prepare_string_for_quotes($code);
377
			return $code;
378
		}
379
		
380
		function prepare_string_for_quotes(&$str){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
381
			// prepare the code to be putted into quotes 
382
			/*$pattern= array("/(\\\\)?\"/", '/\\\n/'	, '/\\\r/'	, "/(\r?\n)/");
383
			$replace= array('$1$1\\"', '\\\\\\n', '\\\\\\r'	, '\\\n"$1+"');*/
384
			$pattern= array("/(\\\\)?\"/", '/\\\n/'	, '/\\\r/'	, "/(\r?\n)/");
385
			if($this->param['compress'])
386
				$replace= array('$1$1\\"', '\\\\\\n', '\\\\\\r'	, '\n');
387
			else
388
				$replace= array('$1$1\\"', '\\\\\\n', '\\\\\\r'	, "\\n\"\n+\"");
389
			$str= preg_replace($pattern, $replace, $str);
390
		}
391
		
392
		function replace_scripts($var, $param1, $param2)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
393
		{
394
			$this->$var=stripslashes($param2);
395
	        return $param1."[];";
396
		}
397
398
		/* for php version that have not thoses functions */
399
		function file_get_contents($file)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
400
		{
401
			$fd = fopen($file, 'rb');
402
			$content = fread($fd, filesize($file));
0 ignored issues
show
Bug introduced by
It seems like $fd can also be of type false; however, parameter $handle of fread() does only seem to accept resource, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

402
			$content = fread(/** @scrutinizer ignore-type */ $fd, filesize($file));
Loading history...
403
			fclose($fd);
0 ignored issues
show
Bug introduced by
It seems like $fd can also be of type false; however, parameter $handle of fclose() does only seem to accept resource, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

403
			fclose(/** @scrutinizer ignore-type */ $fd);
Loading history...
404
			$this->file_loaded_size+= strlen($content);
405
			return $content;				
406
		}
407
		
408
		function file_put_contents($file, &$content, $mtime=-1)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
409
		{
410
			if($mtime==-1)
411
				$mtime=time();
412
			$fp = @fopen($file, "wb");
413
			if ($fp) {
0 ignored issues
show
introduced by
$fp is of type false|resource, thus it always evaluated to false.
Loading history...
414
				fwrite($fp, $content);
415
				fclose($fp);
416
				touch($file, $mtime);
417
				return true;
418
			}
419
			return false;
420
		}
421
		
422
		function get_microtime()
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
423
		{
424
		   list($usec, $sec) = explode(" ", microtime());
425
		   return ((float)$usec + (float)$sec);
426
		}
427
	}	
428
?>
0 ignored issues
show
Best Practice introduced by
It is not recommended to use PHP's closing tag ?> in files other than templates.

Using a closing tag in PHP files that only contain PHP code is not recommended as you might accidentally add whitespace after the closing tag which would then be output by PHP. This can cause severe problems, for example headers cannot be sent anymore.

A simple precaution is to leave off the closing tag as it is not required, and it also has no negative effects whatsoever.

Loading history...
429