Intereting Posts
Ошибка SplFileObject не открыла поток: нет такого файла или каталога PHP Неустранимая ошибка: использование $ this, если не в объектном контексте Как определить, является ли объект Traversable в PHP? Скомпилированный PHP 7 отсутствует расширение mysql в WordPress PHP испускает 500 на ошибках – где это документировано? Получать все наступления определенного дня в месяц facebook login возвращает код как переменную в строке запроса Как показать разбиение на страницы с помощью товарного кода? Функции для округления и округления фракций с точностью в PHP, любой лучший способ сделать это? Начало работы с SAML и PHP Можете ли вы получить доступ к модели из другой модели в CodeIgniter? Нежелательное регулярное выражение Перевод Gettext или базы данных получить IP-адрес клиента в программировании сокетов в PHP Предупреждение: mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, null указан в /public_html/access/login.php в строке 15

Laravel 5.2: Класс Imagick не найден

Мы конвертируем страницы PDF в несколько отдельных изображений. Мы нашли фрагмент кода в stackoverflow и преобразовали его в класс обслуживания. У нас установлен Imagick, и он появляется в phpinfo (). Однако в нашем приложении laravel, версии 5.2, мы получаем следующую ошибку.

ReflectionException in Container.php line 798: Class Imagick does not exist 

Мы протестировали наш код вне среды laravel, и он работает как шарм. Такая ошибка не возникает. Мы также выполнили следующую команду, чтобы проверить Imagick

 php -i | grep -i imagick 

и это результат

  /etc/php5/cli/conf.d/20-imagick.ini, imagick imagick module => enabled imagick module version => 3.4.3RC1 imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator Imagick compiled with ImageMagick version => ImageMagick 6.7.7-10 2016-06-01 Q16 http://www.imagemagick.org Imagick using ImageMagick library version => ImageMagick 6.7.7-10 2016-06-01 Q16 http://www.imagemagick.org imagick.locale_fix => 0 => 0 imagick.progress_monitor => 0 => 0 imagick.skip_version_check => 0 => 0 

Все кажется правильным. Он работает за пределами Ларавеля, но не в ларавеле. Я понятия не имею, что случилось. Нужно ли настраивать Laravel для использования Imagick?

Вот наш класс обслуживания, который мы используем

 <?php namespace App\Services\Utilities; use Imagick; class PdfToImageService { /** * Destination folder where images will be saved * @var string */ protected $destination = 'images/users/'; /** * Injecting dependencies * * @param Imagick $imagick */ function __construct(Imagic $imagick) { $this->imagick = $imagick; } /** * Convert pdf having multiple pages to multiple single images * * 1. Strip document extension * 2. Convert this document * 3. Set background color and flatten. It Prevents black background on objects with transparency * 4. Set image resolution * 5. Determine number of pages * 6. Compress Image Quality * 7. Generate images from each pdf page * 8. Destroy current imagick session * * @param string $fileName * @return array $convertedImageNames */ public function createImages($fileName) { $fileName = basename($fileName); $this->imagick->readImage($fileName); $this->imagick->setImageBackgroundColor('white'); $this->imagick->setResolution(300,300); $this->imagick->setImageCompressionQuality(100); $convertedImageNames = $this->generateImageFromPDFPage( $fileName, $this->imagick->getNumberImages() ); $this->imagick->destroy(); return $convertedImageNames; } /** * Loop throught each pdf pages and convert it to image. * A. Set iterator postion * B. Set image format * C. Write Images to destination folder * * @param string $fileName * @param integer $noOfPages * @return array */ private function generateImageFromPDFPage($fileName, $noOfPages) { for($i = 0;$i < $noOfPages; $i++) { $this->imagick->setIteratorIndex($i); $this->imagick->setImageFormat('jpeg'); $this->imagick->writeImage($this->destination.$fileName.'-'.$i.'.jpg'); $convertedImageNames[$i] = $fileName.'-'.$i.'.jpg'; } return $convertedImageNames; } } 

Можете ли вы попробовать отредактировать php.ini, расположенную в
cd /etc/php5/apache2/php.ini

если ваш linux ubuntu?

 cat php.ini | grep extension=imagick.so 

если есть результаты поиска, то вы можете получить это
; расширение = imagick.so
Вы удаляете эту точку с запятой; и если не какие-либо результаты,

 echo "extension=imagick.so" >> /etc/php5/apache2/php.ini 

И наконец

 sudo /etc/init.d/apahce2 restart 

Он работает с этим кодом

 <?php namespace App\Http\Controllers; use Illuminate\Routing\Controller as BaseController; use Imagick; class GuestController extends BaseController { public $imagic; public function __construct(){ $this->imagic = new Imagick(); } public function test(){ return get_class_methods($this->imagic); } }