4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Imagick + Memcacheで簡易サムネイルキャッシュを作ってみる

Last updated at Posted at 2016-02-27

環境

  • CentOS 7.X
  • Imagick
  • ImageMagick
  • Memcached

この構成でやるときに、いつも名前で混乱する。

  1. ImageMagickは、サーバーにインストールするライブラリ
  2. Imagickは、ImageMagickをPHPから使うときのラッパーライブラリ
  3. Memcachedは、キャッシュサーバー
  4. memcacheは、PHPのライブラリだけど、memcachedというライブラリもある……

インストール

  • Memcachedインストール
Memcached
# yum install memcached
# systemctl enable memcached.service
# systemctl start memcached.service
  • memcacheインストール
memcache
# yum -y install php-pecl-memcache

# yum install php-pear
# yum install php-devel
  • ImageMagickインストール
ImageMagick
# yum install ImageMagick*
  • Imagickインストール
Imagick
# pecl install Imagick
# php -i | grep Imagick

サンプルコード

image-proxy.php
<?php
/**
 * 画像サムネイル&キャッシュ
 * @use 
 * http://{your_domain}/scripts/image-proxy.php?url=http://upload.wikimedia.org/wikipedia/commons/2/2a/2008_ZB_Viper_SRT-10_blue.jpg
 */
define('THUMB_WIDTH',	160);
define('THUMB_QUARITY', 80);

$url = $_GET['url'];

$imagick = new Imagick();

// URLをキーとして画像を保存
$memcached = new Memcached();
if ($memcached) {
    $memcached->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
	
    $memcached->addServer('127.0.0.1', 11211);
	
	$blob = $memcached->get($url);
	if ($blob) {
		// キャッシュあり
		trigger_error("Stored Cache : YES");
		$imagick->readimageblob($blob);
	} else {
		// キャッシュなし
		trigger_error("Stored Cache : NO");
		$handle = fopen($url, 'rb');
		$imagick->readImageFile($handle);
		$imagick->resizeImage(THUMB_WIDTH, 0, 0, 0);
		$imagick->setImageFormat('jpeg');
		$imagick->setImageCompressionQuality(THUMB_QUARITY);
		// キャッシュセット
	    if (!$memcached->set($url, $imagick->getimageblob())) {
	    	trigger_error("Could not set Blob."); //  サーバーが落ちている
	    }
	}
}

// 出力
header("Content-Type: image/jpeg");
exit($imagick->getImageBlob());
?>

この後、最新の環境(Laravel + GD + Intervention Image)で作りそうな雰囲気なので、PearとかPeclの全盛期に書いた旧版を載せてみる。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?