配列からホワイトリストで指定したキーの値のみ抽出する

ポストされたデータがのなかで指定したパラメータの値のみの配列が欲しいことがよくある。foreach() や array_filter() とかでぐるぐる回さなくても良い方法があった。
http://blog.pixelastic.com/2011/05/11/whitelisting-keys-array/
より

<?php
function array_whitelist($array, $whitelist = array()) {
  return array_intersect_key($array, array_flip($whitelist));
}

fputcsv() で作成しする CSV ファイルの改行コードを CRLF にする

Linux などは、fputcsv() の改行コードが LF になってしまうのだが、 CRLF が望ましい場合が多いので困る。
以下のようにストリームフィルタを使う例が紹介されていた。

http://stackoverflow.com/questions/12722894/how-can-i-change-the-line-endings-used-by-fputcsv#tab-top

vagrant 上の CentOS7 で private_network 設定に失敗する

Vagrant 1.6.3 から CentOS7 を起動するときの設定(Vagrantfile)で

config.vm.network :private_network, ip: "192.168.33.10"

と新しいNICの設定を追加すると、CentOS6 と比べてネットワーク周りが変わった関係で、vagrant 起動時のネットワーク設定が失敗してしまう。

The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

ARPCHECK=no /sbin/ifup eth1 2> /dev/null

Stdout from the command:

ERROR    : [/etc/sysconfig/network-scripts/ifup-eth] Device eth1 does not seem to be present, delaying initialization.


Stderr from the command:

応急措置的なプラグインが用意されているので、インストールすると解消した。

 vagrant plugin install vagrant-centos7_fix

明らかなバグなので、じきに解決するかもしれない。
参考: https://github.com/mitchellh/vagrant/pull/4195

追記(9/5)

Vagrant 1.6.5 で解決!いまは最新版にアップするだけでオッケー。

Vagrant アップグレード後に vagrant box list が出来ない

Vagrant は、長らく 1.0 系を愛用していたが、1.4 がリリースされたことだし、そろそろアップデートしてみようかと思って試してみたところ、vagrant box (list|remove) サブコマンドがうまく動かないことが分かった。

$ vagrant box list
base   (virtualbox)
The box 'base' is still stored on disk in the Vagrant 1.0.x
format. This box must be upgraded in order to work properly with
this version of Vagrant.

vagrant up や vagrant box repackage 等を実行すればアップグレードされるらしい。

$ vagrant box repackage base virtualbox

PHP でディレクトリ以下を再帰的にファイル削除

RecursiveDirectoryIterator を使って削除。

<?php
$path = "/path/to/dir";

$items = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::CURRENT_AS_SELF),
    RecursiveIteratorIterator::CHILD_FIRST
);

foreach ($items as $item) {
    if ($item->isFile() || $item->isLink()) {
        unlink($item->getPathname());
    } elseif ($item->isDir() && !$item->isDot()) {
        rmdir($item->getPathname());
    }
}

rmdir($path);

Apache の DocumentRoot に共有フォルダを使った場合

Vagrant を使っていて VirtualBox の共有フォルダを DocumentRoot に設定することがよくあるが、

EnableSendFile off

とすると静的ファイル読み込みが早くなってよいらしい。