Php 一段时间后自动删除上传的图像
我创建了一个应用程序,使用PHP、Javascript和WAMP服务器上传图像。我需要在一段时间后自动删除上传的图像,比如说X分钟。如何做到这一点Php 一段时间后自动删除上传的图像,php,file,upload,wamp,Php,File,Upload,Wamp,我创建了一个应用程序,使用PHP、Javascript和WAMP服务器上传图像。我需要在一段时间后自动删除上传的图像,比如说X分钟。如何做到这一点 谢谢…Cron作业是您需要的正确工具。windows中的Cron使用php实现起来有点困难。如果你正在使用一个框架,那么很容易做到。但以下链接将帮助您实现目标 尝试以下解决方案: <?php /** * FileName: ajax-processor.php */
谢谢…Cron作业是您需要的正确工具。windows中的Cron使用php实现起来有点困难。如果你正在使用一个框架,那么很容易做到。但以下链接将帮助您实现目标 尝试以下解决方案:
<?php
/**
* FileName: ajax-processor.php
*/
$uploadDir = __DIR__ . "/uploads"; // HERE: YOU SPECIFY THE PATH TO THE UPLOAD DIRECTORY
$action = isset($_POST['action']) ? htmlspecialchars(trim($_POST['action'])) : null;
$imageAge = isset($_POST['imageAge']) ? htmlspecialchars(trim($_POST['imageAge'])) : 24;
// IF AJAX TELLS US TO DELETE ALL IMAGES & GIVES US THE MAXIMUM AGE OF THE IMAGES TO BE DELETED
// WE NOW FIRE THE COMMANDS BELOW.
// NOTE THAT USING THE imageAge WE CAN DECIDE THE FILES THAT WOULD BE DELETED SINCE WE DON'T WANT ALL DELETED
// THE DEFAULT HERE WOULD BE 24 HOURS...
if($action=="delete" && $imageAge>0){
$deletionReport = removeImagesInFolder($uploadDir, $imageAge);
return json_encode($deletionReport);
}
function getImagesInFolder($dir_full_path){
$returnable = array();
$files_in_dir = scandir($dir_full_path);
$reg_fx = '/(\.png$)|(\.jpg$)|(\.jpeg$)|(\.tiff$)/';
foreach($files_in_dir as $key=>$val){
$temp_file_or_dir = $dir_full_path . DIRECTORY_SEPARATOR . $val;
if(is_file($temp_file_or_dir) && preg_match($reg_fx, $val) ){
$regx_dot_wateva = '/\.{2,4}$/';
$regx_dot = '/\./';
$regx_array = array($regx_dot_wateva, $regx_dot);
$replace_array = array("", "_");
$return_val = preg_replace($regx_array, $replace_array, $val);
$returnable[$return_val] = $temp_file_or_dir ;
}else if(is_dir($temp_file_or_dir) && !preg_match('/^\..*/', $val) ){
getImagesInFolder($temp_file_or_dir);
}
}
return $returnable;
}
function removeImagesInFolder($imgFolder, $imageAgeInHours=24){
//CHANGE FILE-PERMISSION ON THE IMAGE DIRECTORY SO YOU COULD WORK WITH IT.
chmod($imgFolder, 0755);
$arrImages = getImagesInFolder($imgFolder);
$statusReport = array();
foreach($arrImages as $imgKey=>$imageFile){
$imageAgeInSecs = $imageAgeInHours*60*60;
if (file_exists($imageFile)) {
$now = time();
$fileModTime = filemtime($imageFile);
$fileAge = ($now - $fileModTime);
if($fileAge >= $imageAgeInSecs){
/* BE CAREFUL: THE GIVEN FILE WOULD ACTUALLY BE DELETE!!! */
//HERE IS A LITTLE ADDITION FOR PERMISSION ISSUES
//NOTE THAT I DID NOT TEST THIS SINCE I AM NOT ON A WINDOWS SYSTEM & I DON'T USE WAMP... BUT I THINK THIS MAY DO THE TRICK
//CHANGE FILE-PERMISSION ON THE IMAGE FILE SO YOU COULD DELETE IT.
chmod($imageFile, 0755); //GIVES THE ADMINISTRATOR RIGHT TO DO EVERYTHING WITH THE FILE; BUT ALLOWS ONLY READING/EXECUTION FOR OTHER USERS.
if( unlink($imageFile) ) {
$statusReport[] = "Deleted " . $imageFile . ". This File is about " . ($fileAge / (24 * 60 * 60)) . " Day(s) Old.";
}
}
}
}
return $statusReport;
}
?>
您可以在服务器上设置cronjob方法,该方法将删除任何文件夹中的所有图像。您可以每N分钟运行一次cron作业,该作业将删除所有早于X分钟的文件(例如使用find&rm)。在这里,使用PHP来实现这一点毫无实际意义。他正在运行WAMP,这是一种Windows操作系统。所以他可能不知道你的意思。这就是cron的含义-一旦您知道它是什么,您就应该能够理解下一步需要做什么查找Windows任务计划程序
。创建一个PHP CLI脚本
来做你想做的事情,并根据你的意愿安排时间,或者你可以用一个简单的.bat
或.cmd
文件代替它。警告:取消链接(.):在C:\wamp\www\ImageUploadApp\ajax-processor.phpAm中被拒绝的权限得到这样的警告。我怎样才能克服这个问题呢?UNIX=CRON
-Windows=TaskScheduler
同样好,也许更好
<script type="text/javascript">
(function($) {
$(document).ready(function(){
var iInterval = setInterval(deleteImagesViaAjax, 1000*60+60); //DELETE IMAGES EVERY HOUR
function deleteImagesViaAjax(){
$.ajax({
url: "http://localhost/framework/ajax-processor.php",
dataType: "json",
cache: false,
type: "POST",
data: ({
action : 'delete',
imageAge : 24 //MAXIMUM AGE OF THE IMAGE TO DELETE IN HOURS - THIS MEANS ALL IMAGES UPLOADED ABOUT 24 HOURS AGO
}),
success: function (data, textStatus, jqXHR) {
console.log(data);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log('The following error occured: ' + textStatus, errorThrown);
},
complete: function (jqXHR, textStatus) {
}
});
}
});
})(jQuery);
</script>