オートファイルを全部削除してください後x-時間
-
20-09-2019 - |
質問
いオートファイルを全部削除してください下のサブディレクトリの後にx-時間(せいた後24時間)を使用せずにcronjobコマンドからサーバーまたはpl.どのようにすることができますことだけでPHPコードだけのページをクリックせずに何かのコマンドで自動運行しています。
解決
私の最初の答えからの最後のコメントの応答。私は、コードサンプルを書くつもりですので、私が代わりにほかの別の答え1件のより多くのコメントを作成しました。
あなたは、コードを実装する必要がカスタム拡張子を持つファイルを削除するには
<?php
$path = dirname(__FILE__).'/files';
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ((time()-filectime($path.'/'.$file)) < 86400) { // 86400 = 60*60*24
if (preg_match('/\.txt$/i', $file)) {
unlink($path.'/'.$file);
}
}
}
}
?>
コメントの1.この例では、拡張/\.txt$/i
を持つファイルのみが削除されることを、意味正規表現txt
を、使用しています。 「$」記号の意味、そのファイル名が文字列で終了する必要がある「.TXT」。 「私は」を示すフラグは、その比較は大文字と小文字を区別しないでしょう。 するpreg_match()の関数の詳細ます。
あなたは使用することができますだけでなく strripos()でファイルを検索するために機能する特定の拡張子。ここでは、コードスニペットがあります:
<?php
$path = dirname(__FILE__).'/files';
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ((time()-filectime($path.'/'.$file)) < 86400) { // 86400 = 60*60*24
if (strripos($file, '.txt') !== false) {
unlink($path.'/'.$file);
}
}
}
}
?>
コメントの:この例では、より明白なようです。 strripos()
の結果は、2つの機能を組み合わせることで実現することができます:strrpos(strtolower($file), '.txt')
、しかし、私見、それは、より読みやすく、小さく作るためにあなたのコード内で以下の機能を使用するには良いルールです。 、strripos()関数(戻り値ブロック)のページに警告を注意深く読んでください。
のもう一つの重要なお知らせの:あなたはUNIXシステムを使用している場合は、削除したファイルがあるため、ファイルのパーミッションの失敗する可能性があります。あなたははchmod()の機能については、マニュアルを確認することができます。
幸運ます。
他のヒント
利用できるPHPのコア機能 filectime() や unlink() チェック時間のファイルの作成、削除、そのファイル/ファイルです。
編集できるようになります。コード例:
if ($handle = opendir('/path/to/files')) {
while (false !== ($file = readdir($handle))) {
if (filectime($file)< (time()-86400)) { // 86400 = 60*60*24
unlink($file);
}
}
}
さて、ここで私たちは、昔のXの数であるファイルを削除するPHPスクリプトを行きます。
<?
$days = 1;
$dir = dirname ( __FILE__ );
$nofiles = 0;
if ($handle = opendir($dir)) {
while (( $file = readdir($handle)) !== false ) {
if ( $file == '.' || $file == '..' || is_dir($dir.'/'.$file) ) {
continue;
}
if ((time() - filemtime($dir.'/'.$file)) > ($days *86400)) {
$nofiles++;
unlink($dir.'/'.$file);
}
}
closedir($handle);
echo "Total files deleted: $nofiles \n";
}
?>
さて、このコードを貼り付け、PHPファイルとして保存し、ファイルを削除したい場所からフォルダにアップロードします。あなたはこのPHPコードの先頭で見ることができます。
$days = 1;
あなたは2に設定した場合、その後2日間は削除されますよりも古いファイル例えば、日数を設定しています。基本的にはこれは、あなたがスクリプトを実行するときに何が起こるかである現在のディレクトリを取得し、ファイルエントリを読み込み、スキップ「」現在のディレクトリと、さらにチェックのために他のディレクトリが存在する場合、
if ( $file == '.' || $file == '..' || is_dir($dir.'/'.$file) ) {
continue;
}
ファイルのエントリがディレクトリでない場合、それは昔の数である場合は、それは、ファイル変更時(最終更新時刻)を取り出し、比較します
if ((time() - filemtime($dir.'/'.$file)) > ($days *86400)) {
$nofiles++;
unlink($dir.'/'.$file);
}
条件が真になった場合は、それはリンク解除()PHP関数の助けを借りてファイルを削除します。最後にディレクトリをクローズして終了します。私はまた、削除処理の最後に表示されます削除されたファイルの数を、カウントするカウンタを追加しました。だから、ファイルの削除を必要とし、それを実行したディレクトリ内のphpファイルを配置します。
うまくいけば、それが役立ちます。)
ここでは、GLOBを使用する別の例であり、それは任意のファイルを削除します。
$files = glob('path/to/your/files/*');
foreach($files as $file) { // iterate files
// if file creation time is more than 5 minutes
if ((time() - filectime($file)) > 3600) { // 86400 = 60*60*24
unlink($file);
}
}
か、特定のファイルを除外したい場合は、
$files = preg_grep('#\.txt#', glob('/path/to/your/files/*'), PREG_GREP_INVERT);
後を利用することにしたのだろうこれらの例は、ヒットのカップル問題:
- の比較演算子より大きいことが望な未満
- filemtimeを返します変更。filectimeの時ファイルのinodeデータを変更し、この場合、パーミッション、オーナー、グループ、またはその他のメタデータからのinodeが更新されることにより、予期せぬ結果
私の例で使用filemtime固定の比較として
<?php
$path = dirname(__FILE__).'/files';
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ((time()-filemtime($path.'/'.$file)) > 86400) { // 86400 = 60*60*24
if (preg_match('/\.txt$/i', $file)) {
unlink($path.'/'.$file);
}
}
}
}
?>
私はATコマンドシェルを使用し、それが
しかしcronジョブのようなものですPHPます:
exec("echo rm /somedir/somefile.ext|at now +24 hours");
function deleteCachedData($hours=24)
{
$files = glob(ROOTDIR.DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'*.txt');
foreach($files as $file) {
if(is_file($file) && (time() - filectime($file)) > $hours*3600) {
unlink($file);
}
}
}