* @copyright 2015 PrestaShow.pl * @license http://PrestaShow.pl/license */ class PShow_Log { const IMPORT_START = "*-*-* IMPORT START *-*-*"; const IMPORT_CRON_START = "*-*-* DIRECT IMPORT START *-*-*"; const IMPORT_STOP = "*-*-* IMPORT STOPPED *-*-*"; const IMPORT_FINISH = "*-*-* IMPORT FINISHED *-*-*"; const IMPORT_SUCCESS = "object from line %d imported successfully..."; const IMPORT_SKIP = "object from line %d with type %s skipped..."; const IMPORT_SKIP__IMPORTED = "object from line %d typu %s skipped because product with this code/id was imported befaore..."; const IMPORT_SKIP__NOT_FOUND = "object from line %d typu %s skipped because not found products to update..."; const IMPORT_FAIL = "object from line %d not imported..."; const FILE_DOWNLOAD = "*-*-- downloading file from: %s"; const FILE_CLONE = "*-*-- file cloned into: %s"; public static $importInstance = null; /** * File handlers * * @var array of resource */ private static $fileHandle = array(); /** * Close all opened log files */ public static function closeAllFiles() { foreach (self::$fileHandle as $index => $handle) { fclose($handle); unset(self::$fileHandle[$index]); } } /** * * @param string $file_path_ * @return resource */ protected static function getFileHandler($file_path_) { $dir_path = str_replace('.log', '', $file_path_); if (!is_dir($dir_path)) { mkdir($dir_path, 0777, true); // add index.php for security $token = md5($dir_path); $contents = '".$date_eu."

"; '; $contents .= ' } '; $contents .= ' if (!count($files)) echo "

No files found...

"; '; $contents .= ' die(); '; $contents .= ' } else { die("Access denied"); }'; file_put_contents($dir_path . '/index.php', $contents); } if (file_exists($file_path_)) { @rename($file_path_, $dir_path . '/old-log.log'); } $file_path = $dir_path . '/' . date('d_m_Y') . '.log'; return fopen($file_path, 'a'); } /** * Append to log file * * @param string $file * @param string $txt * @return boolean */ public static function add($file, $txt) { if (stripos($file, _IMPORT_LOG_PATH_) === false) { $file = _IMPORT_LOG_PATH_ . $file; } if (!array_key_exists($file, self::$fileHandle)) { self::$fileHandle[$file] = self::getFileHandler($file); } if (self::$fileHandle[$file] === false) { return false; } fwrite(self::$fileHandle[$file], "\n[" . date('H:i:s d/m/Y') . "] " . $txt); } /** * Append to global log * * @param type $txt */ public static function addGlobal($txt) { $file = getModulePath(__FILE__) . 'log/' . date('d-m-Y') . '.log'; if (!array_key_exists($file, self::$fileHandle)) { self::$fileHandle[$file] = fopen($file, 'a'); } fwrite(self::$fileHandle[$file], "\n[" . date('H:i:s d/m/Y') . "] " . $txt); } /** * Append to import log * * @param string $txt * @param boolean $addTime * @return boolean */ public static function addImportLog($txt, $addTime = true) { if (self::$importInstance === null || self::$importInstance === false) { self::$importInstance = PShow_Import::getInstanceOfRunningImport(); if (!self::$importInstance) { return false; } } self::add(self::$importInstance->filename . '.log', ' ' . ($addTime ? '<' . PShow_Timer::getInstance()->getElapsedTime(5) . 's> ['.PShow_Import::getInstanceOfRunningImport()->current_row_number.']->' : null) . htmlspecialchars($txt)); } /** * Append to import log * * @param Exception $e */ public static function addExceptionLog($e) { self::add(self::$importInstance->filename . '.log', (string) $e); // $pattern = "Exception in %s [%d]: %s"; // $str = sprintf($pattern, $e->getFile(), $e->getLine(), $e->getMessage()); // // self::add(self::$importInstance->filename . '.log', $str); } /** * Get log contents * * @param string $filepath_ * @return string */ public static function getLogFile($filepath_) { $dir_path = str_replace('.log', '', $filepath_); $filepath = $dir_path . '/' . date('d_m_Y') . '.log'; if (!file_exists($filepath)) { return "log is empty..."; } $result = "error getting log file..."; $disabled = ini_get("disable_functions"); if (stripos($disabled, 'exec') === false) { exec('tail -30 "' . $filepath . '"', $result); } if (empty($result) || stripos($disabled, 'exec') !== false) { $result = file_get_contents($filepath); if (strlen($result) > 3000) { $result = substr($result, -3000, 3000); } $result = array(str_replace("\n", "
", $result)); } return implode('
', $result); } /** * Remove old log files */ public static function removeOldFiles() { $days_limit = PShow_Settings::getInstance(__FILE__)->get('log_file_expiration'); if (!is_numeric($days_limit)) { $days_limit = 30; } $time_limit = strtotime('-' . (int) $days_limit . ' days'); $files = glob(_IMPORT_LOG_PATH_ . '*/* .log'); foreach ($files as $file) { $filename = pathinfo($file, PATHINFO_FILENAME); $date_eu = str_replace('_', '-', $filename); $time = strtotime($date_eu); if ($time < $time_limit) { @unlink($file); } } } }