phpでファイルが削除できない

このQ&Aのポイント
  • phpで作成したtime.phpを使用して、ファイルの削除を試みましたが、unlink()関数がPermission deniedのエラーを出し、削除できませんでした。
  • time.phpの中で、ファイルの更新時間と現在の時刻の差を計算し、経過時間を表示しています。
  • 指定した経過時間が24時間を超えていた場合に、unlink()関数を使用してファイルを削除するようにしています。
回答を見る
  • ベストアンサー

phpでファイルが削除できない

こんにちは。 ファイル名の書かれたdir.txtを開いて、その中から1日以上経過したファイルを削除するtime.phpを作成しようと思っています。 実行してみると、24時間経過したファイルがあっても 「Warning: unlink() [function.unlink]: Permission denied in C:\Program Files\xampp\htdocs\test\time.php on line 33」 というエラーがでて削除できない 実行結果にprintするように指定していない$imaの数値「1128673152」が表示される。 のですが、どこに間違いがあるのでしょうか? time.phpの内容 ---------------------------------------------------------------------- <html> <body> <?php // ファイルを読み込み専用でオープンする $fp = fopen('dir.txt', 'r'); // 終端に達するまでループ while (!feof($fp)) { // ファイルから一行読み込む $line = fgets($fp); $line = rtrim($line); // ファイルの更新時間を調べる $kousin = filemtime("$line"); // 今の時刻 $ima = time(); // 経過時間を計算する $keika = $ima - $kousin; // 出力する print $line; print "<br>\n"; print $ima; print "<br>\n"; print $kousin; print "<br>\n"; print $keika; print "<br>\n"; clearstatcache(); if ( $keika > 86400 ) { unlink( "$file" ); } } // ファイルをクローズする fclose($fp); ?> </body> </html> ----------------------------------------------------------------------

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

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

  • ベストアンサー
  • kuny2005
  • ベストアンサー率67% (21/31)
回答No.2

こんばんわ。 以下の2点で解決しませんでしょうか? 1・「$file」にきちんとスクリプトからファイルへのパスが書かれているか。 2・消したいファイルが入っているディレクトリのパーミッションは適切か。

その他の回答 (1)

  • fire--
  • ベストアンサー率49% (146/293)
回答No.1

ケアレスミスでは? unlink("$file")とありますが、 上で読んで$lineに入れた後、$fileには代入してない ようです。 読んだ後にchopする必要もあるかもしれませんね。 あと、print $ima;も入ってますね。

