renameでのPermission deniedエラー

このQ&Aのポイント
  • 下記スクリプトを実行すると、『Warning: rename(./aaa/bbb.send,./aaa/bbb.send.gz) [function.rename]: Permission denied in ...line 31←renameの行数』というエラーになります。
  • chmodを実行しても解決せず、パーミッションを変更してもエラーが解消しません。
  • 解決策があれば教えてください。
回答を見る
  • ベストアンサー

renameでのPermission deniedエラー

下記スクリプトを実行すると、『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としてみましたがやはり変わりませんでした。 解決策があればご教授願います。

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

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

wf3255
質問者

お礼

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

その他の回答 (1)

  • chiezo2005
  • ベストアンサー率41% (634/1537)
回答No.1

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

wf3255
質問者

補足

./aaaに対してパーミッションのあるユーザーにて実行しているんです。 rename...のところを、 touch("./aaa/newfile.gz")で実行すると aaaディレクトリにnewfile.gzフィルが作成されます。 ※なお補足ですが、renameのすぐ上の行(fwrite($fp, $warn);)までは正常に実行されています。

関連するQ&A

  • fwrite~サーバ環境で、なぜか0バイト

    ちょっと悩んでしまい質問させていただきます。 下記スクリプトにて、 (1)./aaaディレクトリ内の最新更新日付ファイルをオープン (2)文頭18バイトを削除し、残りのデータを同じファイルに保存する。 というスクリプトを作成しました。 っがしかし、ローカル環境(XAMPP)では上手く動いたのですがサーバー上ではなぜか当該ファイルが0バイトになってしまします。解決策がわかりませんのでご教授願います。 ただ、一点気がかりなのがサーバーは仕様でPHP4.3.2であるので、マニュアルのftruncateにある“注意”の内容が気にかかっています。戻り値が異なることが関係有るかも含めてご教授いただけると助かります。 ======== <?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);//上記18バイトを削除 $warn = ''; while (!feof($fp)) { $warn .= fread($fp, 8192); } rewind($fp); fwrite($fp, $warn); fclose($fp); closedir($dir); ?> ========

    • ベストアンサー
    • PHP
  • filemtimeについて

    filemtime関数を使ってあるディレクトリ(./aaa)の中の最新のファイルを表示させようとしていますが、少し前までは上手くいっていたのですが、急に予定通りに動かなくなってしまい、ちょっと自分では解決できないため質問させていただきます。 スクリプトは下記になります。 <?php $dir = opendir("./aaa"); $latestfile=0; while ($fnm = readdir($dir)) { if($fnm == "." || $fnm == "..") continue; clearstatcache(); $ftime = filemtime("./aaa/$fnm"); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename = $fnm; $filename = "./aaa/$latestfilename"; echo "$filename"; } } closedir($dir); ?> これで実行すると、aaaディレクトリ内のファイル名が全て表示されてしまいます。※ファイルの更新日時はファイルごとに異なっています。 どなたかご教授願います。

    • ベストアンサー
    • PHP
  • 条件によりそれ以下を実行しない方法

    あるディレクトリ(./ppp)をオープンして、ディレクトリ内の最新ファイル名を取得し、その最新ファイル名(下記スクリプト中の$filename)に".gz"という文字列が含まれていたらそれ以下のスクリプトを実行せずにディレクトリクローズしてスクリプトを中止するスクリプトを考えています。下記スクリプト中の■■■の部分にあたる部分がわかりませんのでご教授願います。phpは4.3.2です。 =========== <?php $dir = opendir("./ppp");//ディレクトリオープン $latestfile = 0;//最新ファイル名取得 while ($fnm = readdir($dir)) { if($fnm == "." || $fnm == "..") continue; $ftime = filemtime("./ppp/$fnm"); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename =$fnm; $filename = "./ppp/$latestfilename"; } } ■■■ ・ ・ ・ closedir($dir); ?> ===========

    • ベストアンサー
    • PHP
  • if文でのハンドラ取得

    初歩的な質問で申し訳ございません。 ディレクトリ./aaaの中にあるファイル名のうち、.bbbという拡張子のファイルが存在した際(複数存在することはありません)に下記の処理を実行するスクリプトを作成したいのです。 自分で試みると1行目の$filenameが上手く取得できず、エラーが多数発生してIEが固まってしまいます。 下記スクリプト前のif分の中でどのように$filenameを取得したらよいかをご教授願います。 ===処理==== $fp = fopen($filename, "rb+"); fread($fp, 204); $warn = ''; while (!feof($fp)) { $warn .= fread($fp, 8192); } rewind($fp); fwrite($fp, $warn); ftruncate($fp, ftell($fp)); fclose($fp); rename($filename,"$filename.gz"); $lines = gzfile("$filename.gz"); $lastfile = fopen("./aaa/ggg.yyy", "wb"); foreach($lines as $line){ $txt .= $line; } $lastview = fwrite($lastfile,$txt); fclose($lastfile); chmod("./aaa/ggg.yyy", 0755); closedir($dir); ===処理====

    • ベストアンサー
    • PHP
  • ディレクトリ内の最新ファイルのみをコピーが上手くいかない

    下記のようなスクリプトにより、 ./ディレクトリ内の更新日付が最新のファイル名を取得し、 そのファイルを./bbbディレクトリにコピーするということを行いたいのですが、 更新日付が最新のものに関わらず全てのファイルがコピーされてしまいます。 <?PHP $dir = opendir("./"); $latestfile = 0; while ($fnm = readdir($dir)) { if($fnm == "." || $fnm == "..") continue; $ftime = filemtime("$fnm"); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename =$fnm; $to="./bbb/".$fnm; if(!file_exists($to)) copy("./".$fnm,$to); } } closedir($dir); ?> 自力ではどこがヘンなのか理解できないため、どなたか教えてください。

    • ベストアンサー
    • PHP
  • fopenで変数で指定したファイルの開き方

    同階層にあるディレクトリの中の更新日付が最新のファイルを整形してHTML形式にて出力するスクリプトを書いています。 下記に例を書きます。 注)aaa→同階層にあるディレクトリです。   PHP→Ver4.3.8 <?php $dir = opendir("./aaa"); $latestfile=0; while ($fnm = readdir($dir)) { $ftime = filemtime($fnm); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename = $fnm; $handle = @fopen("$latestfilename", "r"); if ($handle) { while (!feof($handle)) {    ・    ・    ↓   sring処理へと続く   echo(nl2br($String処理後の変数名));      } } fclose($handle); } } closedir($dir); ?> この方法だと上手くいきません。 エラー内容は『fclose(): supplied argument is not a valid stream resource』です。 ファイルが開かれていません。 よってfopenで変数で指定されたファイルを開く方法をご教授願います。 もし『fopen使うこと自体が誤っている』ということでしたら正しい書き方をご教授願います。

    • ベストアンサー
    • PHP
  • if文の使い方

    自分では解決できない為、質問させていただきます。 Webサイトの任意の場所に下のスクリプトを埋め込み、 ./testディレクトリに7日以内に更新ファイルがあり、かつファイル名にrrrという文字列がなければWEBサイトの埋め込んだ場所にABCDEFGHIJKと表示させることを考えています。 よって7日以内に更新があってもファイル名にrrrが含まれる場合や、 7日以内に更新がない場合はwebサイトにABCDEFGHIJKと表示させたくありません。 自分で書いてみた下記スクリプトではいつでもABCDEFGHIJKと表示されてしまいます。 ※下記9行目の$latestfilenameをechoするとちゃんと最終更新ファイル名を表示してくれます。(ここまでは上手くいっています) <? $dir = opendir("./test"); $latestfile=0; while (($fnm = readdir($dir)) !== false) { if($fnm == "." || $fnm == "..") continue; $ftime = filemtime("./test/$fnm"); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename = $fnm; } } if($fnm == "." || $fnm == "..") continue; if(preg_match("/rrr/",$latestfilename)){ printf(""); break; } else if($nowdate - $fftime < 604800) { printf("ABCDEFGHIJK"); } else if($nowdate - $fftime > 604800) { printf(""); } closedir($dir); ?> 何がおかしいのかご教授ください。

    • ベストアンサー
    • PHP
  • shtmlファイルでのif文

    質問させていただきます。 htmlファイルへの埋め込みだとうまくいくのですが、 shtmlファイルへ下記スクリプトを埋め込むと、 『あかさたな!")); break; } else { printf(""); break; } } ?> 』 とスクリプトの部分まで表示されてしまいます。 この消し方(『あかさたな』とだけ表示させたい)をご存知の方、 お教えください。 <? $dir = opendir("./aaa/bbb/ccc"); $latestfile = 0; while ($fnm = readdir($dir)) { if($fnm == "." || $fnm == "..") continue; $ftime = filectime("./aaa/bbb/ccc/$fnm"); $nowdate =strtotime(date("Y-m-d")); if(strtotime($nowdate) - $ftime <= 7*24*60*60) { printf("<FONT size="2"><B>あかさたな</B></FONT>"); break; } else { printf(""); break; } } ?>

    • ベストアンサー
    • PHP
  • printfで表示させるのは一度にしたい

    QNo.2814162で質問させていただいた者です。 下記のスクリプトで./tttディレクトリに5日以内に作成されたファイルがあれば"ABCDEFGHI"と表示させようと思っております。 (5日以内に作成されたファイルが無ければ何も表示しない) しかし、./tttディレクトリにマッチしたファイルの数だけ "ABCDEFGHI"が表示されてしまいます。 もしマッチしたファイルが合った場合、 一度だけ"ABCDEFGHI"と表示させるようにするにはどうしたらよいでしょうか? <? $dir = opendir("./ttt"); $latestfile = 0; while ($fnm = readdir($dir)) { if($fnm == "." || $fnm == "..") continue; $ftime = filectime("./ttt/$fnm"); $nowdate =strtotime(date("Y-m-d")); if(strtotime($nowdate) - $ftime <= 5*24*60*60) { printf("ABCDEFGHI"); } else { printf(""); } } ?>

    • ベストアンサー
    • PHP
  • 複数あるファイルの中から同じ文字列を含むファイルのみを選別させて開くには

    下記の通り同じフォルダーの中にある複数あるファイルを全部開くマクロはわかるのですが同じ文字列を含むファイルのみを自動選別させて開くにはどうすればいいのでしょうか? 具体的には"AAA-1" "AAA-2"のように"AAA-"を含む文字列のあるファイルは開きBBB-1"や"CCC-2"等文字列の含まないファイルは開かないようにしたいのですが。。アドバイスよろしくお願いいたします。 CSVFile = CurDir() FileName$ = Dir( CSVFile & "\*.csv", vbNormal) Do While FileName$ <> "" Workbooks.Open Filename:=FileName$ ・ ・ loop

専門家に質問してみよう