<

![endif]-->

fc2ブログ

php-fpmのupstartを書いてみた

/etc/init.dから/etc/initへ移行。

・/etc/init.dから削除
sudo /etc/init.d/php-fpm stop
sudo update-rc.d -f php-fpm remove
sudo rm /etc/init.d/php-fpm

・/etct/initへ
sudo vi /etc/init/php-fpm.conf
description "php-fpm"

start on net-device-up and local-filesystems
stop on shutdown

env DAEMON=/home/aoyagikouhei/opt/php/sbin/php-fpm
env CONFIGFILE=/home/aoyagikouhei/var/www/php/php-fpm.conf

expect fork
respawn
respawn limit 10 5
exec $DAEMON --fpm-config $CONFIGFILE

sudo start php-fpm

PHPでアクセスログをFluentdに書くライブラリ

PHPでFluentdにアクセスログを書くライブラリを作りました。
fluent-accesslog

そもそもSlim Frameworkを使っていてアクセスログを入れるために作りましたが、特にフレームワークに依存していないので、素のPHPにも他のフレームワークにも導入できます。

機能としては$_REQUESTから隠したいパラメーターを除いてできるだけ集めるのと
$_SERVERから必要なパラメーターを集めます。

実際にログを追加する部分では、手動でログを追加できますし、tagの対してprefixとpostfixがつけられます。
詳細はreadmeかソースを見てください。

$log = new \Fluent\Accesslog(array(
'tag' => 'mongo.accesslog'
,'tag_with_date' => 'Ym'
,'mask' => ['password']
,'server' => ['REMOTE_ADDR' => 'i']
));
$log->add(array('id' => $_SESSION['member_id']));

S3で非公開の画像を一時的に表示する

https://s3.amazonaws.com/bucket_name/file
でS3に保存されているファイルが非公開の時に一時的に公開する方法です。
ドキュメントのこれを参考にしました。

function makeUrl($path, $seconds, $key, $secret) {
$expire = (new DateTime())->add(new DateInterval('PT' . $seconds . 'S'))->format('U');
$stringToSign = "GET\n\n\n{$expire}\n{$path}";
$signature = urlencode(base64_encode(hash_hmac(
'sha1', $stringToSign, $secret, true)));
return 'https://s3.amazonaws.com'
. $path
. '?AWSAccessKeyId=' . $key
. '&Signature=' . $signature
. '&Expires=' . $expire;
}


makeUrl('/bucket_name/file', 60, 'my-key', 'my-secret');
で1分間アクセス可能になります。

やたー俺得PHP用PostgreSQLライブラリできたよー

PDOはオワコン

github
composerならこれ→
"aoyagikouhei/pg": "dev-master",

いいとこ。
1. 入力と出力の値がだいたい型を適用する。
PDOは文字列型しか無いけど、BOOL型ならちゃんとtrue,falseを返してくれる。

2. 配列は変換してくれる。
PDOは文字列型しか無いけど(ry

3. 与えるパラメーターでストアードプロシージャーの呼び出しが変化する。
ここが完全に俺得仕様
ストアードプロシージャーは名前付き引数をサポートしています。
ですので、パラメーターに値が入っていると補完するようにしました。
:paramsというがあると、勝手に置き換えします。

$db->queryAll('SELECT sp_test(:params)', ['ival' => 1, 'tval' => 'a']);
と与えると
SELECT sp_test(p_ival := $1, p_tval := $2)
と展開します。

まとめ。
詳細はテストかソース見てください。
まだまだサポートしていない型とかあるので、自分が使いたくなったらじわじわ追加していきます。
あと、ファイルとかバイナリとか扱えるようにしたいかも。

phpのgmagickで画像縮小

PHPのgmagickを使ってformなどでアップロードされた画像を縮小してフォーマットをjpegに変えて保存します。
アニメーションGIFの場合、最初のコマを対象にします。

public function makeResize($srcPath, $dstPath, $size) {
$gm = new Gmagick();
$gm->readImage($srcPath);
if ($gm->getNumberImages() > 1) {
$gm->setImageDispose(0);
$gm->setImageIndex(0);
$frame = $gm->getImage();
} else {
$frame = $gm;
}

$width = $frame->getImageWidth();
$height = $frame->getImageHeight();
if ($width > $height && $width > $size) {
$frame->resizeImage($size, 0, Gmagick::FILTER_LANCZOS, 1);
} else if ($height > $size) {
$frame->resizeImage(0, $size, Gmagick::FILTER_LANCZOS, 1);
}
$gm->setImageFormat('JPEG');
$gm->write($dstPath);
$gm->destroy();
}