サーバーの画像キャッシュファイル自動削除について

このQ&Aのポイント
  • サーバーの画像キャッシュファイルが溜まり、容量を圧迫していませんか?キャッシュ削除の方法をご紹介します。
  • 画像キャッシュファイルの自動削除方法を教えていただけないでしょうか?容量の圧迫を防ぐために対策が必要です。
  • Yahoo!APIのサンプルを使用して画像検索のサービスを作成しましたが、画像のキャッシュファイルが増え続けています。キャッシュ削除の方法を教えてください。
回答を見る
  • ベストアンサー

サーバーの画像キャッシュファイル自動削除について

こちらのサイトで見つけたYahoo!APIのサンプルを使って画像検索のサービスを作ってみたのですが、 1つ問題があり検索されるごとに画像のキャッシュファイルがたまっていき、 レンタルサーバーの容量を圧迫していきます。 http://phpspot.net/php/pgPHP%E3%81%A7Yahoo!API%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB.html ↑のサイトのyapi.zip内のimage.phpのものです。 このimage.phpの38行目には「1h キャッシュ有効」と記載してあったのですが、 実際は1時間以降経ってもキャッシュが消える気配はありません。 (もしかしたら1時間以内に同一クエリを投げられた場合はAPIを叩きにいかないという意味なのかもしれませんが) そこで一定時間が経過したらcacheフォルダに溜まっていくファイルを削除したいのですが、 ソースコードの書き換え、またはcacheフォルダ内の画像をワンボタンで削除できる方法を教えていただければ幸いです。 FTPからcacheフォルダを一度削除し再作成する方法だと手間が多いので・・・ よろしくお願いいたします!

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

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

  • ベストアンサー
  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.3

