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