<th draggable='ju7z4xil'></th>

        文章熱詞:排隊叫号

        日期:2019-07-22 09:05 by 楊國偉 1183 1 收藏
        我要分享

        摘要:排隊叫号,經常看到吧。在肯德基,麥當勞點完餐後,到另外一處,看着上面的屏幕排隊拿餐;在去吃大餐,人很多的時候,是不是服務員在電腦上點幾下,給你個号碼,等下叫到你就可以進去吃飯啦;醫院預約挂号,叫号。。。這種排隊叫号已經很普遍的運用在我們的日常生活中。我們都知道這是一個隊列,先進先出的原理。其實你們都可以實現啦。

        下面給大家分享一個排隊叫号:在同一時刻,僅允許隊列的前十進入相關操作,而其他的用戶隻能等待前面的人操作完成後才能進行訪問。

        <?php
            function mysession_open($save_path,$sesssion_name){
                global $sesssion_save_path;   //定義session的存儲位置
                $sesssion_save_path = "你要存儲的session地址";
                return true;
            }
            function mysession_close(){
                return true;
            }
            function mysession_read($key) {
                global $sesssion_save_path;
                global $online;  //全局變量,用于存取隊列前面的人數
                $online = 0;  //初始化
                $dir = opendir($sesssion_save_path); //讀取文件夾,獲取文件夾數
                while ($file = readdir($dir)) {
                    if($file == ".." || $file ==".") {
                        continue;
                    }
                    if(file_exists($sesssion_save_path.$key){  //如果當前session文件夾已經創建
                        $mytime = fileatime($sesssion_save_path.$key);
                        if(fileatime($sesssion_save_path.$file) < $mytime){ //計算隊列前面人數的數目
                            $online++;
                        }
                    }
                    else{ //如果當前session文件沒有創建
                        $online++;//計算隊列中的人數
                    }
                }
                if(!file_exists($sesssion_save_path.$key)){ //如果文件不存在将當前數加1
                    $online++;
                }
                return true;
            }
            function mysession_write($key,$data){
                global $sesssion_save_path;
                $fileame = $sesssion_save_path.$key;
                if(!file_exists($fileame)) {
                    $fp = fopen($fileame, "w");//文件不存在則創建
                    fputs($fp,"");
                    fclose($fp);
                }
            }
            function mysession_destory($key) {
                global $sesssion_save_path;
                $fileame = $sesssion_save_path.$key;
                if(file_exists($fileame)){
                    unlink($fileame);
                }
                return true;
            }
            function mysession_gc($expiry_time) {  //删除所有過期文件
                global $sesssion_save_path;
                $dir = opendir($sesssion_save_path);
                while ($file = readdir($dir)) {
                    # code...
                    if($file == ".." || $file == "."){
                        continue;
                    }
                    if(fileatime($sesssion_save_path.$file) <= time() - $expiry_time){
                        unlink($sesssion_save_path.$file);
                    }
                }
                return true;
            }
            //設置用戶自定義Session存儲
            session_set_save_handler(mysession_open, mysession_close, mysession_read, mysession_write, mysession_destory, mysession_gc);
            //判斷隊列前面的人數并進行查詢
            session_start();
            global $online;
            echo $online;
            if($online <= 10){   //如果隊列在前十名,則進行操作
                //......
                //......
                //......
                //......
                //......
                session_destroy();
            }

        以上代碼通過對Session存取方式的自定義,将SessionID以文件名的方式存入了一個文件夾中。每次打開頁面時,都要通過當前文件夾中文件的數量判斷當前用戶所在的位置。如果位置在前十名,則進行業務的相關操作并删除Session文件。這樣做,能夠保證數據庫在大規模的訪問下的穩定性。

        上一篇:php+js實現極驗,拖動滑塊驗證碼

        下一篇:php使用百度API實現人臉識别


        評論