#0 | Image\Storage->checkOriginalExists(/var/www/vhosts/uzbekinvest.uz/httpdocs/public/files/original/publication/124.jpg) /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Image/Storage.php (314) <?php namespace Image; use Phalcon\Mvc\User\Component; define('IMG_ROOT_REL_PATH', 'files'); define('DIR_SEP', '/'); define('IMG_ROOT_PATH', ROOT . DIR_SEP); define('IMG_STORAGE_SERVER', ''); define('IMG_EXTENSION', 'jpg'); define('NOIMAGE', '/assets/admin/images/noimage.jpg'); define('IMG_DEBUG_MODE', true); class Storage extends Component { private static $STRATEGIES = [ 'w', // Масштабируем по ширине 'wh', // Масштабируем по заданной ширине и высоте. Изображение подганяется в этот прямоугольник 'a', // Центрируем и обрезаем изображение по заданной высоте и ширине таким образом, чтоб оно полностью заполнило пространство ]; private $id = null; private $image_hash = null; private $type = null; private $strategy = 'w'; private $width = 100; private $height = null; private $container = false; private $hash = false; private $attributes = []; private $exists = true; private $widthHeight = true; private $stretch = true; public function __construct(array $params = [], array $attributes = []) { $this->setIdFromParams($params); $this->attributes = $attributes; $this->type = (isset($params['type'])) ? $params['type'] : 'publication'; $this->strategy = (isset($params['strategy'])) ? $params['strategy'] : 'w'; $this->container = (isset($params['container'])) ? $params['container'] : false; $this->image_hash = (isset($params['image_hash'])) ? $params['image_hash'] : null; $this->hash = (isset($params['hash'])) ? $params['hash'] : false; $this->setDimensionsAttributes($params); } private function setDimensionsAttributes(array $params = []) { $this->width = (isset($params['width'])) ? $params['width'] : 100; $this->height = (isset($params['height'])) ? $params['height'] : null; $this->widthHeight = (isset($params['widthHeight'])) ? $params['widthHeight'] : true; $this->widthHeight = (isset($params['widthHeight']) && MOBILE_DEVICE) ? false : true; $this->stretch = (isset($params['stretch'])) ? $params['stretch'] : null; } private function setIdFromParams($params) { if (isset($params['id'])) { if (preg_match('/^\d+$/', $params['id'])) { $this->id = (int) $params['id']; } else { $this->id = $params['id']; } } else { if (IMG_DEBUG_MODE) { throw new \Exception("ID не определен"); } } } /** * HTML-тег изображения, готовый к использованию * <img src="" alt="" /> */ public function imageHtml() { //Из заданных параметров и атрибутов составляем html-тэг $attributes = $this->attributesForImageHtml(); // Получаем относительный адрес файла кешированного изображения $src = $this->cachedRelPath(); if ($this->exists) { if ($this->hash) { $src .= '?' . microtime(); } } else { $src = NOIMAGE; $attributes['width'] = $this->width; $attributes['height'] = $this->height; } $attr_src = 'src="' . $this->config->base_path . $src . '"'; $result = '<img ' . $attr_src . $this->attributesResultForImageHtml($attributes) . '/>'; if ($this->container) { $result = '<div class="img-container" style="width:' . $this->width . 'px; height:' . $this->height . 'px">' . $result . '</div>'; } return $result; } private function attributesForImageHtml() { $attributes = $this->attributes; if ($this->widthHeight) { if ($this->stretch && in_array($this->strategy, ['wh', 'a'])) { $this->stretch = false; } if ($this->stretch) { if ($this->width) { $attributes['width'] = $this->width; } if ($this->height) { $attributes['height'] = $this->height; } } else { $widthHeight = $this->getImageWidthHeight(); if ($widthHeight['width']) { $attributes['width'] = $widthHeight['width']; } if ($widthHeight['height']) { $attributes['height'] = $widthHeight['height']; } } } $attributes['alt'] = (isset($attributes['alt'])) ? htmlspecialchars($attributes['alt'], ENT_QUOTES) : ''; return $attributes; } private function attributesResultForImageHtml($attributes) { $attributesHtmlArray = []; foreach ($attributes as $el => $val) { $attributesHtmlArray[] = $el . '="' . $val . '"'; } $attributesHtml = implode(' ', $attributesHtmlArray); $attributesHtmlResult = ($attributesHtml) ? ' ' . $attributesHtml : ''; return $attributesHtmlResult; } /** * Относительный адрес файла кешированного изображения * /img/preview/405102/405102_1_w_100.jpg */ public function cachedRelPath() { // Рассчитываем по входящим параметрам относительный путь к кешированному файлу $cachedRelPath = $this->calculateCachedRelPath(); // Совмещаем относительный путь с корневым, получаем абсолютный путь $cachedAbsPath = IMG_ROOT_PATH . $cachedRelPath; // Проверяем существование такого файла. если файл не существует: if (!file_exists($cachedAbsPath)) { // Генерируем кеш-файл по заданным параметрам $this->generateCachedImage(); } return IMG_STORAGE_SERVER . $cachedRelPath; } public function cachedAbsPath() { return IMG_ROOT_PATH . $this->cachedRelPath(); } /** * Относительный адрес файла оригинального изображения */ public function originalRelPath() { return IMG_STORAGE_SERVER . $this->calculateOriginalRelPath(); } /** * Абсолютный адрес файла оригинального изображения */ public function originalAbsPath() { return $this->getOriginalAbsPath(); } public function save($file) { if (file_exists($file)) { return copy($file, $this->originalAbsPath()); } } public function originalWidthHeight() { $imageSize = getimagesize($this->originalAbsPath()); if (!empty($imageSize)) { return [ 'width' => $imageSize[0], 'height' => $imageSize[1] ]; } } public function cachedFileSize() { $path = $this->cachedAbsPath(); if (file_exists($path)) { return filesize($path); } } public function isExists() { if (file_exists($this->getOriginalAbsPath())) { return true; } else { return false; } } /** * Рассчитываем по входящим параметрам относительный путь к кешированному файлу * /img/preview/405/405102_1_w_100.jpg */ private function calculateCachedRelPath() { $pathParts = []; $pathParts[] = IMG_ROOT_REL_PATH; $pathParts[] = 'cache'; $pathParts[] = $this->type; if (is_int($this->id)) { $idPart = floor($this->id / 1000); } else { $idPart = $this->id; } //$pathParts[] = $idPart; $fileParts = []; $fileParts[] = $this->id; if ($this->image_hash) { $fileParts[] = $this->image_hash; } if (in_array($this->strategy, self::$STRATEGIES)) { $fileParts[] = $this->strategy; } else { if (IMG_DEBUG_MODE) { throw new \Exception("Параметр 'strategy' указан неверно"); } return; } $fileParts[] = $this->width; if ($this->height) { $fileParts[] = $this->height; } // "img/preview/405" $path = implode(DIR_SEP, $pathParts); // "405102_1_w_100" $file = implode('_', $fileParts); return $path . DIR_SEP . $file . '.jpg'; } /** * Рассчитываем по входящим параметрам относительный путь к оригинальному файлу * /img/original/preview/405/405102_1.jpg */ private function calculateOriginalRelPath() { $pathParts = []; $pathParts[] = IMG_ROOT_REL_PATH; $pathParts[] = 'original'; $pathParts[] = $this->type; if (is_int($this->id)) { $idPart = floor($this->id / 1000); } else { $idPart = $this->id; } //$pathParts[] = $idPart; $fileParts = []; $fileParts[] = $this->id; if ($this->image_hash) { $fileParts[] = $this->image_hash; } // "img/original/preview/405" $path = implode(DIR_SEP, $pathParts); // "405102_1" $file = implode('_', $fileParts); return $path . DIR_SEP . $file . '.jpg'; } /** * генерируем кеш-файл по заданным параметрам */ private function generateCachedImage() { // Абсолютный путь оригинального изображения $originalAbsPath = IMG_ROOT_PATH . $this->calculateOriginalRelPath(); $this->checkOriginalExists($originalAbsPath); require_once __DIR__ . '/PHPThumb/ThumbLib.inc.php'; $image = \PhpThumbFactory::create($originalAbsPath); // Для мобильных устройств отдаем изображение с качеством на уровне 60% if (MOBILE_DEVICE) { $options = ['jpegQuality' => 60]; $image->setOptions($options); } switch ($this->strategy) { case 'w': // Масштабируем по ширине $image->resize($this->width); break; case 'wh': // Масштабируем по заданной ширине и высоте. Изображение подганяется в этот прямоугольник $image->resize($this->width, $this->height); break; case 'a': // Центрируем и обрезаем изображение по заданной высоте и ширине таким образом, чтоб оно полностью заполнило пространство $image->adaptiveResize($this->width, $this->height); break; } $this->saveImage($image, $originalAbsPath); } public function cropOriginal($left, $top, $width, $height) { $originalAbsPath = IMG_ROOT_PATH . $this->calculateOriginalRelPath(); // Абсолютный путь оригинального изображения $this->checkOriginalExists($originalAbsPath); require_once __DIR__ . '/PHPThumb/ThumbLib.inc.php'; $image = \PhpThumbFactory::create($originalAbsPath); $image->crop($left, $top, $width, $height); $this->saveImage($image, $originalAbsPath); } private function checkOriginalExists($originalAbsPath) { if (!file_exists($originalAbsPath)) { if (IMG_DEBUG_MODE) { throw new \Exception("Файл {$originalAbsPath} не существует"); } else { $this->exists = false; } return; } } private function saveImage($image, $originalAbsPath) { // Если оригинал не заблокирован, блокируем. Это необходимо для предотвращения множественной генерации кеш-файла параллельными запросами if ($this->lockOriginal($originalAbsPath)) { // Сохраняем кешированное изображение $image->save($this->getCachedAbsPath()); // Снимаем блокировку $this->unlockOriginal($originalAbsPath); } else { if (IMG_DEBUG_MODE) { throw new \Exception("Файл {$originalAbsPath} заблокирован механизмом проверки _LOCK или не существует"); } else { $this->exists = false; } return; } } /** * Удаляет оригинальные и кешированные изображения */ public function remove($removeAll = true) { $this->removeCached(); $this->removeOriginal($removeAll); } /** * Удаляет оригинальные изображения */ public function removeOriginal($removeAll = true) { if (!$removeAll) { if (file_exists($this->originalAbsPath())) { unlink($this->originalAbsPath()); } return; } $originalAbsPath = IMG_ROOT_PATH . $this->calculateOriginalRelPath(); $originalAbsPathDir = implode(DIR_SEP, array_slice(explode(DIR_SEP, $originalAbsPath), 0, -1)); // Абсолютный путь директории if ($this->image_hash) { $search = $originalAbsPathDir . "/" . $this->id . "_*.jpg"; } else { $search = $originalAbsPathDir . "/" . $this->id . ".jpg"; } $files = glob($search); if (!empty($files)) { foreach ($files as $file) { if (is_file($file)) { unlink($file); } } } } /** * Удаляет кешированные изображения */ public function removeCached() { $cachedAbsPath = IMG_ROOT_PATH . $this->calculateCachedRelPath(); $cachedAbsPathDir = implode(DIR_SEP, array_slice(explode(DIR_SEP, $cachedAbsPath), 0, -1)); // Абсолютный путь директории $search = $cachedAbsPathDir . "/" . $this->id . "_*.jpg"; $files = glob($search); if (!empty($files)) { foreach ($files as $file) { if (is_file($file)) { unlink($file); } } } } /** * Размеры кешированного изображения */ public function getImageWidthHeight() { $cachedAbsPath = IMG_ROOT_PATH . $this->calculateCachedRelPath(); if (file_exists($cachedAbsPath)) { $imageSize = getimagesize($cachedAbsPath); if (!empty($imageSize)) { return [ 'width' => $imageSize[0], 'height' => $imageSize[1] ]; } } else { return [ 'width' => null, 'height' => null ]; } } /** * Проверяем блокировку оригинала изображения. Если нет, то блокируем * @param string $originalAbsPath * @return boolean true|false */ private function lockOriginal($originalAbsPath) { $lockFileName = $this->getLockFileName($originalAbsPath); if (file_exists($lockFileName)) { return false; } else { $handle = fopen($lockFileName, 'w+'); if (flock($handle, LOCK_EX)) { fwrite($handle, '1'); flock($handle, LOCK_UN); fclose($handle); return true; } else { if ($handle) { fclose($handle); } return false; } } } /** * Снимаем блокировку оригинала изображения * @param string $originalAbsPath */ private function unlockOriginal($originalAbsPath) { unlink($this->getLockFileName($originalAbsPath)); } /** * Возвращает имя файла для блокировки оригинала изображения * @param string $originalAbsPath * @return string */ private function getLockFileName($originalAbsPath) { return preg_replace('/\.' . IMG_EXTENSION . '/i', '_lock.' . IMG_EXTENSION, $originalAbsPath); } /** * Возвращает абсолютный путь к оригинальному изображению. * При необходимости генерируется дерево директорий для сохранения оригинальных файлов */ private function getOriginalAbsPath() { $originalAbsPath = IMG_ROOT_PATH . $this->calculateOriginalRelPath(); // Абсолютный путь директории $originalAbsPathDir = implode(DIR_SEP, array_slice(explode(DIR_SEP, $originalAbsPath), 0, -1)); // Если директория отсутствует if (!is_dir($originalAbsPathDir)) { // Создаем дерево директорий mkdir($originalAbsPathDir, 0777, true); } return $originalAbsPath; } /** * Возвращает абсолютный путь к кешированному изображению. * При необходимости генерируется дерево директорий для сохранения кеш-файлов */ private function getCachedAbsPath() { $cachedAbsPath = IMG_ROOT_PATH . $this->calculateCachedRelPath(); // Абсолютный путь директории $cachedAbsPathDir = implode(DIR_SEP, array_slice(explode(DIR_SEP, $cachedAbsPath), 0, -1)); // Если директория отсутствует if (!is_dir($cachedAbsPathDir)) { // Создаем дерево директорий mkdir($cachedAbsPathDir, 0777, true); } return $cachedAbsPath; } } |
#1 | Image\Storage->generateCachedImage() /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Image/Storage.php (162) <?php namespace Image; use Phalcon\Mvc\User\Component; define('IMG_ROOT_REL_PATH', 'files'); define('DIR_SEP', '/'); define('IMG_ROOT_PATH', ROOT . DIR_SEP); define('IMG_STORAGE_SERVER', ''); define('IMG_EXTENSION', 'jpg'); define('NOIMAGE', '/assets/admin/images/noimage.jpg'); define('IMG_DEBUG_MODE', true); class Storage extends Component { private static $STRATEGIES = [ 'w', // Масштабируем по ширине 'wh', // Масштабируем по заданной ширине и высоте. Изображение подганяется в этот прямоугольник 'a', // Центрируем и обрезаем изображение по заданной высоте и ширине таким образом, чтоб оно полностью заполнило пространство ]; private $id = null; private $image_hash = null; private $type = null; private $strategy = 'w'; private $width = 100; private $height = null; private $container = false; private $hash = false; private $attributes = []; private $exists = true; private $widthHeight = true; private $stretch = true; public function __construct(array $params = [], array $attributes = []) { $this->setIdFromParams($params); $this->attributes = $attributes; $this->type = (isset($params['type'])) ? $params['type'] : 'publication'; $this->strategy = (isset($params['strategy'])) ? $params['strategy'] : 'w'; $this->container = (isset($params['container'])) ? $params['container'] : false; $this->image_hash = (isset($params['image_hash'])) ? $params['image_hash'] : null; $this->hash = (isset($params['hash'])) ? $params['hash'] : false; $this->setDimensionsAttributes($params); } private function setDimensionsAttributes(array $params = []) { $this->width = (isset($params['width'])) ? $params['width'] : 100; $this->height = (isset($params['height'])) ? $params['height'] : null; $this->widthHeight = (isset($params['widthHeight'])) ? $params['widthHeight'] : true; $this->widthHeight = (isset($params['widthHeight']) && MOBILE_DEVICE) ? false : true; $this->stretch = (isset($params['stretch'])) ? $params['stretch'] : null; } private function setIdFromParams($params) { if (isset($params['id'])) { if (preg_match('/^\d+$/', $params['id'])) { $this->id = (int) $params['id']; } else { $this->id = $params['id']; } } else { if (IMG_DEBUG_MODE) { throw new \Exception("ID не определен"); } } } /** * HTML-тег изображения, готовый к использованию * <img src="" alt="" /> */ public function imageHtml() { //Из заданных параметров и атрибутов составляем html-тэг $attributes = $this->attributesForImageHtml(); // Получаем относительный адрес файла кешированного изображения $src = $this->cachedRelPath(); if ($this->exists) { if ($this->hash) { $src .= '?' . microtime(); } } else { $src = NOIMAGE; $attributes['width'] = $this->width; $attributes['height'] = $this->height; } $attr_src = 'src="' . $this->config->base_path . $src . '"'; $result = '<img ' . $attr_src . $this->attributesResultForImageHtml($attributes) . '/>'; if ($this->container) { $result = '<div class="img-container" style="width:' . $this->width . 'px; height:' . $this->height . 'px">' . $result . '</div>'; } return $result; } private function attributesForImageHtml() { $attributes = $this->attributes; if ($this->widthHeight) { if ($this->stretch && in_array($this->strategy, ['wh', 'a'])) { $this->stretch = false; } if ($this->stretch) { if ($this->width) { $attributes['width'] = $this->width; } if ($this->height) { $attributes['height'] = $this->height; } } else { $widthHeight = $this->getImageWidthHeight(); if ($widthHeight['width']) { $attributes['width'] = $widthHeight['width']; } if ($widthHeight['height']) { $attributes['height'] = $widthHeight['height']; } } } $attributes['alt'] = (isset($attributes['alt'])) ? htmlspecialchars($attributes['alt'], ENT_QUOTES) : ''; return $attributes; } private function attributesResultForImageHtml($attributes) { $attributesHtmlArray = []; foreach ($attributes as $el => $val) { $attributesHtmlArray[] = $el . '="' . $val . '"'; } $attributesHtml = implode(' ', $attributesHtmlArray); $attributesHtmlResult = ($attributesHtml) ? ' ' . $attributesHtml : ''; return $attributesHtmlResult; } /** * Относительный адрес файла кешированного изображения * /img/preview/405102/405102_1_w_100.jpg */ public function cachedRelPath() { // Рассчитываем по входящим параметрам относительный путь к кешированному файлу $cachedRelPath = $this->calculateCachedRelPath(); // Совмещаем относительный путь с корневым, получаем абсолютный путь $cachedAbsPath = IMG_ROOT_PATH . $cachedRelPath; // Проверяем существование такого файла. если файл не существует: if (!file_exists($cachedAbsPath)) { // Генерируем кеш-файл по заданным параметрам $this->generateCachedImage(); } return IMG_STORAGE_SERVER . $cachedRelPath; } public function cachedAbsPath() { return IMG_ROOT_PATH . $this->cachedRelPath(); } /** * Относительный адрес файла оригинального изображения */ public function originalRelPath() { return IMG_STORAGE_SERVER . $this->calculateOriginalRelPath(); } /** * Абсолютный адрес файла оригинального изображения */ public function originalAbsPath() { return $this->getOriginalAbsPath(); } public function save($file) { if (file_exists($file)) { return copy($file, $this->originalAbsPath()); } } public function originalWidthHeight() { $imageSize = getimagesize($this->originalAbsPath()); if (!empty($imageSize)) { return [ 'width' => $imageSize[0], 'height' => $imageSize[1] ]; } } public function cachedFileSize() { $path = $this->cachedAbsPath(); if (file_exists($path)) { return filesize($path); } } public function isExists() { if (file_exists($this->getOriginalAbsPath())) { return true; } else { return false; } } /** * Рассчитываем по входящим параметрам относительный путь к кешированному файлу * /img/preview/405/405102_1_w_100.jpg */ private function calculateCachedRelPath() { $pathParts = []; $pathParts[] = IMG_ROOT_REL_PATH; $pathParts[] = 'cache'; $pathParts[] = $this->type; if (is_int($this->id)) { $idPart = floor($this->id / 1000); } else { $idPart = $this->id; } //$pathParts[] = $idPart; $fileParts = []; $fileParts[] = $this->id; if ($this->image_hash) { $fileParts[] = $this->image_hash; } if (in_array($this->strategy, self::$STRATEGIES)) { $fileParts[] = $this->strategy; } else { if (IMG_DEBUG_MODE) { throw new \Exception("Параметр 'strategy' указан неверно"); } return; } $fileParts[] = $this->width; if ($this->height) { $fileParts[] = $this->height; } // "img/preview/405" $path = implode(DIR_SEP, $pathParts); // "405102_1_w_100" $file = implode('_', $fileParts); return $path . DIR_SEP . $file . '.jpg'; } /** * Рассчитываем по входящим параметрам относительный путь к оригинальному файлу * /img/original/preview/405/405102_1.jpg */ private function calculateOriginalRelPath() { $pathParts = []; $pathParts[] = IMG_ROOT_REL_PATH; $pathParts[] = 'original'; $pathParts[] = $this->type; if (is_int($this->id)) { $idPart = floor($this->id / 1000); } else { $idPart = $this->id; } //$pathParts[] = $idPart; $fileParts = []; $fileParts[] = $this->id; if ($this->image_hash) { $fileParts[] = $this->image_hash; } // "img/original/preview/405" $path = implode(DIR_SEP, $pathParts); // "405102_1" $file = implode('_', $fileParts); return $path . DIR_SEP . $file . '.jpg'; } /** * генерируем кеш-файл по заданным параметрам */ private function generateCachedImage() { // Абсолютный путь оригинального изображения $originalAbsPath = IMG_ROOT_PATH . $this->calculateOriginalRelPath(); $this->checkOriginalExists($originalAbsPath); require_once __DIR__ . '/PHPThumb/ThumbLib.inc.php'; $image = \PhpThumbFactory::create($originalAbsPath); // Для мобильных устройств отдаем изображение с качеством на уровне 60% if (MOBILE_DEVICE) { $options = ['jpegQuality' => 60]; $image->setOptions($options); } switch ($this->strategy) { case 'w': // Масштабируем по ширине $image->resize($this->width); break; case 'wh': // Масштабируем по заданной ширине и высоте. Изображение подганяется в этот прямоугольник $image->resize($this->width, $this->height); break; case 'a': // Центрируем и обрезаем изображение по заданной высоте и ширине таким образом, чтоб оно полностью заполнило пространство $image->adaptiveResize($this->width, $this->height); break; } $this->saveImage($image, $originalAbsPath); } public function cropOriginal($left, $top, $width, $height) { $originalAbsPath = IMG_ROOT_PATH . $this->calculateOriginalRelPath(); // Абсолютный путь оригинального изображения $this->checkOriginalExists($originalAbsPath); require_once __DIR__ . '/PHPThumb/ThumbLib.inc.php'; $image = \PhpThumbFactory::create($originalAbsPath); $image->crop($left, $top, $width, $height); $this->saveImage($image, $originalAbsPath); } private function checkOriginalExists($originalAbsPath) { if (!file_exists($originalAbsPath)) { if (IMG_DEBUG_MODE) { throw new \Exception("Файл {$originalAbsPath} не существует"); } else { $this->exists = false; } return; } } private function saveImage($image, $originalAbsPath) { // Если оригинал не заблокирован, блокируем. Это необходимо для предотвращения множественной генерации кеш-файла параллельными запросами if ($this->lockOriginal($originalAbsPath)) { // Сохраняем кешированное изображение $image->save($this->getCachedAbsPath()); // Снимаем блокировку $this->unlockOriginal($originalAbsPath); } else { if (IMG_DEBUG_MODE) { throw new \Exception("Файл {$originalAbsPath} заблокирован механизмом проверки _LOCK или не существует"); } else { $this->exists = false; } return; } } /** * Удаляет оригинальные и кешированные изображения */ public function remove($removeAll = true) { $this->removeCached(); $this->removeOriginal($removeAll); } /** * Удаляет оригинальные изображения */ public function removeOriginal($removeAll = true) { if (!$removeAll) { if (file_exists($this->originalAbsPath())) { unlink($this->originalAbsPath()); } return; } $originalAbsPath = IMG_ROOT_PATH . $this->calculateOriginalRelPath(); $originalAbsPathDir = implode(DIR_SEP, array_slice(explode(DIR_SEP, $originalAbsPath), 0, -1)); // Абсолютный путь директории if ($this->image_hash) { $search = $originalAbsPathDir . "/" . $this->id . "_*.jpg"; } else { $search = $originalAbsPathDir . "/" . $this->id . ".jpg"; } $files = glob($search); if (!empty($files)) { foreach ($files as $file) { if (is_file($file)) { unlink($file); } } } } /** * Удаляет кешированные изображения */ public function removeCached() { $cachedAbsPath = IMG_ROOT_PATH . $this->calculateCachedRelPath(); $cachedAbsPathDir = implode(DIR_SEP, array_slice(explode(DIR_SEP, $cachedAbsPath), 0, -1)); // Абсолютный путь директории $search = $cachedAbsPathDir . "/" . $this->id . "_*.jpg"; $files = glob($search); if (!empty($files)) { foreach ($files as $file) { if (is_file($file)) { unlink($file); } } } } /** * Размеры кешированного изображения */ public function getImageWidthHeight() { $cachedAbsPath = IMG_ROOT_PATH . $this->calculateCachedRelPath(); if (file_exists($cachedAbsPath)) { $imageSize = getimagesize($cachedAbsPath); if (!empty($imageSize)) { return [ 'width' => $imageSize[0], 'height' => $imageSize[1] ]; } } else { return [ 'width' => null, 'height' => null ]; } } /** * Проверяем блокировку оригинала изображения. Если нет, то блокируем * @param string $originalAbsPath * @return boolean true|false */ private function lockOriginal($originalAbsPath) { $lockFileName = $this->getLockFileName($originalAbsPath); if (file_exists($lockFileName)) { return false; } else { $handle = fopen($lockFileName, 'w+'); if (flock($handle, LOCK_EX)) { fwrite($handle, '1'); flock($handle, LOCK_UN); fclose($handle); return true; } else { if ($handle) { fclose($handle); } return false; } } } /** * Снимаем блокировку оригинала изображения * @param string $originalAbsPath */ private function unlockOriginal($originalAbsPath) { unlink($this->getLockFileName($originalAbsPath)); } /** * Возвращает имя файла для блокировки оригинала изображения * @param string $originalAbsPath * @return string */ private function getLockFileName($originalAbsPath) { return preg_replace('/\.' . IMG_EXTENSION . '/i', '_lock.' . IMG_EXTENSION, $originalAbsPath); } /** * Возвращает абсолютный путь к оригинальному изображению. * При необходимости генерируется дерево директорий для сохранения оригинальных файлов */ private function getOriginalAbsPath() { $originalAbsPath = IMG_ROOT_PATH . $this->calculateOriginalRelPath(); // Абсолютный путь директории $originalAbsPathDir = implode(DIR_SEP, array_slice(explode(DIR_SEP, $originalAbsPath), 0, -1)); // Если директория отсутствует if (!is_dir($originalAbsPathDir)) { // Создаем дерево директорий mkdir($originalAbsPathDir, 0777, true); } return $originalAbsPath; } /** * Возвращает абсолютный путь к кешированному изображению. * При необходимости генерируется дерево директорий для сохранения кеш-файлов */ private function getCachedAbsPath() { $cachedAbsPath = IMG_ROOT_PATH . $this->calculateCachedRelPath(); // Абсолютный путь директории $cachedAbsPathDir = implode(DIR_SEP, array_slice(explode(DIR_SEP, $cachedAbsPath), 0, -1)); // Если директория отсутствует if (!is_dir($cachedAbsPathDir)) { // Создаем дерево директорий mkdir($cachedAbsPathDir, 0777, true); } return $cachedAbsPath; } } |
#2 | Image\Storage->cachedRelPath() /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Image/Storage.php (87) <?php namespace Image; use Phalcon\Mvc\User\Component; define('IMG_ROOT_REL_PATH', 'files'); define('DIR_SEP', '/'); define('IMG_ROOT_PATH', ROOT . DIR_SEP); define('IMG_STORAGE_SERVER', ''); define('IMG_EXTENSION', 'jpg'); define('NOIMAGE', '/assets/admin/images/noimage.jpg'); define('IMG_DEBUG_MODE', true); class Storage extends Component { private static $STRATEGIES = [ 'w', // Масштабируем по ширине 'wh', // Масштабируем по заданной ширине и высоте. Изображение подганяется в этот прямоугольник 'a', // Центрируем и обрезаем изображение по заданной высоте и ширине таким образом, чтоб оно полностью заполнило пространство ]; private $id = null; private $image_hash = null; private $type = null; private $strategy = 'w'; private $width = 100; private $height = null; private $container = false; private $hash = false; private $attributes = []; private $exists = true; private $widthHeight = true; private $stretch = true; public function __construct(array $params = [], array $attributes = []) { $this->setIdFromParams($params); $this->attributes = $attributes; $this->type = (isset($params['type'])) ? $params['type'] : 'publication'; $this->strategy = (isset($params['strategy'])) ? $params['strategy'] : 'w'; $this->container = (isset($params['container'])) ? $params['container'] : false; $this->image_hash = (isset($params['image_hash'])) ? $params['image_hash'] : null; $this->hash = (isset($params['hash'])) ? $params['hash'] : false; $this->setDimensionsAttributes($params); } private function setDimensionsAttributes(array $params = []) { $this->width = (isset($params['width'])) ? $params['width'] : 100; $this->height = (isset($params['height'])) ? $params['height'] : null; $this->widthHeight = (isset($params['widthHeight'])) ? $params['widthHeight'] : true; $this->widthHeight = (isset($params['widthHeight']) && MOBILE_DEVICE) ? false : true; $this->stretch = (isset($params['stretch'])) ? $params['stretch'] : null; } private function setIdFromParams($params) { if (isset($params['id'])) { if (preg_match('/^\d+$/', $params['id'])) { $this->id = (int) $params['id']; } else { $this->id = $params['id']; } } else { if (IMG_DEBUG_MODE) { throw new \Exception("ID не определен"); } } } /** * HTML-тег изображения, готовый к использованию * <img src="" alt="" /> */ public function imageHtml() { //Из заданных параметров и атрибутов составляем html-тэг $attributes = $this->attributesForImageHtml(); // Получаем относительный адрес файла кешированного изображения $src = $this->cachedRelPath(); if ($this->exists) { if ($this->hash) { $src .= '?' . microtime(); } } else { $src = NOIMAGE; $attributes['width'] = $this->width; $attributes['height'] = $this->height; } $attr_src = 'src="' . $this->config->base_path . $src . '"'; $result = '<img ' . $attr_src . $this->attributesResultForImageHtml($attributes) . '/>'; if ($this->container) { $result = '<div class="img-container" style="width:' . $this->width . 'px; height:' . $this->height . 'px">' . $result . '</div>'; } return $result; } private function attributesForImageHtml() { $attributes = $this->attributes; if ($this->widthHeight) { if ($this->stretch && in_array($this->strategy, ['wh', 'a'])) { $this->stretch = false; } if ($this->stretch) { if ($this->width) { $attributes['width'] = $this->width; } if ($this->height) { $attributes['height'] = $this->height; } } else { $widthHeight = $this->getImageWidthHeight(); if ($widthHeight['width']) { $attributes['width'] = $widthHeight['width']; } if ($widthHeight['height']) { $attributes['height'] = $widthHeight['height']; } } } $attributes['alt'] = (isset($attributes['alt'])) ? htmlspecialchars($attributes['alt'], ENT_QUOTES) : ''; return $attributes; } private function attributesResultForImageHtml($attributes) { $attributesHtmlArray = []; foreach ($attributes as $el => $val) { $attributesHtmlArray[] = $el . '="' . $val . '"'; } $attributesHtml = implode(' ', $attributesHtmlArray); $attributesHtmlResult = ($attributesHtml) ? ' ' . $attributesHtml : ''; return $attributesHtmlResult; } /** * Относительный адрес файла кешированного изображения * /img/preview/405102/405102_1_w_100.jpg */ public function cachedRelPath() { // Рассчитываем по входящим параметрам относительный путь к кешированному файлу $cachedRelPath = $this->calculateCachedRelPath(); // Совмещаем относительный путь с корневым, получаем абсолютный путь $cachedAbsPath = IMG_ROOT_PATH . $cachedRelPath; // Проверяем существование такого файла. если файл не существует: if (!file_exists($cachedAbsPath)) { // Генерируем кеш-файл по заданным параметрам $this->generateCachedImage(); } return IMG_STORAGE_SERVER . $cachedRelPath; } public function cachedAbsPath() { return IMG_ROOT_PATH . $this->cachedRelPath(); } /** * Относительный адрес файла оригинального изображения */ public function originalRelPath() { return IMG_STORAGE_SERVER . $this->calculateOriginalRelPath(); } /** * Абсолютный адрес файла оригинального изображения */ public function originalAbsPath() { return $this->getOriginalAbsPath(); } public function save($file) { if (file_exists($file)) { return copy($file, $this->originalAbsPath()); } } public function originalWidthHeight() { $imageSize = getimagesize($this->originalAbsPath()); if (!empty($imageSize)) { return [ 'width' => $imageSize[0], 'height' => $imageSize[1] ]; } } public function cachedFileSize() { $path = $this->cachedAbsPath(); if (file_exists($path)) { return filesize($path); } } public function isExists() { if (file_exists($this->getOriginalAbsPath())) { return true; } else { return false; } } /** * Рассчитываем по входящим параметрам относительный путь к кешированному файлу * /img/preview/405/405102_1_w_100.jpg */ private function calculateCachedRelPath() { $pathParts = []; $pathParts[] = IMG_ROOT_REL_PATH; $pathParts[] = 'cache'; $pathParts[] = $this->type; if (is_int($this->id)) { $idPart = floor($this->id / 1000); } else { $idPart = $this->id; } //$pathParts[] = $idPart; $fileParts = []; $fileParts[] = $this->id; if ($this->image_hash) { $fileParts[] = $this->image_hash; } if (in_array($this->strategy, self::$STRATEGIES)) { $fileParts[] = $this->strategy; } else { if (IMG_DEBUG_MODE) { throw new \Exception("Параметр 'strategy' указан неверно"); } return; } $fileParts[] = $this->width; if ($this->height) { $fileParts[] = $this->height; } // "img/preview/405" $path = implode(DIR_SEP, $pathParts); // "405102_1_w_100" $file = implode('_', $fileParts); return $path . DIR_SEP . $file . '.jpg'; } /** * Рассчитываем по входящим параметрам относительный путь к оригинальному файлу * /img/original/preview/405/405102_1.jpg */ private function calculateOriginalRelPath() { $pathParts = []; $pathParts[] = IMG_ROOT_REL_PATH; $pathParts[] = 'original'; $pathParts[] = $this->type; if (is_int($this->id)) { $idPart = floor($this->id / 1000); } else { $idPart = $this->id; } //$pathParts[] = $idPart; $fileParts = []; $fileParts[] = $this->id; if ($this->image_hash) { $fileParts[] = $this->image_hash; } // "img/original/preview/405" $path = implode(DIR_SEP, $pathParts); // "405102_1" $file = implode('_', $fileParts); return $path . DIR_SEP . $file . '.jpg'; } /** * генерируем кеш-файл по заданным параметрам */ private function generateCachedImage() { // Абсолютный путь оригинального изображения $originalAbsPath = IMG_ROOT_PATH . $this->calculateOriginalRelPath(); $this->checkOriginalExists($originalAbsPath); require_once __DIR__ . '/PHPThumb/ThumbLib.inc.php'; $image = \PhpThumbFactory::create($originalAbsPath); // Для мобильных устройств отдаем изображение с качеством на уровне 60% if (MOBILE_DEVICE) { $options = ['jpegQuality' => 60]; $image->setOptions($options); } switch ($this->strategy) { case 'w': // Масштабируем по ширине $image->resize($this->width); break; case 'wh': // Масштабируем по заданной ширине и высоте. Изображение подганяется в этот прямоугольник $image->resize($this->width, $this->height); break; case 'a': // Центрируем и обрезаем изображение по заданной высоте и ширине таким образом, чтоб оно полностью заполнило пространство $image->adaptiveResize($this->width, $this->height); break; } $this->saveImage($image, $originalAbsPath); } public function cropOriginal($left, $top, $width, $height) { $originalAbsPath = IMG_ROOT_PATH . $this->calculateOriginalRelPath(); // Абсолютный путь оригинального изображения $this->checkOriginalExists($originalAbsPath); require_once __DIR__ . '/PHPThumb/ThumbLib.inc.php'; $image = \PhpThumbFactory::create($originalAbsPath); $image->crop($left, $top, $width, $height); $this->saveImage($image, $originalAbsPath); } private function checkOriginalExists($originalAbsPath) { if (!file_exists($originalAbsPath)) { if (IMG_DEBUG_MODE) { throw new \Exception("Файл {$originalAbsPath} не существует"); } else { $this->exists = false; } return; } } private function saveImage($image, $originalAbsPath) { // Если оригинал не заблокирован, блокируем. Это необходимо для предотвращения множественной генерации кеш-файла параллельными запросами if ($this->lockOriginal($originalAbsPath)) { // Сохраняем кешированное изображение $image->save($this->getCachedAbsPath()); // Снимаем блокировку $this->unlockOriginal($originalAbsPath); } else { if (IMG_DEBUG_MODE) { throw new \Exception("Файл {$originalAbsPath} заблокирован механизмом проверки _LOCK или не существует"); } else { $this->exists = false; } return; } } /** * Удаляет оригинальные и кешированные изображения */ public function remove($removeAll = true) { $this->removeCached(); $this->removeOriginal($removeAll); } /** * Удаляет оригинальные изображения */ public function removeOriginal($removeAll = true) { if (!$removeAll) { if (file_exists($this->originalAbsPath())) { unlink($this->originalAbsPath()); } return; } $originalAbsPath = IMG_ROOT_PATH . $this->calculateOriginalRelPath(); $originalAbsPathDir = implode(DIR_SEP, array_slice(explode(DIR_SEP, $originalAbsPath), 0, -1)); // Абсолютный путь директории if ($this->image_hash) { $search = $originalAbsPathDir . "/" . $this->id . "_*.jpg"; } else { $search = $originalAbsPathDir . "/" . $this->id . ".jpg"; } $files = glob($search); if (!empty($files)) { foreach ($files as $file) { if (is_file($file)) { unlink($file); } } } } /** * Удаляет кешированные изображения */ public function removeCached() { $cachedAbsPath = IMG_ROOT_PATH . $this->calculateCachedRelPath(); $cachedAbsPathDir = implode(DIR_SEP, array_slice(explode(DIR_SEP, $cachedAbsPath), 0, -1)); // Абсолютный путь директории $search = $cachedAbsPathDir . "/" . $this->id . "_*.jpg"; $files = glob($search); if (!empty($files)) { foreach ($files as $file) { if (is_file($file)) { unlink($file); } } } } /** * Размеры кешированного изображения */ public function getImageWidthHeight() { $cachedAbsPath = IMG_ROOT_PATH . $this->calculateCachedRelPath(); if (file_exists($cachedAbsPath)) { $imageSize = getimagesize($cachedAbsPath); if (!empty($imageSize)) { return [ 'width' => $imageSize[0], 'height' => $imageSize[1] ]; } } else { return [ 'width' => null, 'height' => null ]; } } /** * Проверяем блокировку оригинала изображения. Если нет, то блокируем * @param string $originalAbsPath * @return boolean true|false */ private function lockOriginal($originalAbsPath) { $lockFileName = $this->getLockFileName($originalAbsPath); if (file_exists($lockFileName)) { return false; } else { $handle = fopen($lockFileName, 'w+'); if (flock($handle, LOCK_EX)) { fwrite($handle, '1'); flock($handle, LOCK_UN); fclose($handle); return true; } else { if ($handle) { fclose($handle); } return false; } } } /** * Снимаем блокировку оригинала изображения * @param string $originalAbsPath */ private function unlockOriginal($originalAbsPath) { unlink($this->getLockFileName($originalAbsPath)); } /** * Возвращает имя файла для блокировки оригинала изображения * @param string $originalAbsPath * @return string */ private function getLockFileName($originalAbsPath) { return preg_replace('/\.' . IMG_EXTENSION . '/i', '_lock.' . IMG_EXTENSION, $originalAbsPath); } /** * Возвращает абсолютный путь к оригинальному изображению. * При необходимости генерируется дерево директорий для сохранения оригинальных файлов */ private function getOriginalAbsPath() { $originalAbsPath = IMG_ROOT_PATH . $this->calculateOriginalRelPath(); // Абсолютный путь директории $originalAbsPathDir = implode(DIR_SEP, array_slice(explode(DIR_SEP, $originalAbsPath), 0, -1)); // Если директория отсутствует if (!is_dir($originalAbsPathDir)) { // Создаем дерево директорий mkdir($originalAbsPathDir, 0777, true); } return $originalAbsPath; } /** * Возвращает абсолютный путь к кешированному изображению. * При необходимости генерируется дерево директорий для сохранения кеш-файлов */ private function getCachedAbsPath() { $cachedAbsPath = IMG_ROOT_PATH . $this->calculateCachedRelPath(); // Абсолютный путь директории $cachedAbsPathDir = implode(DIR_SEP, array_slice(explode(DIR_SEP, $cachedAbsPath), 0, -1)); // Если директория отсутствует if (!is_dir($cachedAbsPathDir)) { // Создаем дерево директорий mkdir($cachedAbsPathDir, 0777, true); } return $cachedAbsPath; } } |
#3 | Image\Storage->imageHtml() /var/www/vhosts/uzbekinvest.uz/httpdocs/data/cache/volt/%%var%%www%%vhosts%%uzbekinvest.uz%%httpdocs%%app%%modules%%publication%%views%%index%%publication.volt.php (25) <header> <?= $this->partial('main/menu') ?> </header> <section class="breadcrub-wrapper"> <div class="container"> <?= $this->helper->widget('Breadcrumbs')->breadcrumbs('publications', 'type') ?> </div> </section> <section class="tenders"> <div class="container"> <div class="row"> <div class="col-md-12 tender-posts"> <header class="ov-h mb-1"> <h1 class="content-title article-title pull-left"><?= $publicationResult->title ?></h1> <a href="#" class="printDemo text-uppercase print-btn pull-right"> <span class="glyphicon glyphicon-print"></span> <?= $this->helper->translate('print version') ?> </a> </header> <div class="content"> <?php if ($publicationResult->p->preview_inner) { ?> <?php $image = $this->helper->image(['id' => $publicationResult->p->getId(), 'type' => 'publication', 'width' => 800, 'strategy' => 'w']); ?> <div class="image news-image inner"> <?= $image->imageHTML() ?> </div> <?php } ?> <div class="text"> <?php if ($publicationResult->p->getTypeDisplayDate()) { ?> <div class="date"> <span><?= $publicationResult->p->getDate('d.m.Y') ?></span> </div> <?php } ?> <div class="full-text"><?= $publicationResult->text ?></div> </div> </div> </div> </div> </div> </section> |
#4 | Phalcon\Mvc\View\Engine\Volt->render(/var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Publication/views/index/publication.volt, Array([publicationResult] => Object(Phalcon\Mvc\Model\Row), [lang] => ru, [type] => tender, [slug] => vnimaniu-organizacij-i-predpriatij), true) |
#5 | Phalcon\Mvc\View->_engineRender(Array([.volt] => Object(Application\Mvc\View\Engine\Volt), [.phtml] => Object(Phalcon\Mvc\View\Engine\Php)), index/publication, true, true, null) |
#6 | Phalcon\Mvc\View->render(index, publication, Array([lang] => ru, [type] => tender, [slug] => vnimaniu-organizacij-i-predpriatij)) /var/www/vhosts/uzbekinvest.uz/httpdocs/app/Bootstrap.php (333) <?php namespace Eskiz; use Application\Cache\Manager as CacheManager; /** * Bootstrap */ class Bootstrap { public function run() { $di = new \Phalcon\DI\FactoryDefault(); // Config require_once APPLICATION_PATH . '/modules/Cms/Config.php'; $config = \Cms\Config::get(); $di->set('config', $config); // Registry $registry = new \Phalcon\Registry(); $di->set('registry', $registry); // Loader $loader = new \Phalcon\Loader(); $loader->registerNamespaces($config->loader->namespaces->toArray()); $loader->registerDirs([APPLICATION_PATH . "/plugins/"]); $loader->register(); require_once APPLICATION_PATH . '/../vendor/autoload.php'; // Database $db = new \Phalcon\Db\Adapter\Pdo\Mysql([ "host" => $config->database->host, "username" => $config->database->username, "password" => $config->database->password, "dbname" => $config->database->dbname, "charset" => $config->database->charset, ]); $di->set('db', $db); // View $this->initView($di); // URL $url = new \Phalcon\Mvc\Url(); $url->setBasePath($config->base_path); $url->setBaseUri($config->base_path); $di->set('url', $url); // Cache $this->initCache($di); // CMS $cmsModel = new \Cms\Model\Configuration(); $registry->cms = $cmsModel->getConfig(); // Отправляем в Registry // Application $application = new \Phalcon\Mvc\Application(); $application->registerModules($config->modules->toArray()); // Events Manager, Dispatcher $this->initEventManager($di); // Session $session = new \Phalcon\Session\Adapter\Files(); $session->start(); $di->set('session', $session); $acl = new \Application\Acl\DefaultAcl(); $di->set('acl', $acl); // JS Assets $this->initAssetsManager($di); // Flash helper $flash = new \Phalcon\Flash\Session([ 'error' => 'ui red inverted segment', 'success' => 'ui green inverted segment', 'notice' => 'ui blue inverted segment', 'warning' => 'ui orange inverted segment', ]); $di->set('flash', $flash); $di->set('helper', new \Application\Mvc\Helper()); // Routing $this->initRouting($application, $di); $application->setDI($di); // Main dispatching process $this->dispatch($di); } private function initRouting($application, $di) { $router = new \Application\Mvc\Router\DefaultRouter(); $router->setDi($di); foreach ($application->getModules() as $module) { $routesClassName = str_replace('Module', 'Routes', $module['className']); if (class_exists($routesClassName)) { $routesClass = new $routesClassName(); $router = $routesClass->init($router); } $initClassName = str_replace('Module', 'Init', $module['className']); if (class_exists($initClassName)) { new $initClassName(); } } $di->set('router', $router); } private function initAssetsManager($di) { $config = $di->get('config'); $assetsManager = new \Application\Assets\Manager(); $js_collection = $assetsManager->collection('js') ->setLocal(true) ->addFilter(new \Phalcon\Assets\Filters\Jsmin()) ->setTargetPath(ROOT . '/assets/admin/js/js.js') ->setTargetUri('assets/admin/js/js.js') ->join(true); if ($config->assets->js) { foreach ($config->assets->js as $js) { $js_collection->addJs(ROOT . '/' . $js); } } // Admin JS Assets $assetsManager->collection('modules-admin-js') ->setLocal(true) ->addFilter(new \Phalcon\Assets\Filters\Jsmin()) ->setTargetPath(ROOT . '/assets/admin/js/modules-admin.js') ->setTargetUri('assets/admin/js/modules-admin.js') ->join(true); // Admin LESS Assets $assetsManager->collection('modules-admin-less') ->setLocal(true) ->addFilter(new \Application\Assets\Filter\Less()) ->setTargetPath(ROOT . '/assets/admin/js/modules-admin.less') ->setTargetUri('assets/admin/js/modules-admin.less') ->join(true) ->addCss(APPLICATION_PATH . '/modules/Admin/assets/admin.less'); $di->set('assets', $assetsManager); } private function initEventManager($di) { $eventsManager = new \Phalcon\Events\Manager(); $dispatcher = new \Phalcon\Mvc\Dispatcher(); $eventsManager->attach("dispatch:beforeDispatchLoop", function ($event, $dispatcher) use ($di) { new \Eskiz\Plugin\CheckPoint($di->get('request')); new \Eskiz\Plugin\Localization($dispatcher); new \Eskiz\Plugin\AdminLocalization($di->get('config')); new \Eskiz\Plugin\Acl($di->get('acl'), $dispatcher, $di->get('view')); new \Eskiz\Plugin\MobileDetect($di->get('session'), $di->get('view'), $di->get('request')); }); $eventsManager->attach("dispatch:afterDispatchLoop", function ($event, $dispatcher) use ($di) { new \Eskiz\Plugin\Title($di); }); // Profiler $registry = $di->get('registry'); if ($registry->cms['PROFILER']) { $profiler = new \Phalcon\Db\Profiler(); $di->set('profiler', $profiler); $eventsManager->attach('db', function ($event, $db) use ($profiler) { if ($event->getType() == 'beforeQuery') { $profiler->startProfile($db->getSQLStatement()); } if ($event->getType() == 'afterQuery') { $profiler->stopProfile(); } }); } $db = $di->get('db'); $db->setEventsManager($eventsManager); $dispatcher->setEventsManager($eventsManager); $di->set('dispatcher', $dispatcher); } private function initView($di) { $view = new \Phalcon\Mvc\View(); define('MAIN_VIEW_PATH', '../../../views/'); $view->setMainView(MAIN_VIEW_PATH . 'main'); $view->setLayoutsDir(MAIN_VIEW_PATH . '/layouts/'); $view->setLayout('main'); $view->setPartialsDir(MAIN_VIEW_PATH . '/partials/'); // Volt $volt = new \Application\Mvc\View\Engine\Volt($view, $di); $volt->setOptions(['compiledPath' => APPLICATION_PATH . '/../data/cache/volt/']); $volt->initCompiler(); $phtml = new \Phalcon\Mvc\View\Engine\Php($view, $di); $viewEngines = [ ".volt" => $volt, ".phtml" => $phtml, ]; $view->registerEngines($viewEngines); $ajax = $di->get('request')->getQuery('_ajax'); if ($ajax) { $view->setRenderLevel(\Phalcon\Mvc\View::LEVEL_LAYOUT); } $di->set('view', $view); return $view; } private function initCache($di) { $config = $di->get('config'); $cacheFrontend = new \Phalcon\Cache\Frontend\Data([ "lifetime" => 60, "prefix" => HOST_HASH, ]); $cache = null; switch ($config->cache) { case 'file': $cache = new \Phalcon\Cache\Backend\File($cacheFrontend, [ "cacheDir" => APPLICATION_PATH . "/../data/cache/backend/" ]); break; case 'memcache': $cache = new \Phalcon\Cache\Backend\Memcache( $cacheFrontend, [ "host" => $config->memcache->host, "port" => $config->memcache->port, ]); break; case 'memcached': $cache = new \Phalcon\Cache\Backend\Libmemcached( $cacheFrontend, [ "host" => $config->memcached->host, "port" => $config->memcached->port, ]); break; } $di->set('cache', $cache, true); $di->set('modelsCache', $cache, true); \Application\Widget\Proxy::$cache = $cache; // Modules Widget System $modelsMetadata = new \Phalcon\Mvc\Model\Metadata\Memory(); $di->set('modelsMetadata', $modelsMetadata); $di->set('cacheManager', new CacheManager()); } private function dispatch($di) { $router = $di['router']; $router->removeExtraSlashes(true); $router->handle(); $view = $di['view']; $dispatcher = $di['dispatcher']; $response = $di['response']; $dispatcher->setModuleName($router->getModuleName()); $dispatcher->setControllerName($router->getControllerName()); $dispatcher->setActionName($router->getActionName()); $dispatcher->setParams($router->getParams()); $moduleName = \Application\Utils\ModuleName::camelize($router->getModuleName()); $params = $router->getParams(); if($params){ if(isset($params['slug'])){ $params = $params['slug']; $lang = \Cms\Model\Language::findFirst("iso='{$params}'"); if($lang){ $dispatcher->setParams(array('lang'=>$lang->getIso(),'slug'=>'index')); $moduleName = \Application\Utils\ModuleName::camelize('index'); } } } $ModuleClassName = $moduleName . '\Module'; if (class_exists($ModuleClassName)) { $module = new $ModuleClassName; $module->registerAutoloaders(); $module->registerServices($di); } $view->start(); $registry = $di['registry']; if ($registry->cms['DEBUG_MODE']) { $debug = new \Phalcon\Debug(); $debug->listen(); $dispatcher->dispatch(); } else { try { $dispatcher->dispatch(); } catch (\Phalcon\Exception $e) { // Errors catching $view->setViewsDir(__DIR__ . '/modules/Index/views/'); $view->setPartialsDir(''); $view->e = $e; if ($e instanceof \Phalcon\Mvc\Dispatcher\Exception) { $response->setStatusCode(404, 'Not Found'); $view->partial('error/error404'); } else { $response->setStatusCode(503, 'Service Unavailable'); $view->partial('error/error503'); } $response->sendHeaders(); echo $response->getContent(); return; } } $view->render( $dispatcher->getControllerName(), $dispatcher->getActionName(), $dispatcher->getParams() ); $view->finish(); $response = $di['response']; // AJAX $request = $di['request']; $_ajax = $request->getQuery('_ajax'); if ($_ajax) { $contents = $view->getContent(); $return = new \stdClass(); $return->html = $contents; $return->title = $di->get('helper')->title()->get(); $return->success = true; if ($view->bodyClass) { $return->bodyClass = $view->bodyClass; } $headers = $response->getHeaders()->toArray(); if (isset($headers[404]) || isset($headers[503])) { $return->success = false; } $response->setContentType('application/json', 'UTF-8'); $response->setContent(json_encode($return)); } else { $response->setContent($view->getContent()); } $response->sendHeaders(); echo $response->getContent(); } } |
#7 | Eskiz\Bootstrap->dispatch(Object(Phalcon\Di\FactoryDefault)) /var/www/vhosts/uzbekinvest.uz/httpdocs/app/Bootstrap.php (94) <?php namespace Eskiz; use Application\Cache\Manager as CacheManager; /** * Bootstrap */ class Bootstrap { public function run() { $di = new \Phalcon\DI\FactoryDefault(); // Config require_once APPLICATION_PATH . '/modules/Cms/Config.php'; $config = \Cms\Config::get(); $di->set('config', $config); // Registry $registry = new \Phalcon\Registry(); $di->set('registry', $registry); // Loader $loader = new \Phalcon\Loader(); $loader->registerNamespaces($config->loader->namespaces->toArray()); $loader->registerDirs([APPLICATION_PATH . "/plugins/"]); $loader->register(); require_once APPLICATION_PATH . '/../vendor/autoload.php'; // Database $db = new \Phalcon\Db\Adapter\Pdo\Mysql([ "host" => $config->database->host, "username" => $config->database->username, "password" => $config->database->password, "dbname" => $config->database->dbname, "charset" => $config->database->charset, ]); $di->set('db', $db); // View $this->initView($di); // URL $url = new \Phalcon\Mvc\Url(); $url->setBasePath($config->base_path); $url->setBaseUri($config->base_path); $di->set('url', $url); // Cache $this->initCache($di); // CMS $cmsModel = new \Cms\Model\Configuration(); $registry->cms = $cmsModel->getConfig(); // Отправляем в Registry // Application $application = new \Phalcon\Mvc\Application(); $application->registerModules($config->modules->toArray()); // Events Manager, Dispatcher $this->initEventManager($di); // Session $session = new \Phalcon\Session\Adapter\Files(); $session->start(); $di->set('session', $session); $acl = new \Application\Acl\DefaultAcl(); $di->set('acl', $acl); // JS Assets $this->initAssetsManager($di); // Flash helper $flash = new \Phalcon\Flash\Session([ 'error' => 'ui red inverted segment', 'success' => 'ui green inverted segment', 'notice' => 'ui blue inverted segment', 'warning' => 'ui orange inverted segment', ]); $di->set('flash', $flash); $di->set('helper', new \Application\Mvc\Helper()); // Routing $this->initRouting($application, $di); $application->setDI($di); // Main dispatching process $this->dispatch($di); } private function initRouting($application, $di) { $router = new \Application\Mvc\Router\DefaultRouter(); $router->setDi($di); foreach ($application->getModules() as $module) { $routesClassName = str_replace('Module', 'Routes', $module['className']); if (class_exists($routesClassName)) { $routesClass = new $routesClassName(); $router = $routesClass->init($router); } $initClassName = str_replace('Module', 'Init', $module['className']); if (class_exists($initClassName)) { new $initClassName(); } } $di->set('router', $router); } private function initAssetsManager($di) { $config = $di->get('config'); $assetsManager = new \Application\Assets\Manager(); $js_collection = $assetsManager->collection('js') ->setLocal(true) ->addFilter(new \Phalcon\Assets\Filters\Jsmin()) ->setTargetPath(ROOT . '/assets/admin/js/js.js') ->setTargetUri('assets/admin/js/js.js') ->join(true); if ($config->assets->js) { foreach ($config->assets->js as $js) { $js_collection->addJs(ROOT . '/' . $js); } } // Admin JS Assets $assetsManager->collection('modules-admin-js') ->setLocal(true) ->addFilter(new \Phalcon\Assets\Filters\Jsmin()) ->setTargetPath(ROOT . '/assets/admin/js/modules-admin.js') ->setTargetUri('assets/admin/js/modules-admin.js') ->join(true); // Admin LESS Assets $assetsManager->collection('modules-admin-less') ->setLocal(true) ->addFilter(new \Application\Assets\Filter\Less()) ->setTargetPath(ROOT . '/assets/admin/js/modules-admin.less') ->setTargetUri('assets/admin/js/modules-admin.less') ->join(true) ->addCss(APPLICATION_PATH . '/modules/Admin/assets/admin.less'); $di->set('assets', $assetsManager); } private function initEventManager($di) { $eventsManager = new \Phalcon\Events\Manager(); $dispatcher = new \Phalcon\Mvc\Dispatcher(); $eventsManager->attach("dispatch:beforeDispatchLoop", function ($event, $dispatcher) use ($di) { new \Eskiz\Plugin\CheckPoint($di->get('request')); new \Eskiz\Plugin\Localization($dispatcher); new \Eskiz\Plugin\AdminLocalization($di->get('config')); new \Eskiz\Plugin\Acl($di->get('acl'), $dispatcher, $di->get('view')); new \Eskiz\Plugin\MobileDetect($di->get('session'), $di->get('view'), $di->get('request')); }); $eventsManager->attach("dispatch:afterDispatchLoop", function ($event, $dispatcher) use ($di) { new \Eskiz\Plugin\Title($di); }); // Profiler $registry = $di->get('registry'); if ($registry->cms['PROFILER']) { $profiler = new \Phalcon\Db\Profiler(); $di->set('profiler', $profiler); $eventsManager->attach('db', function ($event, $db) use ($profiler) { if ($event->getType() == 'beforeQuery') { $profiler->startProfile($db->getSQLStatement()); } if ($event->getType() == 'afterQuery') { $profiler->stopProfile(); } }); } $db = $di->get('db'); $db->setEventsManager($eventsManager); $dispatcher->setEventsManager($eventsManager); $di->set('dispatcher', $dispatcher); } private function initView($di) { $view = new \Phalcon\Mvc\View(); define('MAIN_VIEW_PATH', '../../../views/'); $view->setMainView(MAIN_VIEW_PATH . 'main'); $view->setLayoutsDir(MAIN_VIEW_PATH . '/layouts/'); $view->setLayout('main'); $view->setPartialsDir(MAIN_VIEW_PATH . '/partials/'); // Volt $volt = new \Application\Mvc\View\Engine\Volt($view, $di); $volt->setOptions(['compiledPath' => APPLICATION_PATH . '/../data/cache/volt/']); $volt->initCompiler(); $phtml = new \Phalcon\Mvc\View\Engine\Php($view, $di); $viewEngines = [ ".volt" => $volt, ".phtml" => $phtml, ]; $view->registerEngines($viewEngines); $ajax = $di->get('request')->getQuery('_ajax'); if ($ajax) { $view->setRenderLevel(\Phalcon\Mvc\View::LEVEL_LAYOUT); } $di->set('view', $view); return $view; } private function initCache($di) { $config = $di->get('config'); $cacheFrontend = new \Phalcon\Cache\Frontend\Data([ "lifetime" => 60, "prefix" => HOST_HASH, ]); $cache = null; switch ($config->cache) { case 'file': $cache = new \Phalcon\Cache\Backend\File($cacheFrontend, [ "cacheDir" => APPLICATION_PATH . "/../data/cache/backend/" ]); break; case 'memcache': $cache = new \Phalcon\Cache\Backend\Memcache( $cacheFrontend, [ "host" => $config->memcache->host, "port" => $config->memcache->port, ]); break; case 'memcached': $cache = new \Phalcon\Cache\Backend\Libmemcached( $cacheFrontend, [ "host" => $config->memcached->host, "port" => $config->memcached->port, ]); break; } $di->set('cache', $cache, true); $di->set('modelsCache', $cache, true); \Application\Widget\Proxy::$cache = $cache; // Modules Widget System $modelsMetadata = new \Phalcon\Mvc\Model\Metadata\Memory(); $di->set('modelsMetadata', $modelsMetadata); $di->set('cacheManager', new CacheManager()); } private function dispatch($di) { $router = $di['router']; $router->removeExtraSlashes(true); $router->handle(); $view = $di['view']; $dispatcher = $di['dispatcher']; $response = $di['response']; $dispatcher->setModuleName($router->getModuleName()); $dispatcher->setControllerName($router->getControllerName()); $dispatcher->setActionName($router->getActionName()); $dispatcher->setParams($router->getParams()); $moduleName = \Application\Utils\ModuleName::camelize($router->getModuleName()); $params = $router->getParams(); if($params){ if(isset($params['slug'])){ $params = $params['slug']; $lang = \Cms\Model\Language::findFirst("iso='{$params}'"); if($lang){ $dispatcher->setParams(array('lang'=>$lang->getIso(),'slug'=>'index')); $moduleName = \Application\Utils\ModuleName::camelize('index'); } } } $ModuleClassName = $moduleName . '\Module'; if (class_exists($ModuleClassName)) { $module = new $ModuleClassName; $module->registerAutoloaders(); $module->registerServices($di); } $view->start(); $registry = $di['registry']; if ($registry->cms['DEBUG_MODE']) { $debug = new \Phalcon\Debug(); $debug->listen(); $dispatcher->dispatch(); } else { try { $dispatcher->dispatch(); } catch (\Phalcon\Exception $e) { // Errors catching $view->setViewsDir(__DIR__ . '/modules/Index/views/'); $view->setPartialsDir(''); $view->e = $e; if ($e instanceof \Phalcon\Mvc\Dispatcher\Exception) { $response->setStatusCode(404, 'Not Found'); $view->partial('error/error404'); } else { $response->setStatusCode(503, 'Service Unavailable'); $view->partial('error/error503'); } $response->sendHeaders(); echo $response->getContent(); return; } } $view->render( $dispatcher->getControllerName(), $dispatcher->getActionName(), $dispatcher->getParams() ); $view->finish(); $response = $di['response']; // AJAX $request = $di['request']; $_ajax = $request->getQuery('_ajax'); if ($_ajax) { $contents = $view->getContent(); $return = new \stdClass(); $return->html = $contents; $return->title = $di->get('helper')->title()->get(); $return->success = true; if ($view->bodyClass) { $return->bodyClass = $view->bodyClass; } $headers = $response->getHeaders()->toArray(); if (isset($headers[404]) || isset($headers[503])) { $return->success = false; } $response->setContentType('application/json', 'UTF-8'); $response->setContent(json_encode($return)); } else { $response->setContent($view->getContent()); } $response->sendHeaders(); echo $response->getContent(); } } |
#8 | Eskiz\Bootstrap->run() /var/www/vhosts/uzbekinvest.uz/httpdocs/public/index.php (19) <?php chdir(dirname(__DIR__)); define('ROOT', __DIR__); define('HOST_HASH', substr(md5($_SERVER['HTTP_HOST']), 0, 12)); if (isset($_SERVER['APPLICATION_ENV'])) { $applicationEnv = ($_SERVER['APPLICATION_ENV'] ? $_SERVER['APPLICATION_ENV'] : 'production'); } else { $applicationEnv = (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'); } define('APPLICATION_ENV', $applicationEnv); define('APPLICATION_PATH', __DIR__ . '/../app'); require_once APPLICATION_PATH . '/Bootstrap.php'; $bootstrap = new Eskiz\Bootstrap(); $bootstrap->run(); |
Key | Value |
---|---|
_url | /ru/tender/vnimaniu-organizacij-i-predpriatij |
Key | Value |
---|---|
PATH | /sbin:/usr/sbin:/bin:/usr/bin |
PP_CUSTOM_PHP_INI | /var/www/vhosts/system/en.uzbekinvest.uz/etc/php.ini |
PP_CUSTOM_PHP_CGI_INDEX | plesk-php56-fastcgi |
SCRIPT_NAME | /public/index.php |
REQUEST_URI | /ru/tender/vnimaniu-organizacij-i-predpriatij |
QUERY_STRING | _url=/ru/tender/vnimaniu-organizacij-i-predpriatij |
REQUEST_METHOD | GET |
SERVER_PROTOCOL | HTTP/1.0 |
GATEWAY_INTERFACE | CGI/1.1 |
REDIRECT_URL | /public/ru/tender/vnimaniu-organizacij-i-predpriatij |
REDIRECT_QUERY_STRING | _url=/ru/tender/vnimaniu-organizacij-i-predpriatij |
REMOTE_PORT | 54820 |
SCRIPT_FILENAME | /var/www/vhosts/uzbekinvest.uz/httpdocs/public/index.php |
SERVER_ADMIN | root@localhost |
DOCUMENT_ROOT | /var/www/vhosts/uzbekinvest.uz/httpdocs |
REMOTE_ADDR | 54.236.58.220 |
SERVER_PORT | 443 |
SERVER_ADDR | 91.212.89.50 |
SERVER_NAME | en.uzbekinvest.uz |
SERVER_SOFTWARE | Apache |
SERVER_SIGNATURE | <address>Apache Server at en.uzbekinvest.uz Port 443</address>\n |
HTTP_ACCEPT_ENCODING | br,gzip |
HTTP_ACCEPT_LANGUAGE | en-US,en;q=0.5 |
HTTP_ACCEPT | text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
HTTP_USER_AGENT | CCBot/2.0 (https://commoncrawl.org/faq/) |
HTTP_CONNECTION | close |
HTTP_X_ACCEL_INTERNAL | /internal-nginx-static-location |
HTTP_X_FORWARDED_FOR | 54.236.58.220 |
HTTP_X_REAL_IP | 54.236.58.220 |
HTTP_HOST | en.uzbekinvest.uz |
HTTPS | on |
REDIRECT_STATUS | 200 |
REDIRECT_HTTPS | on |
REDIRECT_REDIRECT_STATUS | 200 |
REDIRECT_REDIRECT_HTTPS | on |
FCGI_ROLE | RESPONDER |
PHP_SELF | /public/index.php |
REQUEST_TIME_FLOAT | 1614735932.3702 |
REQUEST_TIME | 1614735932 |
# | Path |
---|---|
0 | /var/www/vhosts/uzbekinvest.uz/httpdocs/public/index.php |
1 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/Bootstrap.php |
2 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Cms/Config.php |
3 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/config/environment/production.php |
4 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/config/global.php |
5 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/config/modules.php |
6 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Loader/Modules.php |
7 | /var/www/vhosts/uzbekinvest.uz/httpdocs/vendor/autoload.php |
8 | /var/www/vhosts/uzbekinvest.uz/httpdocs/vendor/composer/autoload_real.php |
9 | /var/www/vhosts/uzbekinvest.uz/httpdocs/vendor/composer/ClassLoader.php |
10 | /var/www/vhosts/uzbekinvest.uz/httpdocs/vendor/composer/autoload_static.php |
11 | /var/www/vhosts/uzbekinvest.uz/httpdocs/vendor/symfony/polyfill-mbstring/bootstrap.php |
12 | /var/www/vhosts/uzbekinvest.uz/httpdocs/vendor/swiftmailer/swiftmailer/lib/swift_required.php |
13 | /var/www/vhosts/uzbekinvest.uz/httpdocs/vendor/swiftmailer/swiftmailer/lib/classes/Swift.php |
14 | /var/www/vhosts/uzbekinvest.uz/httpdocs/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php |
15 | /var/www/vhosts/uzbekinvest.uz/httpdocs/vendor/vanchelo/phalcon-mailer/src/helpers.php |
16 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Mvc/View/Engine/Volt.php |
17 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Widget/Proxy.php |
18 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Cache/Manager.php |
19 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Cms/Model/Configuration.php |
20 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Acl/DefaultAcl.php |
21 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/config/acl.php |
22 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Assets/Manager.php |
23 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Assets/Filter/Less.php |
24 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Mvc/Helper.php |
25 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Menu/Helper/Menu.php |
26 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Mvc/Router/DefaultRouter.php |
27 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Index/Routes.php |
28 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Mvc/Helper/CmsCache.php |
29 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Admin/Routes.php |
30 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Page/Routes.php |
31 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Publication/Routes.php |
32 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Publication/Model/Type.php |
33 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Mvc/Model/Model.php |
34 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Menu/Init.php |
35 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Menu/Helper/Helper.php |
36 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Seo/Routes.php |
37 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Api/Routes.php |
38 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Employee/Routes.php |
39 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/History/Routes.php |
40 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Poll/Routes.php |
41 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Region/Routes.php |
42 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Documentation/Routes.php |
43 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Webform/Routes.php |
44 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Portfolio/Routes.php |
45 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Media/Routes.php |
46 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Search/Routes.php |
47 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Faq/Routes.php |
48 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Partner/Routes.php |
49 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Services/Routes.php |
50 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Newsletter/Routes.php |
51 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Utils/ModuleName.php |
52 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Cms/Model/Language.php |
53 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Publication/Module.php |
54 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/plugins/CheckPoint.php |
55 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/plugins/Localization.php |
56 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Cms/Model/Translate.php |
57 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/plugins/AdminLocalization.php |
58 | /var/www/vhosts/uzbekinvest.uz/httpdocs/data/translations/admin/ru.php |
59 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/plugins/Acl.php |
60 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/plugins/MobileDetect.php |
61 | /var/www/vhosts/uzbekinvest.uz/httpdocs/vendor/mobiledetect/mobiledetectlib/Mobile_Detect.php |
62 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Publication/Controller/IndexController.php |
63 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Mvc/Controller.php |
64 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Publication/Model/Helper/PublicationHelper.php |
65 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Publication/Model/Publication.php |
66 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Cache/Keys.php |
67 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Publication/Model/Translate/PublicationTranslate.php |
68 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Mvc/Model/Translate.php |
69 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Publication/Model/Translate/TypeTranslate.php |
70 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Cms/Model/Settings.php |
71 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Mvc/Helper/Title.php |
72 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Mvc/Helper/Meta.php |
73 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/plugins/Title.php |
74 | /var/www/vhosts/uzbekinvest.uz/httpdocs/data/cache/volt/%%var%%www%%vhosts%%uzbekinvest.uz%%httpdocs%%app%%modules%%publication%%views%%index%%publication.volt.php |
75 | /var/www/vhosts/uzbekinvest.uz/httpdocs/data/cache/volt/%%var%%www%%vhosts%%uzbekinvest.uz%%httpdocs%%app%%views%%partials%%main%%menu.volt.php |
76 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Search/Widget/SearchWidget.php |
77 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Widget/AbstractWidget.php |
78 | /var/www/vhosts/uzbekinvest.uz/httpdocs/data/cache/volt/%%var%%www%%vhosts%%uzbekinvest.uz%%httpdocs%%app%%modules%%search%%views%%index%%block.volt.php |
79 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Mvc/Helper/LangSwitcher.php |
80 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Mvc/Helper/RequestQuery.php |
81 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Menu/Widget/MenuWidget.php |
82 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Menu/Model/Menus.php |
83 | /var/www/vhosts/uzbekinvest.uz/httpdocs/data/cache/volt/%%var%%www%%vhosts%%uzbekinvest.uz%%httpdocs%%app%%modules%%menu%%views%%widget%%main-menu.volt.php |
84 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Menu/Model/Translate/MenusTranslate.php |
85 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Application/Mvc/Helper/ActiveMenu.php |
86 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Breadcrumbs/Widget/BreadcrumbsWidget.php |
87 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Portfolio/Model/Category.php |
88 | /var/www/vhosts/uzbekinvest.uz/httpdocs/data/cache/volt/%%var%%www%%vhosts%%uzbekinvest.uz%%httpdocs%%app%%modules%%breadcrumbs%%views%%breadcrumbs.volt.php |
89 | /var/www/vhosts/uzbekinvest.uz/httpdocs/app/modules/Image/Storage.php |
Memory | |
---|---|
Usage | 4194304 |