視覚用ファイルです。 といってもフォーム化しただけですが。 <html> <head> <title>Yahoo!APIキャッシュファイル削除スクリプト</title> </head> <body> <?php if($_GET["act"] == "submit"){ $cachefld = "./cache"; // 調査するフォルダ $targetTime = 1; // 削除対象の基準タイム(時間) if($handle = opendir("$cachefld")){ $time = time() - $targetTime * 3600; $cnt = 0; while(false !== ($itemName = readdir($handle))){ if($itemName != "." && $itemName != ".."){ if(filemtime("$cachefld/$itemName") < $time){ unlink("$cachefld/$itemName"); $cnt++; } } } closedir($handle); if($cnt > 0){ echo $cnt."ファイルを削除しました。"; } else{ echo "削除対象ファイルはありませんでした。"; } } else{ echo "キャッシュフォルダの読み込みに失敗しました。"; } } else{ ?><form action="<? echo $_SERVER["PHP_SELF"]; ?>" method="get"> <input type="hidden" name="act" value="submit"> <input type="submit" value="キャッシュ削除"> </form> <? } ?></body> </html>

raice2217
質問者

お礼

ありがとうございます! まさにこれが欲しかった内容になります!!

その他の回答 (2)

  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.2

提示したスクリプトを保存して、お気に入りにいれておけば、 お気に入りからアクセスするだけで削除されます。 フォーム経由でアクセスするよりも簡単だし、他人がアクセスすることも ないので、便利だと思いますが、いかがでしょう? どうしても必要だということならフォーム化しますが。 Cronが使えなくても自動が楽でしょうから、勝手にやらせるなら、 検索時に、キャッシュが有効な時は、APIへのアクセスがなく、 負荷が軽減されている時なので、そこで処理をさせるということもできます。 念のため、多くのアクセスがない様、フラグのフォルダを作って、 頻繁にキャッシュの削除がされないようにします。 cacheフォルダがある同階層のディレクトリに cacheflgfldをパーミッションを777で生成して下さい。 yimg.php の36行目から47行目を以下に書き換えます。 #書き換えた行は//でコメント化しています。 //$cachename = "cache/img".md5($query.$start); $cachefld = "cache"; // キャッシュフォルダ $cachename = $cachename."/img".md5($query.$start); $targetTime = 3600; // 削除対象の基準タイム(秒) $cachedelflgfld = "cacheflgfld"; //if (file_exists($cachename) && time () < (filemtime($cachename)+3600)) { // 1h キャッシュ有効 if (file_exists($cachename) && time () < (filemtime($cachename)+$targetTime)) { // 1h キャッシュ有効 // キャッシュの無効ファイルを削除 if(time() > @filemtime($cachedelflgfld) + $targetTime){ if($handle = opendir("$cachefld")){ $time = time() - $targetTime * 3600; while(false !== ($itemName = readdir($handle))){ if($itemName != "." && $itemName != ".."){ if(filemtime("$cachefld/$itemName") < $time){ unlink("$cachefld/$itemName"); } } } } closedir($handle); mrdir($cachedelflgfld); } $xml_str = join("",file($cachename)); } else if ($query != "") { $xml_str = join("",file("$serv?query=$query_e&appid=$appid&adult_ok=$adult_ok&results=$results_count&start=$start")); $fp = fopen($cachename,"w"); fputs($fp,$xml_str); fclose($fp); } else { $xml_str = ""; } 使うなら未テストなので、正常に稼動するかテストして下さい。

raice2217
質問者

補足

ご回答ありがとうございます。 こちらの方法を試してみたかったのですが、 cacheフォルダを削除した直後にcacheflgfldのフォルダを作りにいこうとしたところ アクセスが多くファイルがかなり溜まっておりcacheフォルダを開くことが出来ませんでした。 出来ましたら最初にご教授いただきました削除ページのフォーム化をいただけると幸いです。 最初の削除ページアクセスでもファイル削除は行えたのですが、 cron用に作られたというところもあり 削除実行を視覚的に確認したいのと、実行結果の文言表示もあると幸いです。 よろしくお願いいたします。

  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.1

キャッシュの有効時間は、キャッシュファイルを使うか、 APIから情報を得るかの判定で使われているようで、 削除などは、独自でする必要がありますね。 以下は、指定したタイムを越えているファイルを削除するものです。 <?php $cachefld = "./cache"; // 調査するフォルダ $targetTime = 1; // 削除対象の基準タイム(時間) if($handle = opendir("$cachefld")){ $time = time() - $targetTime * 3600; while(false !== ($itemName = readdir($handle))){ if($itemName != "." && $itemName != ".."){ if(filemtime("$cachefld/$itemName") < $time){ unlink("$cachefld/$itemName"); } } } } closedir($handle); これをファイル保存して、Cronなどで定期実行してあげれば 期間を超過したキャッシュファイルは自動的に削除されます。 くれぐれも「調査するフォルダ」へのパス指定で間違いがありませんように。 キャッシュフォルダには、フォルダは含まれないようなので、 再帰的な処理などは入れていません。 公開フォルダに、このファイルを入れると好ましくないので、 できれば非公開フォルダに保存するほうが良いです。 どうしても公開フォルダに入れる必要があれば、 誰にも想像が付かないようなファイル名に保存すると良いです。 とりあえず、自身以外の方が実行できない環境を。ということで。

raice2217
質問者

お礼

ご回答ありがとうございます。 やはり私のキャッシュに対する認識の違いがあったようですね。 ご提示いただいたファイル削除のphpですが、 残念ながら自分が使っているレンタルサーバーだとCronが使えません。 出来ましたらsubmitボタン押下で削除が行えるページ構成になっていると助かります。 要望が多く申し訳ございません。

関連するQ&A

  • Yahoo画像検索API時のキャッシュ回避方法

    http://phpspot.net/php/pgPHP%E3%81%A7Yahoo!API%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB.html 上記URLに掲載されているAPIサンプル(yapi.zip)を使っているのですが、 cache ディレクトリに検索されたファイルが蓄積されサーバー容量を圧迫して困っています。 そこで、このcache機能をオフにしたいのですが、 zipファイル内のweb.phpのどの部分を修正すればよいのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • キャッシュファイルの削除

    グーグルデスクトップで検索するとWebした時のキャッシュファイルが大変多数あります。インターネットオプションからクッキー、ファイル、履歴、を削除しても残っています。どのようにしたら消すことが出来るのでしょうか?アダルトサイトの一部が残るのです。他のものは残らないのです。宜しくお願いいたします。

  • Javaのキャッシュの削除

    次のオラクル社サイトを参考に、Javaのキャッシュの削除を実施しました。 http://www.java.com/ja/download/help/plugin_cache.xml ところが、次のフォルダ内(の幾つかのサブフォルダ内)で、消えないファイルが存在します。 C:\Documents and Settings\・・・\AppData\LocalLow\Sun\Java\Deployment\cache\6.0 なぜ消えないものがあるのでしょうか? 私は、cacheフォルダ内(ならびにそのサブフォルダ内)の全てのファイルが削除されると思っていたのですが、そういう訳ではないのでしょうか? 【備考】 なお、当該キャッシュクリア操作は、下記の質問No.8276312に関連して実施しました。 http://okwave.jp/qa/q8276312.html キャッシュ削除実施前、下記(1)フォルダ内に(2)と(3)のファイルがありました。 削除実施後、(3)は無くなったものの(2)は残存していました。 (1)[フォルダ]C:\Documents and Settings\ ・・・ \AppData\LocalLow\Sun\Java\Deployment\cache\6.0\11 (2)[ファイル]220d674b-342eb67c (サイズ32KB) (3)[ファイル]220d674b-342eb67c.idx (サイズ1KB) (上記(2)(3)とも、更新日時=作成日時=2013/06/23 19:55) 上記(1)の他のフォルダ内でも、残存ファイルがありました。

  • 画像ファイル自動削除

    あるフォルダ内に 同一日に画像データをアップロード。 違う日付で、画像アップロードすると以前の画像データが自動で削除されるには、 どのような方法・phpスクリプトにすればよいのでしょうか? 良い手法をご存知でしたら、教えてください。

    • ベストアンサー
    • PHP
  • 画像をアップロードしてもキャッシュを見に行ってしまう

    こんにちは。 画像をアップロードするプログラムを作っているのですが、アップロード したファイルの確認をした際、キャッシュを読み込んでしまい、古い画像 が表示されてしまいます。 ログを見るとかなり近い内容の質問がありましたが、プログラムの動きが 違うので改めて質問させて頂きます。 プログラムの構成は、a.phpから、temp1.htmlとtemp2.htmlを呼び出して 表示する仕組みです。 1)a.phpで入力フォームのタグを生成しtemp1.htmlをinclude。temp1.html  のpost先はa.php 2)a.phpは、temp1.htmlから受け取ったデータを元に、画像ファイルを  temp_updateフォルダにアップデートし、temp_update内の画像ファイル  を表示するタグを生成し、temp2.htmlをinclude。temp2.htmlのpost先は  a.php 3)temp2.htmlで確認した内容で問題が無ければa.phpでtemp_updateの画像を  updateフォルダにコピーし、処理完了。 4)temp2.htmlで確認した内容に修正が必要な場合は、入力内容を保持しつつ  入力フォームのタグを生成し、temp1.htmlをinclude。(1)に戻る) という流れになっています。 この2)の部分で、2回目の確認から、キャッシュが働いてしまい、古い画像 が表示されてしまいます。情報を更新するとtemp_updateフォルダの画像を 表示してくれますが、やはり、2)でアップロードしたデータを表示した瞬間 にtemp_updateフォルダの画像を表示するように出来ないでしょうか。 tem2.htmlのほうには、 <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Expires" content="0"> もしっかり入っています。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • ソフトウェアアップデートのキャッシュを削除したいんですが。。

    コントロールパネルのソフトウェアアップデートでアップデータをダウンロードしている最中にエラーになってしまって、再度試してみたんですがキャッシュの影響なのかうまくダウンロードがはじまりません。シャーロックで検索してみたら、システムフォルダ内のソフトウェアアップデートフォルダに見つかったのですが、薄い文字になっていて、直接フォルダを開いてみてもなぜかキャッシュのファイル?はありませんでした。このキャッシュを削除してしまいたいのですが、可能でしょうか。よかったらアドバイスよろしくおねがいします。

    • 締切済み
    • Mac
  • 検索エンジンのキャッシュ削除について

    ブログを閉鎖してから五日経つのですが、検索エンジンのキャッシュでは未だに表示されています。 グーグルやヤフーにはキャッシュ削除の申請をしたのですが、私が管理しているサイトではない為、キャッシュ削除は受け付けてもらえませんでした。 詳しい事を知らないのですが、検索エンジンのキャッシュというのは、時間の経過と共に削除される物なのでしょうか? その場合どれくらいの時間を擁する物なのでしょうか? 私的には、全て削除して閉鎖していて管理側ももう閲覧は出来ないと言いながらキャッシュでは普通に閲覧出来る状況がおかしいと思うのですが・・・。 検索エンジンのキャッシュに詳しい方、ご教授願います。

  • キャッシュ

    私の息子の友人が作成するWebサイトに通っている学校名や、本名、最寄り駅などを掲載してしまったとの事です。 私の息子の名前やYahoo!のIDなども掲載されたらしく、すぐに削除するように頼んだ所、削除されました。 しかし、Wayback Machine(http://www.archive.org/web/web.php)というサイトに、その友人のWebサイトのキャッシュが残っていた為に、Wayback Machineに対して削除申請をしました。 Wayback Machineの様なWebサイトのキャッシュを保存しているサイトは、Yahooなどの検索エンジンを除いて他にも存在するのでしょうか? また、URLも教えていただけると幸いです。 よろしくお願い致します。

  • 一時ファイルの削除

    IE8を使っていますが、インターネット一時ファイルを削除したく閲覧の履歴から インターネット一時ファイルの削除にチェックを入れ削除を行うのですが Temporary Internet Filesのフォルダ内は削除されておりません。 一時ファイルのフォルダ=Temporary Internet Filesで合っていますでしょうか? もうひとつ、黒猫の落とし物というファイルは見た動画をキャッシュから 取得しますが、この取得する動画ファイルはどのフォルダに入っているのでしょうか? すっきり!!デフラグというソフトを使い一時ファイルや、動画キャッシュは削除できたのですが かなり時間がかかってしまい不便です。 質問としては時間をあまりかけずに、 一時ファイル(Temporary Internet Files)や動画のキャッシュの削除の仕方を 教えていただきたいです。

  • I/Eのキャッシュが1026エラーで消せません…winfileでは該当ファイルが見えません

    ★WIN98環境でI/EのキャッシュフォルダであるTemporary Internet Filesのところの問題です。 エクスプローラでキャッシュファイル…クッキーやアクセスしたファイルとアクセスしたURLが表示されるところで、一部のファイルが消せません。 移動や削除しようとするとファイルシステムのエラー1026となります。 当然該当ファイルでの右クリックでリネームしようにも、クリックしてもリネーム機能は表示されません。 Winfileを起動させてみても、クッキーなどが見えるこのキャッシュファイルは 見えないのです。下部ディレクトリ(システムファイル)は見えます。 キャッシュ部分は表示しないので消しようがありません。 下部フォルダの中のJPG/GIFなどすべて消しても、キャッシュファイルではファイル名が表示されたままで、検索させると0ファイルなのにフォルダではしっかり表示されているのです。 該当ファイルをクリックさせて無理に動作せると、オンラインでは相手先URLにつながり画像が見えます。しかもその画像はキャッシュに反映しません。 I/EのフリーズとかハングアップがあるとそのときアクセスしていたURLでのファイルがゴミとなって消せなくなると聞いたことがあります。 この現象は以前にも起こったのですが、 そのときは何かの拍子に消えてくれました。 どういうわけで消えたか不明なので再現させられません。 100近くあるのでDOSでいちいち消してられないので、良い方法はありませんか?

専門家に質問してみよう