プロが教えるわが家の防犯対策術!

下記スクリプトを実行すると、『Warning: rename(./aaa/bbb.send,./aaa/bbb.send.gz) [function.rename]: Permission denied in ...line 31←renameの行数』というエラーになります。

===========
<?php
$dir = opendir("./aaa");
$latestfile=0;
while ($fnm = readdir($dir)) {
if($fnm == "." || $fnm == "..") continue;
$ftime = filemtime("./aaa/$fnm");
if($latestfile < $ftime){
$latestfile = $ftime;
$latestfilename =$fnm;
$filename = "./aaa/$latestfilename";
$fp = fopen($filename, "rwb+");
fread($fp, 18); //18バイト読み飛ばす
ftruncate($fp, 0);
$warn = '';
while (!feof($fp)) {
$warn .= fread($fp, 8192);
}
rewind($fp);
fwrite($fp, $warn);
rename($filename,"$filename.gz");
fclose($fp);
}
}
closedir($dir);
?>
=============
renameの手前でchmodを実行させ、aaaディレクトリ及びファイル自身(./aaa/$filename)にパーミッション0777を与えても現象は変わりません。renameする$filenameにつきましても./aaa/$filenameとしたり、./aaa/$latestfilenameとしてみましたがやはり変わりませんでした。
解決策があればご教授願います。

A 回答 (2件)

fclose する前に、rename しようとしているからじゃないですか

    • good
    • 0
この回答へのお礼

す、すいませんでした。
凡ミスです。
解決いたしました。
本当にありがとうございます。

お礼日時:2006/08/07 03:04

./aaaに対してパーミッションのあるユーザでスクリプトを実行していますか?



そうでないとchmod自身も動かないと思いますが・・・
ためしに,ルートで./aaaディレクトリ以下すべてに
0777のパーミッションを事前に設定してしまえば動くと思いますが・・・それでいいかは疑問ですが・・

この回答への補足

./aaaに対してパーミッションのあるユーザーにて実行しているんです。
rename...のところを、
touch("./aaa/newfile.gz")で実行すると
aaaディレクトリにnewfile.gzフィルが作成されます。

※なお補足ですが、renameのすぐ上の行(fwrite($fp, $warn);)までは正常に実行されています。

補足日時:2006/08/07 00:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!