/** * @param self $folder * @param string $fileName новое название файла, по умолчанию берется имя из себя * * @return self файл назначения * @throws \Exception */ public function copyToFolder($folder, $fileName = null) { if (is_null($fileName)) { $fileName = $this->getFileName(); } $ret = $folder->cloneObject(); $ret->add($fileName); @copy($this->getPathFull(), $ret->getPathFull()); return $ret; }
/** * Выбирает все картинки копирует в папку назначения заменяет в $content и возвращает * * @param \simple_html_dom | string $content контент * @param SitePath | string $destination путь к папке назначения, она должна существовать * * @return string */ public static function copyImages($content, $destination) { if ($content == '') { return ''; } if (!$content instanceof \simple_html_dom) { require_once Yii::getAlias('@csRoot/services/simplehtmldom_1_5/simple_html_dom.php'); $content = str_get_html($content); } foreach ($content->find('img') as $element) { $imagePath = new SitePath($element->attr['src']); // картинка не содержит путь назначения? if (!Str::isContain($element->attr['src'], $destination->getPath())) { $urlInfo = parse_url($element->attr['src']); if (ArrayHelper::getValue($urlInfo, 'scheme', '') == '') { try { $destinationFile = $destination->cloneObject()->add($imagePath->getFileName()); self::resizeImage($imagePath->getPathFull(), $destinationFile->getPathFull()); $element->attr['src'] = $destinationFile->getPath(); } catch (\Exception $e) { Yii::warning($e->getMessage(), 'gs\\HtmlContent\\copyImages'); } } else { // картинка на внешнем сервере, пока ничего не делаем } } } return $content->root->outertext(); }
/** * Выбирает все картинки копирует в папку назначения заменяет в $content и возвращает * * @param \simple_html_dom | string $content контент * @param SitePath | string $destination путь к папке назначения, она должна существовать * @param bool $isCopyFromRemoteHost копировать с внешних источников картинки? * * @return string */ public static function copyImages2($content, $destination, $isCopyFromRemoteHost = false) { if ($content == '') { return ''; } // выбираю все изображения из контента $start = 0; $ret = []; do { $pos = Str::pos('src="/upload/HtmlContent/', $content, $start); if ($pos === false) { break; } $end = Str::pos('"', $content, $pos + 5); $src = Str::sub($content, $pos + 5, $end - $pos - 5); $ret[] = $src; $start = $end; } while (true); foreach ($ret as $src) { $imagePath = new SitePath($src); // картинка не содержит путь назначения? if (!Str::isContain($src, $destination->getPath())) { try { $destinationFile = $destination->cloneObject()->add($imagePath->getFileName()); self::resizeImage($imagePath->getPathFull(), $destinationFile->getPathFull()); $content = Str::replace('src="' . $src . '"', 'src="' . $destinationFile->getPath() . '"', $content); } catch (\Exception $e) { Yii::warning($e->getMessage(), 'gs\\HtmlContent\\copyImages'); } } } return $content; }