2016-09-19 9 views
1

30分ごとに1時間以上経過したファイルをサーバー上のフォルダでチェックしたいので、それを行うためにcronジョブを設定します。私はPHPにかなり新しいので、私は親/ターゲットディレクトリを削除しないソリューションを見つけるためにちょっとブラウズしなければなりませんでした。1時間未満のファイルを削除しないでください

<?php 
deleteContent("/var/www/html/downloads/"); 
function deleteContent($path){ 
    try{ 
    $iterator = new DirectoryIterator($path); 
    foreach ($iterator as $fileinfo) { 
     if($fileinfo->isDot())continue; 
     if($fileinfo->isDir()){ 
     if(deleteContent($fileinfo->getPathname())){ 
     if((time()-filectime($fileinfo->getPathname())) < 600) 
     { 
      @rmdir($fileinfo->getPathname()); 
     } 
     } 
    } 
     if($fileinfo->isFile()){ 
     if((time()-filectime($fileinfo->getPathname())) < 600) 
     { 
     @unlink($fileinfo->getPathname()); 
     } 
     } 
    } 
    } catch (Exception $e){ 
    // write log 
    return false; 
    } 
    return true; 
} 
?> 

if((time()-filectime($fileinfo->getPathname())) < 600)は私の時間の問題への解決策を見つけることの私のアプローチだったことに注意してください。

スクリプトは1時間未満のフォルダやファイルを削除してはいけませんので、私が今までに持っていた時間を差し引いて、ファイル/フォルダを最後に変更して600秒と比較しました10分)だけテスト目的のために。

悲しいことに、悲しいことに、悲しいことに、悲しいことに、スクリプトは作成された時点にかかわらずすべてのファイルを削除します。

私は何か間違っているのですか、誰かに別のアプローチがありますか?

おかげ

+0

time()とfilectimの値を出力するe($ fileinfo-> getPathname()関数を呼び出し、それらをチェックアウトします。 – Naga

答えて

1

時々より良いアプローチ基盤となるOSの機能を呼び出すされ

exec('find /var/www/html/downloads/ -type f -mmin +60 -exec rm {} \;'); 

のexec:指定したパス内のファイルを見つけ、CLIコマンド 検索を実行するためのhttp://php.net/manual/en/function.exec.php
PHP関数、ファイルの時間が60分を超えているf(ファイル)の場合、Linuxのremove(delete)であるexec(run)rm

+0

ありがとうございました!私はPHPを初めて使うのではなく、これをサーバーを使った私の最初のプロジェクトなのでubuntuにもやっています!私はコードを取得していないので、何がすべて何をしているのかに関する情報を提供していただけますか?ありがとう:) – userlip

+0

それは再帰的ですか?私の木はそうです: ターゲット - >フォルダXYZ - >ファイルXYZ 編集:フォルダはどうですか? – userlip

+0

を使って '-r'を再帰的に追加します。 '-type f'はフォルダを削除したい場合にのみファイルにマッチしますjsutはそれを削除します – nogad

関連する問題