CentOS

【PHP】で画像を綺麗にリサイズする。

PHPで画像周りの操作をする際はよくGDエクステンションを用いるが、GDの基本リサイズ関数であるimagecopyresized()は縮小した際のジャギがひどく全くもって使い物にならない。 一応フィルタでスムージングもしくはガウシアンぼかしを適用できるが、やるだけ無駄。 そして多少結果がマシになるimagecopyresampled()という関数も用意されているがこれもゴミ。~~ホントゴミ~~。

ということでこれからはPHPで画像の操作をする場合はImageMagickを用いよう。(強制)

Imagickとは

ようはGDより高性能で使いやすいいわゆる神エクステンション。100種類を超す形式の画像読み込みや変換に対応しており、WEBで扱うであろうファイル形式は当然いける。詳細は下記リンク。

http://php.net/manual/ja/book.imagick.php

インストール手順

yumを使おう。

  • とりあえずインストールされているPHPのバージョンを確認。

http://i.gyazo.com/029e75b8904c5e9616af581e28896157.png

  • 今回はremiのPHP5.6を導入。

http://i.gyazo.com/0e209e57a0bf0087515b150764d1ff1e.png

  • php56-php-pecl-imagick-devel.x86_64をインストールする。

※ココから先は環境に依存する(?)場合あり。

ImagickをPHPから読み込む。

  • 先ほどのyum操作でインストールされ、生成されたimagick.soをPHPのインクルードディレクトリにコピーしてやる。 ※自分の場合は下記の感じ。
  • 次にphp.dディレクトリにiniファイルを作成。
  • 下記のように記述。
  • そしたらhttpdを再起動

  • phpinfo()にて下記のように表示されていればインストール成功。

http://i.gyazo.com/1c5a35da23a9e58293ab8a7c6c53400b.png

使ってみる。

とりあえず当初からやりたかった画像のきれいなリサイズと切り抜きをやってみた。 今回は元画像の縦長、横長にかかわらず正方形になるようトリミングし、指定のサイズに縮小する処理を行いたかったのでそれをやる。

これだけ。イヤほんと簡単。しかもめちゃくちゃキレイ。かなり最適化されてる。 ジャギが全く無いしGDはでスムージングを行なった処理と比較しても格が違う。そもそもの画像処理アルゴリズムが違うんだろうけど、GDがどれだけクソかわかる。

しかもサムネイル作成用の関数が用意されていて長さ指定するだけで中央から綺麗にトリミングしてくれるという至れり尽くせりっぷり。画像のフォーマット別に読み込み関数が分かれていない点も最高に使いやすいし、今後画像処理はImagickで行うことを確信した。

【CentOS7】Muninインストール手順まとめ。

muninとmunin-nodeを入れる

完了すると/var/www/html以下にmuninフォルダが生成されるので、ここをブラウザから見れるようにセットアップする。 ※バーチャルホストなりなんなりでのぞけるようにしてもいいし、フォルダを辿っていってもOK。

監視間隔を変更する

/etc/munin/munin.confに追記。

/etc/cron.d/muninを編集

munin-nodeを再起動する。

これで更新間隔が5分から1分に変更される。

【CentOS】patchコマンドが無いよと怒られたら。

yumで入れてやればいい。

ね。簡単でしょ。

【CentOS】apxsが無い場合。

例えばwhich apxsなどを実行して、そんなもん無いよといわれてしまったら。

apxshttpd-develモジュールに含まれているので次の通りインストールしてやればOK。

これで/user/bin以下にapxsが配置されるはず。
※場所が違ってもwhich apxsすればわかる。

【CentOS】makeコマンドで「/usr/bin/ld: cannot find」と表示されたら。

makeコマンドを実行した際に「/usr/bin/ld: cannot find …」と怒られるのは、その後の「-l」以降に続く文字列名のライブラリが不足していることが原因。

例えば

と表示されていたら、ltdlという名前のパッケージが足りていないということ。

焦らずにyum search ltdlとでも入力し、ひっかかったライブラリをインストールしてやればOK。

【CentOS/PHP】phpenvを道入して複数バージョンのPHPを管理する。

phpenv

複数バージョンのPHPを管理するツール。PHPのバージョンをフォルダごとに分けたりとかが出来る。

インストール

下記コマンドを順番に実行。

ここまできたらphpenvコマンドが有効になる。

PHPをインストール

下記コマンドでインストール可能なPHPのバージョンを確認。

こんな感じでリスト表示されるので、この中から使いたいバージョンを決める。
んで例えば5.3.29をインストールしたい場合は下記の通り。

PHPインストール(コンパイル)時のオプションは下記ファイルに記載されているので確認すること。

インストール時のオプションを書き換えたい場合はこれらのファイルを編集すればよい。

オプションを足したい場合は

オプションを削除したい場合は

という記述を各バージョンごとのファイルに追記してやる。
※ここでの注意点として、configure_optionを最終行に追記すると反応しない場合があるらしいので先頭行に追記するのがベター。

たとえばPHP5.3.29をインストールする際に--enable-fpmを追加したければ、 ~/.phpenv/plugins/php-build/share/php-build/definitions/5.3.29configure_option "--enable-fpm"を追記して保存する。

PHPのバージョンを切り替える

まずは下記コマンドでインストール済のPHPバージョンを確認する。

このようにリスト表示される。

そしたら状況に応じて下記コマンドのいずれかを実行。

例えばバージョン5.4.35を現在のディレクトリ以下のみで有効にしたい場合はこんな感じ。

上記を実行すると、そのディレクトリに.php-versionが生成され、その後指定したバージョンが有効になる。

試しにそのフォルダ内でphp -vを実行してやると、ちゃんとバージョンが適用されていることが分かる。

Apacheから特定のPHPバージョンを有効化する

  • まずはhttpd-develパッケージに付属しているapxsの場所を特定する。
    ※下記コマンドを実行すればOK。

  • 次にインストールしたいPHPのバージョンを決め、そのPHPバージョンのコンパイルオプション定義ファイルに次の行を追記する。

5.4.35の場合は~/.phpenv/plugins/php-build/share/php-build/definitions/5.4.35に下記を追記。

apxsへのパスは先ほどwhichコマンドで調べた際のものを指定。

  • 次にPHPのMakefileが出力するlibphp5.soの出力先パスを変更するためにパッチを当てる。

  • 次の内容を記載したファイルをphp-build.patchとして保存。

  • 下記コマンドを実行してパッチを当てる。
  • ビルドが完了すると、下記ディレクトリにlibphp5.soが出力される。
  • 最後にこのlibphp5.sohttpd.confでロードし、サーバーを再起動すれば完了。

※自分の場合はPHPのビルド完了と共に、httpd.conf内に自動で下記が追記されていたが、もし追記されていなければ追記して保存しれやればよい。

違うバージョンを試したい場合も同様にこの手順を繰り返してやればOK。 もしサーバーにもともとインストールしてあるPHPに戻したい場合はLoadModuleの行を消すなりコメントアウトするなりして、サーバーを再起動すればOK。

【CentOS】zipファイルを解凍したい。

そうだ、zipを解凍しよう。

とりあえず、zipとunzipをいれよう。

からの

からの

以上、完了。

【CentOS】iptablesを適切に設定する。

際に下記ページが非常に参考になりました。

http://support.sakura.ad.jp/manual/vps/security/iptables.html