[289] | 1 | <?php |
---|
| 2 | class myUtility { |
---|
| 3 | static $log_dir = null; |
---|
| 4 | |
---|
| 5 | /** |
---|
| 6 | * Return extension of a file name |
---|
| 7 | * |
---|
| 8 | */ |
---|
| 9 | public static function getFileExt($fileName) { |
---|
| 10 | $names = explode('.', $fileName); |
---|
| 11 | $i = count($names); |
---|
| 12 | if ($i>0) return strtolower($names[$i-1]); else return ''; |
---|
| 13 | } |
---|
| 14 | |
---|
| 15 | /** |
---|
| 16 | * return file name (no extension) |
---|
| 17 | * |
---|
| 18 | * |
---|
| 19 | * @param String $fileName |
---|
| 20 | */ |
---|
| 21 | public static function getFileName($fileName) { |
---|
| 22 | $names = explode('.', $fileName); |
---|
| 23 | $i = count($names); |
---|
| 24 | if (count($names)>0) array_pop($names); |
---|
| 25 | return join('.', $names); |
---|
| 26 | } |
---|
| 27 | |
---|
| 28 | /** |
---|
| 29 | * return safe file name (lower byte character) |
---|
| 30 | * |
---|
| 31 | * @param unknown_type $fileName |
---|
| 32 | */ |
---|
| 33 | public static function getSafeFileName($fileName) { |
---|
| 34 | $names = explode('.', $fileName); |
---|
| 35 | $ext = array_pop($names); |
---|
| 36 | $safe = preg_replace('@[^A-Za-z0-9_]+@', '', join($names)); |
---|
| 37 | if ($safe=='') $safe = '0'; |
---|
| 38 | return $safe.'.'.$ext; |
---|
| 39 | } |
---|
| 40 | |
---|
| 41 | /** |
---|
| 42 | * Convert from UTF-8 to non mark Vietnamese text |
---|
| 43 | * |
---|
| 44 | * @param String $value: input text |
---|
| 45 | * @return Non marke Vietnamese text |
---|
| 46 | */ |
---|
| 47 | public static function vietDecode($value) |
---|
| 48 | { |
---|
| 49 | $vietChar = 'á|à |ả|ã|ạ|Ä|ắ|ằ|ẳ|ẵ|ặ|â|ấ|ầ|ẩ|ẫ|áº|é|Ú|ẻ|ẜ|ẹ|ê|ế|á»|á»|á»
|á»|ó|ò|á»|õ|á»|Æ¡|á»|á»|á»|ỡ|ợ|ÃŽ|á»|á»|á»|á»|á»|ú|ù|á»§|Å©|ụ|ư|ứ|ừ|á»|ữ|á»±|Ã|ì|á»|Ä©|á»|Ü|ỳ|á»·|ỹ|ỵ|Ä|Ã|Ã|Ả|Ã|Ạ|Ä|Ắ|Ằ|Ẳ|Ẏ|Ặ|Ã|Ẁ|Ẋ|ẚ|Ẫ|Ậ|Ã|Ã|Ẻ|Ẍ|ẞ|Ã|ẟ|á»|á»|á»|á»|Ã|Ã|á»|Ã|á»|Æ |á»|á»|á»|á» |Ợ|Ã|á»|á»|á»|á»|á»|Ã|Ã|Ị|Åš|Ề|Ư|Ớ|Ừ|Ử|á»®|á»°|Ã|Ã|á»|Äš|á»|Ã|Ỳ|á»¶|Ở|Ỏ|Ä'; |
---|
| 50 | $engChar = 'a|a|a|a|a|a|a|a|a|a|a|a|a|a|a|a|a|e|e|e|e|e|e|e|e|e|e|e|o|o|o|o|o|o|o|o|o|o|o|o|o|o|o|o|o|u|u|u|u|u|u|u|u|u|u|u|i|i|i|i|i|y|y|y|y|y|d|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A|E|E|E|E|E|E|E|E|E|E|E|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|O|U|U|U|U|U|U|U|U|U|U|U|I|I|I|I|I|Y|Y|Y|Y|Y|D'; |
---|
| 51 | $arrVietChar = explode('|', $vietChar); |
---|
| 52 | $arrEngChar = explode('|', $engChar); |
---|
| 53 | return str_replace($arrVietChar, $arrEngChar, $value); |
---|
| 54 | } |
---|
| 55 | |
---|
| 56 | public static function getUrlName($name) { |
---|
| 57 | $name = strtolower(myUtility::vietDecode($name)); |
---|
| 58 | $name = preg_replace('@[^\w\d_]+@', '', $name); |
---|
| 59 | return $name; |
---|
| 60 | } |
---|
| 61 | |
---|
| 62 | /** |
---|
| 63 | * Check hard disk for not exist fileName, if file exists, change it name |
---|
| 64 | * |
---|
| 65 | * @param unknown_type $pathName |
---|
| 66 | * @param unknown_type $fileName |
---|
| 67 | * @param unknown_type $extName |
---|
| 68 | */ |
---|
| 69 | public static function GetNoDuplicateFileName($pathName, &$fileName, $extName) { |
---|
| 70 | $i = 0; |
---|
| 71 | $newFileName = $fileName; |
---|
| 72 | while (file_exists("$pathName/$newFileName.$extName")) { |
---|
| 73 | $newFileName = $fileName . (++$i); |
---|
| 74 | } |
---|
| 75 | $fileName = $newFileName; |
---|
| 76 | } |
---|
| 77 | |
---|
| 78 | public static function moveDirectory($src, $dst) { |
---|
| 79 | if (!is_dir($dst)) {umask(0); mkdir($dst, 0777, true);} |
---|
| 80 | foreach (scandir($src) as $file) { |
---|
| 81 | if ($file=='.' || $file=='..') continue; |
---|
| 82 | $srcm = $src.'/'.$file; |
---|
| 83 | $dstm = $dst.'/'.$file; |
---|
| 84 | if (is_dir($srcm)) myUtility::moveDirectory($srcm, $dstm); |
---|
| 85 | else { |
---|
| 86 | rename($srcm, $dstm); |
---|
| 87 | chmod($dstm, 0777); |
---|
| 88 | } |
---|
| 89 | } |
---|
| 90 | rmdir($src); |
---|
| 91 | } |
---|
| 92 | |
---|
| 93 | public static function cleanDirectory($path) { |
---|
| 94 | foreach (scandir($path) as $dir) { |
---|
| 95 | if ($dir=='.' || $dir=='..') continue; |
---|
| 96 | $dname = $path.'/'.$dir; |
---|
| 97 | if (is_dir($dname)) self::cleanDirectory($dname); |
---|
| 98 | else if (is_file($dname)) unlink($dname); |
---|
| 99 | } |
---|
| 100 | rmdir($path); |
---|
| 101 | } |
---|
| 102 | |
---|
| 103 | public static function ScaleAspect(&$width, &$height, $maxWidth, $maxHeight) { |
---|
| 104 | $sx = $maxWidth / $width; |
---|
| 105 | $sy = $maxHeight / $height; |
---|
| 106 | if ($sx>$sy) $sx = $sy; |
---|
| 107 | $width = round($width * $sx / 2) * 2; |
---|
| 108 | $height = round($height * $sx / 2) * 2; |
---|
| 109 | } |
---|
| 110 | |
---|
| 111 | /** |
---|
| 112 | * Enter description here... |
---|
| 113 | * |
---|
| 114 | * @param unknown_type $fileName |
---|
| 115 | * @param unknown_type $fileThumb |
---|
| 116 | * @param unknown_type $time |
---|
| 117 | * @param unknown_type $info |
---|
| 118 | * @return unknown |
---|
| 119 | */ |
---|
| 120 | public static function FlvToThumbnail($fileName, $fileThumb, $time = null, $info = null) { |
---|
| 121 | try { |
---|
| 122 | if ($info==null) $info = self::GetVideoInfo($fileName); |
---|
| 123 | |
---|
| 124 | if (!isset($info['ID_VIDEO_FORMAT'])) return false; |
---|
| 125 | if (!isset($info['ID_LENGTH'])) return false; |
---|
| 126 | $width = doubleval($info['ID_VIDEO_WIDTH']); |
---|
| 127 | $height = doubleval($info['ID_VIDEO_HEIGHT']); |
---|
| 128 | |
---|
| 129 | self::ScaleAspect($width, $height, 150, 100); |
---|
| 130 | |
---|
| 131 | if ($time===null) $time = doubleval($info['ID_LENGTH']) / 2; |
---|
| 132 | |
---|
| 133 | $logFileName = 'convert_flv_thumb.log'; |
---|
| 134 | |
---|
| 135 | // no .THM file so need to use ffmpeg to get tumbnail image |
---|
| 136 | //ffmpeg -y -i MVI_6640.AVI -s qcif -f mjpeg -t 0.001 movie.jpg |
---|
| 137 | $ffmpeg_cmd = sfConfig::get('app_ffmpeg_exe'); |
---|
| 138 | $command = "$ffmpeg_cmd -y -v 0 -itsoffset -$time -i ". escapeshellarg($fileName) ." -s {$width}x{$height} -f mjpeg -vframes 1 ". escapeshellarg($fileThumb); |
---|
| 139 | //myUtility::log("\n\n\n********".$command, $logFileName); |
---|
| 140 | |
---|
| 141 | $descriptorspec = array( |
---|
| 142 | 0 => array("pipe", "r"), // stdin is a pipe that the child will read from |
---|
| 143 | 1 => array("pipe", "w"), // stdout is a pipe that the child will write to |
---|
| 144 | 2 => array("pipe", "w"), // stdout is a pipe that the child will write to |
---|
| 145 | ); |
---|
| 146 | $process = proc_open($command, $descriptorspec, $pipes); |
---|
| 147 | if (is_resource($process)) { |
---|
| 148 | $ret = true; |
---|
| 149 | while (!feof($pipes[2])) { |
---|
| 150 | $line = fgets($pipes[2],1024); |
---|
| 151 | //myUtility::log($line, $logFileName); |
---|
| 152 | if (preg_match('@: no such file or directory@', $line)) $ret = false; |
---|
| 153 | if (preg_match('@^Error while opening codec for output stream@', $line)) $ret = false; |
---|
| 154 | if (preg_match('@Unknown format@', $line)) $ret = false; |
---|
| 155 | } |
---|
| 156 | fclose($pipes[2]); |
---|
| 157 | proc_close($process); |
---|
| 158 | return $ret; |
---|
| 159 | } else return false; |
---|
| 160 | } catch (Exception $e) { |
---|
| 161 | myUtility::log($e->getMessage(), $logFileName); |
---|
| 162 | return false; |
---|
| 163 | } |
---|
| 164 | } |
---|
| 165 | |
---|
| 166 | public static function ImageToJpg($imageName, $jpgName) { |
---|
| 167 | $convert_cmd = sfConfig::get('app_convert_exe'); |
---|
| 168 | $command = "$convert_cmd ". escapeshellarg($imageName) ." ". escapeshellarg($jpgName); |
---|
| 169 | $descriptorspec = array( |
---|
| 170 | 0 => array("pipe", "r"), // stdin is a pipe that the child will read from |
---|
| 171 | 1 => array("pipe", "w"), // stdout is a pipe that the child will write to |
---|
| 172 | ); |
---|
| 173 | $process = proc_open($command, $descriptorspec, $pipes); |
---|
| 174 | if (is_resource($process)) { |
---|
| 175 | while (!feof($pipes[1])) { |
---|
| 176 | $line = fgets($pipes[1], 1024); |
---|
| 177 | } |
---|
| 178 | fclose($pipes[1]); |
---|
| 179 | proc_close($process); |
---|
| 180 | } |
---|
| 181 | } |
---|
| 182 | |
---|
| 183 | public static function MovieToFlv($movieName, $flvName) { |
---|
| 184 | try { |
---|
| 185 | $logFileName = 'convert_flv.log'; |
---|
| 186 | $ffmpeg_cmd = sfConfig::get('app_ffmpeg_exe'); |
---|
| 187 | |
---|
| 188 | // generate the Flash FLV version of the file |
---|
| 189 | // cif = 352x288 |
---|
| 190 | $command = "$ffmpeg_cmd -y -v 0 -i ". escapeshellarg($movieName) ." -s cif -ar 44100 -r 15 ". escapeshellarg($flvName); |
---|
| 191 | //myUtility::log("\n\n\n********".$command, $logFileName); |
---|
| 192 | |
---|
| 193 | $descriptorspec = array( |
---|
| 194 | 0 => array("pipe", "r"), // stdin is a pipe that the child will read from |
---|
| 195 | 1 => array("pipe", "w"), // stdout is a pipe that the child will write to |
---|
| 196 | 2 => array("pipe", "w"), // stdout is a pipe that the child will write to |
---|
| 197 | ); |
---|
| 198 | $process = proc_open($command, $descriptorspec, $pipes); |
---|
| 199 | if (is_resource($process)) { |
---|
| 200 | $ret = true; |
---|
| 201 | while (!feof($pipes[2])) { |
---|
| 202 | $line = fgets($pipes[2],1024); |
---|
| 203 | //myUtility::log($line, $logFileName); |
---|
| 204 | if (preg_match('@: no such file or directory@', $line)) $ret = false; |
---|
| 205 | if (preg_match('@^Error while opening codec for output stream@', $line)) $ret = false; |
---|
| 206 | if (preg_match('@Unknown format@', $line)) $ret = false; |
---|
| 207 | } |
---|
| 208 | fclose($pipes[2]); |
---|
| 209 | proc_close($process); |
---|
| 210 | return $ret; |
---|
| 211 | } else return false; |
---|
| 212 | } catch (Exception $e) { |
---|
| 213 | myUtility::log($e->getMessage(), $logFileName); |
---|
| 214 | return false; |
---|
| 215 | } |
---|
| 216 | } |
---|
| 217 | |
---|
| 218 | /** |
---|
| 219 | * Get Video info |
---|
| 220 | * |
---|
| 221 | * @param unknown_type $movieName |
---|
| 222 | * @return array of info |
---|
| 223 | * 'ID_VIDEO_WIDTH' => width of video |
---|
| 224 | * 'ID_VIDEO_HEIGHT' => height of video |
---|
| 225 | * 'ID_LENGTH' => lengh of video (in second) |
---|
| 226 | * 'ID_VIDEO_FORMAT' => video codec |
---|
| 227 | * 'ID_AUDIO_FORMAT' => audio codec |
---|
| 228 | */ |
---|
| 229 | public static function GetVideoInfo($movieName) { |
---|
| 230 | try { |
---|
| 231 | $logFileName = 'video_info.log'; |
---|
| 232 | $mplayer_cmd = sfConfig::get('app_mplayer_exe'); |
---|
| 233 | |
---|
| 234 | // generate the Flash FLV version of the file |
---|
| 235 | // cif = 352x288 |
---|
| 236 | $command = "$mplayer_cmd -identify " . escapeshellarg($movieName) ." -ao null -vo null -frames 0"; |
---|
| 237 | //myUtility::log("\n\n\n********".$command, $logFileName); |
---|
| 238 | |
---|
| 239 | $descriptorspec = array( |
---|
| 240 | 0 => array("pipe", "r"), // stdin is a pipe that the child will read from |
---|
| 241 | 1 => array("pipe", "w"), // stdout is a pipe that the child will write to |
---|
| 242 | 2 => array("pipe", "w"), // stdout is a pipe that the child will write to |
---|
| 243 | ); |
---|
| 244 | $process = proc_open($command, $descriptorspec, $pipes); |
---|
| 245 | if (is_resource($process)) { |
---|
| 246 | $ret = array(); |
---|
| 247 | while (!feof($pipes[1])) { |
---|
| 248 | $line = fgets($pipes[1],1024); |
---|
| 249 | //myUtility::log($line, $logFileName); |
---|
| 250 | if (preg_match('@ID_VIDEO_FORMAT|ID_VIDEO_WIDTH|ID_VIDEO_HEIGHT|ID_AUDIO_FORMAT|ID_LENGTH@', $line)) { |
---|
| 251 | $col = explode('=', trim($line)); |
---|
| 252 | $ret[$col[0]] = $col[1]; |
---|
| 253 | } |
---|
| 254 | } |
---|
| 255 | fclose($pipes[1]); |
---|
| 256 | proc_close($process); |
---|
| 257 | return $ret; |
---|
| 258 | } else return false; |
---|
| 259 | } catch (Exception $e) { |
---|
| 260 | myUtility::log($e->getMessage(), $logFileName); |
---|
| 261 | return array(); |
---|
| 262 | } |
---|
| 263 | } |
---|
| 264 | |
---|
| 265 | public static function SizeImage($maxWidth, $maxHW, $fileName, $thumbFileName, $allowBigger=true, $externalFileName=false) { |
---|
| 266 | try { |
---|
| 267 | $logFileName = 'convert_img.log'; |
---|
| 268 | |
---|
| 269 | $width = intval($maxWidth); $height = intval($maxHW); |
---|
| 270 | if ($width==null || $height==null) return false; |
---|
| 271 | if (false==$allowBigger) { |
---|
| 272 | list($mwidth, $mheight) = myUtility::getImageSize($fileName, $externalFileName); |
---|
| 273 | if ($mwidth==0 || $mheight==0) return false; |
---|
| 274 | $mwidth = intval($mwidth); $mheight = intval($mheight); |
---|
| 275 | if ($mwidth<=$width && $mheight<=$height) { |
---|
| 276 | $width = $mwidth; |
---|
| 277 | $height = $mheight; |
---|
| 278 | } |
---|
| 279 | } |
---|
| 280 | |
---|
| 281 | $img_cmd = sfConfig::get('app_convert_exe'); |
---|
| 282 | if ($externalFileName) |
---|
| 283 | $fileName = '"'.$fileName.'"'; |
---|
| 284 | else |
---|
| 285 | $fileName = escapeshellarg($fileName); |
---|
| 286 | $command = "$img_cmd -resize {$width}x{$height} -flatten -background white -verbose " . $fileName . ' ' . escapeshellarg($thumbFileName); |
---|
| 287 | //myUtility::log("Execute ".$command, $logFileName, "\n"); |
---|
| 288 | |
---|
| 289 | $descriptorspec = array( |
---|
| 290 | 0 => array("pipe", "r"), // stdin is a pipe that the child will read from |
---|
| 291 | 1 => array("pipe", "w"), // stdout is a pipe that the child will write to |
---|
| 292 | ); |
---|
| 293 | $process = proc_open($command, $descriptorspec, $pipes); |
---|
| 294 | |
---|
| 295 | if (is_resource($process)) { |
---|
| 296 | $ret = true; |
---|
| 297 | while (!feof($pipes[1])) { |
---|
| 298 | $line = fgets($pipes[1],1024); |
---|
| 299 | //if ($line != '') myUtility::log($line, $logFileName); |
---|
| 300 | if (preg_match('@missing an image filename@', $line)) $ret = false; |
---|
| 301 | } |
---|
| 302 | fclose($pipes[1]); |
---|
| 303 | proc_close($process); |
---|
| 304 | return $ret; |
---|
| 305 | } |
---|
| 306 | return false; |
---|
| 307 | } catch (Exception $e) { |
---|
| 308 | myUtility::log($e->getMessage(), $logFileName); |
---|
| 309 | return false; |
---|
| 310 | } |
---|
| 311 | } |
---|
| 312 | |
---|
| 313 | public static function FlvAddMeta($fileName) { |
---|
| 314 | try { |
---|
| 315 | $logFileName = 'meta_flv.log'; |
---|
| 316 | $img_cmd = sfConfig::get('app_flvtool2_exe'); |
---|
| 317 | |
---|
| 318 | $command = "$img_cmd -U " . escapeshellarg($fileName); |
---|
| 319 | $descriptorspec = array( |
---|
| 320 | 0 => array("pipe", "r"), // stdin is a pipe that the child will read from |
---|
| 321 | 1 => array("pipe", "w"), // stdout is a pipe that the child will write to |
---|
| 322 | ); |
---|
| 323 | //myUtility::log($command, $logFileName); |
---|
| 324 | $process = proc_open($command, $descriptorspec, $pipes); |
---|
| 325 | |
---|
| 326 | if (is_resource($process)) { |
---|
| 327 | $ret = true; |
---|
| 328 | while (!feof($pipes[1])) { |
---|
| 329 | //myUtility::log($line, $logFileName); |
---|
| 330 | $line = fgets($pipes[1],1024); |
---|
| 331 | } |
---|
| 332 | fclose($pipes[1]); |
---|
| 333 | proc_close($process); |
---|
| 334 | return $ret; |
---|
| 335 | } else return false; |
---|
| 336 | } catch (Exception $e) { |
---|
| 337 | myUtility::log($e->getMessage(), $logFileName); |
---|
| 338 | return false; |
---|
| 339 | } |
---|
| 340 | } |
---|
| 341 | |
---|
| 342 | public static function getSWFImageSize($fileName) { |
---|
| 343 | try { |
---|
| 344 | $width = 640; |
---|
| 345 | $height = 480; |
---|
| 346 | |
---|
| 347 | $img_cmd =sfConfig::get('app_swfdump_exe'); |
---|
| 348 | $command = "$img_cmd -X -Y " . escapeshellarg($fileName); |
---|
| 349 | $descriptorspec = array( |
---|
| 350 | 0 => array("pipe", "r"), // stdin is a pipe that the child will read from |
---|
| 351 | 1 => array("pipe", "w"), // stdout is a pipe that the child will write to |
---|
| 352 | ); |
---|
| 353 | $process = proc_open($command, $descriptorspec, $pipes); |
---|
| 354 | |
---|
| 355 | if (is_resource($process)) { |
---|
| 356 | while (!feof($pipes[1])) { |
---|
| 357 | $line = fgets($pipes[1],1024); |
---|
| 358 | if (preg_match('@-X ([0-9]+) -Y ([0-9]+)@', $line, $size)) { |
---|
| 359 | $width = intval($size[1]); |
---|
| 360 | $height = intval($size[2]); |
---|
| 361 | } |
---|
| 362 | } |
---|
| 363 | fclose($pipes[1]); |
---|
| 364 | proc_close($process); |
---|
| 365 | } |
---|
| 366 | return array($width, $height); |
---|
| 367 | } catch (Exception $e) { |
---|
| 368 | return array($width, $height); |
---|
| 369 | } |
---|
| 370 | } |
---|
| 371 | |
---|
| 372 | public static function getImageSize($fileName, $externalFile=false) { |
---|
| 373 | |
---|
| 374 | $length = strlen($fileName); |
---|
| 375 | $ext = $length>3?substr($fileName, $length-3, 3):''; |
---|
| 376 | $ext = strtolower($ext); |
---|
| 377 | if ($ext=='swf') return self::getSWFImageSize($fileName); |
---|
| 378 | $width = 0; |
---|
| 379 | $height = 0; |
---|
| 380 | |
---|
| 381 | if ($externalFile) |
---|
| 382 | $fileName = '"'.$fileName.'"'; |
---|
| 383 | else |
---|
| 384 | $fileName = escapeshellarg($fileName); |
---|
| 385 | |
---|
| 386 | $img_cmd = sfConfig::get('app_identify_exe'); |
---|
| 387 | $command = "$img_cmd -format %wx%h\\n " . $fileName; |
---|
| 388 | $descriptorspec = array( |
---|
| 389 | 0 => array("pipe", "r"), // stdin is a pipe that the child will read from |
---|
| 390 | 1 => array("pipe", "w"), // stdout is a pipe that the child will write to |
---|
| 391 | ); |
---|
| 392 | $process = proc_open($command, $descriptorspec, $pipes); |
---|
| 393 | |
---|
| 394 | if (is_resource($process)) { |
---|
| 395 | $ret = true; |
---|
| 396 | while (!feof($pipes[1])) { |
---|
| 397 | $line = trim(fgets($pipes[1],1024)); |
---|
| 398 | if (preg_match('@Improper image header@', $line)) $ret = false; |
---|
| 399 | if (preg_match('@Not a JPEG file@', $line)) $ret = false; |
---|
| 400 | if (preg_match('@no decode delegate for this image format@', $line)) $ret = false; |
---|
| 401 | if ($line!=null) { |
---|
| 402 | if ($width == null && preg_match('@([0-9]+)x([0-9]+)@', $line, $size)) { |
---|
| 403 | $width = intval($size[1]); |
---|
| 404 | $height = intval($size[2]); |
---|
| 405 | } |
---|
| 406 | } |
---|
| 407 | } |
---|
| 408 | fclose($pipes[1]); |
---|
| 409 | proc_close($process); |
---|
| 410 | } else $ret = false; |
---|
| 411 | return array($width, $height); |
---|
| 412 | } |
---|
| 413 | |
---|
| 414 | public static function global_image_tag($fileName, $width, $height, $vars = null) { |
---|
| 415 | $ext = myUtility::getFileExt($fileName); |
---|
| 416 | switch ($ext) { |
---|
| 417 | case 'swf': |
---|
| 418 | return flash_tag($fileName, $width, $height, $vars, true); |
---|
| 419 | default: |
---|
| 420 | return image_tag($fileName, array('width'=>$width, 'height'=>$height)); |
---|
| 421 | } |
---|
| 422 | } |
---|
| 423 | |
---|
| 424 | public static function redirectWithCustomReferer($host, $retHost='', $param = null) { |
---|
| 425 | echo " |
---|
| 426 | <head> |
---|
| 427 | <meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> |
---|
| 428 | </head> |
---|
| 429 | <form method='post' action='$host'> |
---|
| 430 | <input type='hidden' id='ret' name='ret' value='$retHost'/> |
---|
| 431 | </form> |
---|
| 432 | Xin quÜ vá» Äợi giây lát... Nếu trang web khÃŽng tá»± Äá»ng chuyá»n, hãy <a href='#' onclick='submitform()'>Click và o Äây</a> |
---|
| 433 | <script> |
---|
| 434 | function submitform() { |
---|
| 435 | document.forms[0].submit(); |
---|
| 436 | } |
---|
| 437 | window.setTimeout('submitform()',50); |
---|
| 438 | </script> |
---|
| 439 | "; |
---|
| 440 | exit(); |
---|
| 441 | } |
---|
| 442 | |
---|
| 443 | /** |
---|
| 444 | * execute native sql |
---|
| 445 | * |
---|
| 446 | * @param unknown_type $sql |
---|
| 447 | * @return array of rows, each row is an array of fields (no key) |
---|
| 448 | */ |
---|
| 449 | public static function execSql($sql, $noResult = false) { |
---|
| 450 | $criteria = new Criteria(); |
---|
| 451 | $dbMap = Propel::getDatabaseMap($criteria->getDbName()); |
---|
| 452 | $db = Propel::getDB($criteria->getDbName()); |
---|
| 453 | |
---|
| 454 | $con = Propel::getConnection($criteria->getDbName(), Propel::CONNECTION_READ); |
---|
| 455 | |
---|
| 456 | $stmt = $con->prepare($sql); |
---|
| 457 | $stmt->execute(); |
---|
| 458 | if ($noResult==true) return; |
---|
| 459 | $rows = array(); |
---|
| 460 | try { |
---|
| 461 | while ($row = $stmt->fetch(PDO::FETCH_NUM)) { |
---|
| 462 | $rows[] = $row; |
---|
| 463 | } |
---|
| 464 | } catch (Exception $e) {} |
---|
| 465 | $stmt->closeCursor(); |
---|
| 466 | return $rows; |
---|
| 467 | } |
---|
| 468 | |
---|
| 469 | public static function log($message, $fileName = 'blog.log', $prefix = '') { |
---|
| 470 | if (null == self::$log_dir) self::$log_dir = sfConfig::get('sf_log_dir'); |
---|
| 471 | error_log($prefix.date('Y-m-d H:i:s ').substr(session_id(), 0, 5).' '.$message."\n", 3, self::$log_dir.'/'.$fileName); |
---|
| 472 | } |
---|
| 473 | |
---|
| 474 | public static function track_upload($message, $logFile) { |
---|
| 475 | error_log(date('H:i:s ').$message."\n", 3, sfConfig::get('sf_web_dir').'/uploads/previews/upinfo/'.$logFile.'_'.date('Ymd').'.log'); |
---|
| 476 | } |
---|
| 477 | |
---|
| 478 | /** |
---|
| 479 | * Truncates +text+ to the length of +length+ and replaces the last three characters with the +truncate_string+ |
---|
| 480 | * if the +text+ is longer than +length+. |
---|
| 481 | */ |
---|
| 482 | public static function mb_truncate_text($text, $length = 33, $truncate_string = '...', $truncate_lastspace = false) |
---|
| 483 | { |
---|
| 484 | if ($text == '') { |
---|
| 485 | return ''; |
---|
| 486 | } |
---|
| 487 | |
---|
| 488 | if (mb_strlen($text, 'utf8') > $length) { |
---|
| 489 | $truncate_text = mb_substr($text, 0, $length - strlen($truncate_string), 'utf8'); |
---|
| 490 | if ($truncate_lastspace) { |
---|
| 491 | $truncate_text = preg_replace('/\s+?(\S+)?$/', '', $truncate_text); |
---|
| 492 | } |
---|
| 493 | |
---|
| 494 | return $truncate_text.$truncate_string; |
---|
| 495 | } |
---|
| 496 | else { |
---|
| 497 | return $text; |
---|
| 498 | } |
---|
| 499 | } |
---|
| 500 | |
---|
| 501 | public static function htmlToText($str) { |
---|
| 502 | $text = new html2text($str); |
---|
| 503 | return $text->get_text(); |
---|
| 504 | } |
---|
| 505 | |
---|
| 506 | /** |
---|
| 507 | * Return first day of week that include $date |
---|
| 508 | * |
---|
| 509 | * @param string $date (not include time) |
---|
| 510 | * @return string first day of week |
---|
| 511 | */ |
---|
| 512 | public static function dateToWeek($date) { |
---|
| 513 | $time = strtotime($date); |
---|
| 514 | $dayOfWeek = date('w', $time); |
---|
| 515 | return date('Y-m-d', strtotime("$date -$dayOfWeek day")); |
---|
| 516 | } |
---|
| 517 | |
---|
| 518 | /** |
---|
| 519 | * Create random password |
---|
| 520 | * |
---|
| 521 | * @param int $lenght: length of random password |
---|
| 522 | * @return password |
---|
| 523 | */ |
---|
| 524 | public function create_password($length = 6) |
---|
| 525 | { |
---|
| 526 | $chars = '0123456789'; |
---|
| 527 | srand(time()); |
---|
| 528 | $pass = ''; |
---|
| 529 | for ($i = 0; $i < $length; $i++) { |
---|
| 530 | $num = rand(0, strlen($chars)-1); |
---|
| 531 | $pass .= $chars[$num]; |
---|
| 532 | } |
---|
| 533 | return $pass; |
---|
| 534 | } |
---|
| 535 | |
---|
| 536 | public function getRealIpAddr() { |
---|
| 537 | if (!empty($_SERVER['HTTP_CLIENT_IP'])) { //check ip from share internet |
---|
| 538 | $ip = $_SERVER['HTTP_CLIENT_IP']; |
---|
| 539 | } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { //to check ip is pass from proxy |
---|
| 540 | $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; |
---|
| 541 | } else { |
---|
| 542 | $ip = $_SERVER['REMOTE_ADDR']; |
---|
| 543 | } |
---|
| 544 | return $ip; |
---|
| 545 | } |
---|
| 546 | |
---|
| 547 | public function validate($filterclass, &$data, &$error) { |
---|
| 548 | $filter = new $filterclass(); |
---|
| 549 | $filter->initialize(null); |
---|
| 550 | return $filter->execute($data, $error); |
---|
| 551 | } |
---|
| 552 | } |
---|
| 553 | ?> |
---|