関連するQ&A

  • 古くなったファイルを削除するには?

    あるファイルを読み込んで、その中に書かれたファイル名の中で10日以上、経過したファイルを削除するphpを作ろうとしています。 index.htmlまで削除してしまうとフォルダの中が他人に除かれてしまうおそれがあるので、index.htmlは10日以上経過してもそのまま残しておきたいと思っています。 初心者なりにいろいろな本やphpの礼を参考にしながら下記のphpを作ってみました。 試してみるとindex.htmlまだ削除されていました・・・・ どこにミスがあったのでしょうか? 教えて頂ければ幸いです。 ---------------------------------------------------------------------- // ファイルを読み込み専用でオープンする $fp = fopen('dir.txt', 'r'); // 終端に達するまでループ while (!feof($fp)) { // ファイルから一行読み込む $line = fgets($fp); $line = rtrim($line); // ファイルの更新時間を調べる $kousin = filemtime("$line"); // 今の時刻 $ima = time(); // 経過時間を計算する $keika = $ima - $kousin; // 出力する // print $line; // print "<br>\n"; // print $kousin; // print "<br>\n"; // print $keika; // print "<br>\n"; clearstatcache(); if ( $keika > 864000 && $line != index.html ) { @unlink( "$line" ); } } // ファイルをクローズする fclose($fp);

    • ベストアンサー
    • PHP
  • fgetsの使い方について

    こんばんわ。phpでラジオボタンを使用して投票フォームを作っています。 投票した値をログファイルに書き込んで4項目をカウントできるように格納したいのですが、エラーも出ずにスルーして原因がわからず困っています。 イメージでは ログファイル↓ 24 もちろん 11 するかも 5  わからない 12 ない 問題のソースは以下の通りです。 $write = "$radiobutton"."\n"; $fp = fopen("../php/test1.txt","a+"); $line1=fgets($fp); $line2=fgets($fp); $line3=fgets($fp); $line4=fgets($fp); fputs($fp,$write); fclose($fp); print "fgets1回目=".$line1."<br>\n"; print "fgets2回目=".$line2."<br><br>\n"; print "fgets3回目=".$line3."<br><br><br>\n"; print "fgets4回目=".$line4."<br><br><br><br>\n"; わかる方いましたらご教授お願いします。

    • ベストアンサー
    • PHP
  • スマホ用PHP掲示板

    PHPで掲示板を簡易的に作ったのですが スマートフォン(iPhone)にも対応したく思います。 端末用にコーティングするにはどのような記述をしたら良いでしょうか。 【ソース】 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ <html> <head><title>TEST</title></head> <body> <p>掲示板</p> <form method="POST" action="<?php print($_SERVER['PHP_SELF']) ?>"> <input type="text" name="personal_name"><br><br> <textarea name="contents" rows="8" cols="40"> </textarea><br><br> <input type="submit" name="btn1" value="投稿する"> </form> <?php if($_SERVER["REQUEST_METHOD"] == "POST"){ writeData(); } readData(); function readData(){ $keijban_file = 'keijiban.txt'; $fp = fopen($keijban_file, 'rb'); if ($fp){ if (flock($fp, LOCK_SH)){ while (!feof($fp)) { $buffer = fgets($fp); print($buffer); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp); } function writeData(){ $personal_name = $_POST['personal_name']; $contents = $_POST['contents']; $contents = nl2br($contents); $data = "<hr>¥r¥n"; $data = $data."<p>投稿者:".$personal_name."</p>¥r¥n"; $data = $data."<p>内容:</p>¥r¥n"; $data = $data."<p>".$contents."</p>¥r¥n"; $keijban_file = 'keijiban.txt'; $fp = fopen($keijban_file, 'ab'); if ($fp){ if (flock($fp, LOCK_EX)){ if (fwrite($fp, $data) === FALSE){ print('ファイル書き込みに失敗しました'); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp); } ?> </body> </html> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ご教示の程宜しくお願い致します。

    • ベストアンサー
    • PHP
  • TSVファイルを読み込んでCSV形式に変換したい

    PHP4でTSVファイルを読み込んでCSVファイルに変換しようとしています。下記のようにしましたがうまくいきません。 どこがおかしいでしょうか? $file="sample.txt"; // 変換対象ファイル $contents =file_get_contents($file); $contents =str_replace("\t", ",", $contents); $fp = fopen ($contents, "r"); while(($line= fgetcsv($fp,1024,","))) { print "line= ".$line[0]."<br>"; print "line= ".$line[1]."<br>"; } よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPのファイル操作

    テキストボックスの値をPOSTで送信し、日時とユーザが入力した値を1行ずつファイル(review.txt)に保存し、ページ下部にファイル内容を1行ずつ表示するプログラムを作成しましたが、ブラウザに発言履歴が残りません。どの部分を修正すればいいですか? <?php //ブラウザに履歴がのこらないです $filename = './review.txt'; $comment = ''; $date = date('m/d H:i:s'); if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['comment']) === TRUE) { $comment = $_POST['comment']; } if (($fp = fopen($filename, 'a')) !== FALSE) { $result = fwrite($fp, $comment . '-' . $date . "\n"); if ($result === FALSE) { print 'ファイル書き込み失敗: ' . $filename; } fclose($fp); } } $work = []; if (is_readable($filename) === TRUE) { print "\n"; if(($fp=fopen($filename,'a')) !== FALSE) { print "\n";} while(($tmp = fgets($fp)) !==FALSE) { print "\n"; $work[] = htmlspecialchars($tmp,ENT_QUOTES,'UTF-8'); } fclose($fp); } else { print "\n"; $work[] = 'ファイルがありません'; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <h1>ファイル操作</h1> <form method="post" > <label><p>発言:<input type="text" name="comment"><input type="submit" value="送信"></p></label> </form> <p>発言一覧</p> <?php foreach ($work as $value){?> <p><?php print $date; $value?></p> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPのファイル削除についての質問です。

    PHPについての質問です。 現在、自社サイトで使用している画像の管理画面を作っているのですが、 PHPを使って不要になった画像を削除する部分を作成しております。 しかし、まだ何分初心者なのでわからないところもあり質問させていただきました。 削除用のPHPファイルを作成しておりますが、動作すると以下のエラーが出てしまいます。 Fatal error: Cannot redeclare deletedata() (previously declared in ・・・・・・・・・/php/delete.php:5) in ・・・・・・・・・・・/php/delete.php on line 5 組んだプログラムに問題があると思いますが、この場合どのようにすればよろしいでしょうか。 分かる方アドバイスをお願いします。 <?php $no = 1; foreach(glob('../images/slider/*.jpg') as $val){ function deletedata($dir) { if($dirhandle = opendir($dir)) { while(false !==($val = readdir($dirhandle))) { if($val != "." && $val != "..") { unlink($dir.$val); } } closedir($dirhandle); } } } ?>

    • 締切済み
    • PHP
  • 無料ホームページの鯖でPHPでfwrite出来ない

    無料ホームページのサーバに"php"というフォルダをアップし、その中に"write.php", "text.txt","read.php"というファイルを作って実行させたのですが、 "write.php"で、 $file = "text.txt"; $fp = fopen($file, "w"); if ($fp == FALSE) { print "ファイルオープン失敗<br />"; } else { fwrite($fp, $text); fclose($fp); } を実行しても"text.txt"の内容が変わらない(空のまま)のですが、何がいけないのでしょうか? "text.php"のパーミッションは666で、"php"フォルダは707です。 考えられる原因をご教授下さい、お願いします。

    • 締切済み
    • PHP
  • phpでfopen()やfputs()が使えない

    CGIを使ってやりたいことがあり、PHPを独学で学び、レンタルサーバーで実験をしているのですが、fopen()やfputs()をつかうとエラーのようになります。 これがそれです。 http://pgc.sub.jp/form.php サーバーはlolipopというところを使っているのですが、こちらのほうが許可していないということでしょうか。 ソースは以下のようになります。 <html> <head> <title>実験掲示板</title> </head> <body> <h1>実験掲示板</h1> 書き込む内容を入力してください。<hr> <form name="form" action="./sample01.php" method="POST"> <input name="body" type="text" size="40"> <input type="submit" value="書込"><hr> </form> <?php $data = file("./data.txt"); for($i=0; $i<sizeof($data); $i++){ print "記事NO.${i}:${data[$i]}<br>\n<hr>"; } ?> </body> </html> <?php $body = $_REQUEST["body"]; $body = $body."\n"; ?><html> <head> <title>Sample01</title> </head> <body> <?php $fp = fopen("./data.txt","a"); fputs($fp,$body); fclose($fp); echo "書き込み完了<br>", "<a href=\"./form.php\">戻る</a>"; ?> </body> </html> プラス空のdata.txtファイル また、大学のPCを使用しているのですが、 http://localhost/ をすると 「Connection Failed」となってしまい、localhostでの実験ができません。これは大学側が禁止しているためでしょうか?研究室のものですので、IPアドレスはそれぞれに割り当てられているのですが。

    • ベストアンサー
    • PHP
  • phpでテキストファイルへ書き込み

    HTMLでのテキストエリアに記述された内容をPHPを利用して、テキストファイル化したいと考えています。 具体的には、画像上をクリックし、座標値(xとy)をテキストエリアに表示させます。 その表示された座標値をテキストファイルに保存したいと考えています。 以下がソースコードです。 ----- sumple.php ------------------------------ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <SCRIPT type="text/javascript"> function xyget(e){ var box = document.getElementById("xy"); box.value += e.clientX + "\n" + e.clientY + "\n"; } </SCRIPT> </head> <body> <br>画像上をクリック<br> <form name="picture"> <div><img src="sumple.jpg" onclick="xyget(event)" id="pic"></div> <b>座標値</b> <form action="sumple.php" method="POST"> <textarea name="xy" rows="5" cols="5"></textarea> <input type="submit" value="完了"> </form> <?php $content = $_POST['xy']; if ($content) { $fp = fopen('sumple.txt', 'w'); fputs($fp, $content); fclose($fp); print "書き込み完了しました。"; } ?> <br> </body> </html> ---------------------------------------------- テキストファイルはあらかじめ作成してあり、テキストエリアに座標値もちゃんと表示できています。 ですが、完了ボタンを押してもテキストファイルに書き込みがされず、困っています。 お願いします。

    • ベストアンサー
    • PHP
  • PHPで作る掲示板について

    これを実行するとページは表示されるのですが、名前や題名、本文に日本語を入力すると 例えば名前に「山田」と入れ送信すると投稿者のところに何も出ません どうすれば解決できますか?環境はWin7でサーバは用意されたものを使用しているので 設定等の必要はありません。 画像は上が送信前、下が送信後です <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • 締切済み
    • PHP

専門家に質問してみよう