PHP – extractで配列を変数に展開する

extractでこういうことができる

<?php
extract(['tenki_1' => '晴れ', 'tenki_2' => '曇り', 'tenki_3' => '']);
echo $tenki_1 . PHP_EOL;
echo $tenki_2 . PHP_EOL;
echo $tenki_3 . PHP_EOL;

衝突した変数にはprefixを付けるとか、全部にprefixを付けるとかオプションはいろいろある。連想配列をいちいちキー指定して取得するくらいなら、クロージャの中で展開しちゃって使う方がコードが綺麗になることもあると思う。

PHP – アクセスする度に毎度違うメッセージを表示する

配列に入れて乱数で回すだけ

<?php
$messages = ['晴れ', '曇り', ''];
echo $messages[rand(0, count($messages) - 1)];
echo PHP_EOL;

さらにこれをしっかり書くならこういう風にもできる。PHParray_randを使ってみた

<?php
$messages = ['晴れ', '曇り', ''];
echo $messages[array_rand($messages)];
echo PHP_EOL;

実行結果はこんな感じ

$ php message.php
雨
$ php message.php
晴れ
$ php message.php
曇り
$ php message.php
晴れ
$ php message.php
雨

treeでディレクトリを除外する

treeで構造を確認する時があるがtmpディレクトリとかを除外したいって時はIオプションを使う。これにはファイル名を入れたりワイルドカードを指定することもできる。

tree -I hoge

複数指定する場合は正規表現で

tree -I 'hoge|fuga'

参考

PHP – アップロードされたファイルが画像かを判定しGIF・JPEG・PNGかを判別する

簡易的だけどこんな方法があるのか

<?php
if (is_uploaded_file($_FILES['upfile']['tmp_name'])) {
if (exif_imagetype($_FILES['upfile']['tmp_name']) === IMAGETYPE_GIF) {
echo 'これはGIF';
}
} else {
throw new Exception('ファイルがアップロードされていません');
}

判定するための定数はこんなのがある

  • 1 : IMAGETYPE_GIF
  • 2 : IMAGETYPE_JPEG
  • 3 : IMAGETYPE_PNG
  • 4 : IMAGETYPE_SWF
  • 5 : IMAGETYPE_PSD
  • 6 : IMAGETYPE_BMP
  • 7 : IMAGETYPE_TIFF_II (intel byte order)
  • 8 : IMAGETYPE_TIFF_MM (motorola byte order)
  • 9 : IMAGETYPE_JPC
  • 10 : IMAGETYPE_JP2
  • 11 : IMAGETYPE_JPX
  • 12 : IMAGETYPE_JB2
  • 13 : IMAGETYPE_SWC
  • 14 : IMAGETYPE_IFF
  • 15 : IMAGETYPE_WBMP
  • 16 : IMAGETYPE_XBM
  • 17 : IMAGETYPE_ICO

GD入れなくてもいいところが楽かなあと思って

Thanks

ysklog.net

PHP – is_uploaded_fileでHTTP POST でアップロードされたか調べる

is_uploaded_fileて私はじめて知ったというか、一番最初に勉強したと思うんだけど忘れてたw

is_uploaded_file($_FILES['userfile']['tmp_name'])

私はtmp_nameをチェックして存在していれば、という所から処理をはじめ、バイナリでデータを取り出したりチェックしたり云々してるので仕組み的には問題ないだろうが、できるだけふさわしい関数を使うべきだよねってことで。

Dockerでイメージを削除する

docker pull pathみたいにしたり、docker buildで作ったイメージとかを削除する

docker rmi hash

コンテナとは違って、イメージは一度落とすとそれが使われ続けるので、リモートのイメージが新しくなっても一旦削除しないと新しくならない。そんなにリモートのイメージが変わることはないと思うけどw

Dockerコンテナを全て破棄する

いちいちdocker rm hashとしているのが面倒になったらこれ

docker rm `docker ps -a -q`


警告を無視したやつ

docker rm -f `docker ps -a -q`


いろいろなことをやってるとどんどんコンテナが作成されていく。テスト環境だったらこれでいいな。

Thanks

blog.n-z.jp

PHP – CPUやスワップなどの情報を取得

getrusage()というのがあっていろいろ取得できる

print_r(getrusage());

実行結果はこれ

$ php test.php
Array
(
[ru_oublock] => 1
[ru_inblock] => 26
[ru_msgsnd] => 0
[ru_msgrcv] => 0
[ru_maxrss] => 8765440
[ru_ixrss] => 0
[ru_idrss] => 0
[ru_minflt] => 1698
[ru_majflt] => 664
[ru_nsignals] => 0
[ru_nvcsw] => 82
[ru_nivcsw] => 151
[ru_nswap] => 0
[ru_utime.tv_usec] => 81189
[ru_utime.tv_sec] => 0
[ru_stime.tv_usec] => 81839
[ru_stime.tv_sec] => 0
)

単なるgetrusage(2)へのインターフェースらしいので各要素の説明などはLinux関連のページに日本語で書いてあった。本当に使う時はこちらを参考にするといいんじゃないだろうか。

Man page of GETRUSAGE