chownで Unable to find uid エラー

/ php

PHPのchown関数を使ったらこんな警告が。

Warning: chown() [function.chown]: Unable to find uid for 1022

「uidが1022のユーザーなんていないよ」ってことなんだけど、実際に/etc/passwdとか見ても存在しているし、bashでchownコマンドを打つと正常に機能する。

該当処理は、こんな感じ。

public function my_chown($file, $uid, $gid)
{
    chown($file, $uid);
    chgrp($file, $gid);
}

30分ほどハマって、「もしかして、1022って名前のユーザを探してるんじゃ?」と思って調べたら、大正解。$uidと$gidがstringで渡ってきていたため、名前解決を頑張った結果だった。うわー。

var_dump($uid);

string(4) "1022"

ちゃんと判定して型キャストしてあげたら、思い通り動いてくれた。

public function my_chown($file, $uid, $gid)
{
    if (is_numeric($uid)) {
        $uid = (int) $uid;
    }
    if (is_numeric($gid)) {
        $gid = (int) $gid;
    }
    chown($file, $uid);
    chgrp($file, $gid);
}

これだから型が厳密じゃない言語ってのは…、と軽くキレそうになったけど、んなこと言っている暇があるたら、早く慣れてガリガリとアプリ開発できるように書き続けた方が、建設的だよね。ふぅ。

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/447