当前位置: 首页 > 知识库问答 >
问题:

PHP 一段时间后自动删除上传的图片

印高阳
2023-03-14

我创建了一个应用程序来上传使用PHP,Javascript和WAMP服务器的图像。我需要在一段时间后自动删除上传的图像,比如X分钟。如何实现这一点?

谢谢...

共有2个答案

喻渊
2023-03-14

Cron作业是您需要的正确工具。windows中的Cron使用php有点难实现。如果您使用的是框架,那么很容易做到。但以下链接将帮助您实现目标。

如何使用PHP创建cron作业?

在PHP脚本上运行Cron作业,在Windows中localhost

农雅畅
2023-03-14

尝试以下解决方案:

    <?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;
        }

    ?>

这是粘合整个过程的Javascript...

    <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>
 类似资料:
  • 问题内容: 我想在7天后从我的MySQL数据库中删除一些消息。 我的消息表行具有以下格式:id | 留言| 日期 日期是标准格式的时间戳。2012-12-29 17:14:53 我当时以为MySQL事件将成为替代cron工作的方式。 我想对有经验的SQL人员来说,这是一个简单的问题,如何在下面的括号中编写删除消息部分的代码? 一个例子,将不胜感激,谢谢。 问题答案: 您可以尝试使用以下条件: 这样

  • 问题内容: 我已经在sql数据库上设置了临时用户帐户,该帐户存储了我的网站用户的用户名,密码和添加日期。 我最初打算以编程方式删除这些记录,但是现在我想知道sql server 2008是否具有内置功能,该功能允许在假设某天后自动删除记录。 这将解决用户在关闭其临时帐户后仍能够保持登录系统的问题 谢谢 问题答案: 您可能无需实际删除记录就可以得到所需的内容。您可以将计算列添加到表中以说明记录是否有

  • 在一个类中,在一个函数中,我创建了一个Tkinter画布。这个函数正在被另一个类调用,我希望Tkinter窗口弹出30秒,然后自动关闭。我有电话 但我犯了个错误 elf.tk.call('destroy',self.w)\u tkinter.TclError:无法调用“destroy”命令:应用程序已被销毁 那我怎么能让它自己关上呢?

  • 我正在windows环境下使用PHP7.2(与xampp一起安装)使用laravel 5.6。安装laravel后,“php artisan serve”命令将正常工作,但会自动删除server.php文件。

  • 本文向大家介绍PHP实现上传多图即时显示与即时删除的方法,包括了PHP实现上传多图即时显示与即时删除的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现上传多图即时显示与即时删除的方法。分享给大家供大家参考,具体如下: 就像这样的,每选择一个图片就会即时显示出来,附加到右边,也可以随意删除一个元素。 其实是,当type=file的input框框的onchange事件===》》》

  • 我正在使用AWS Amplify在我的项目中配置Appsync。在我的模式中。在graphql中,我有以下类型: Tweet是Post下的嵌套对象,它不是@model。 当我通过cli()上传到AWS时,它会从生成的架构上的中删除Tweet的字段。这是从AWS控制台生成的模式: 我已经搜索了Appsync留档,但是我找不到任何地方说我不能在对象类型上使用字段。 这有什么办法吗?如果可以,我希望避免