影响本地系统存储的PHP脚本

时间:2018-08-30 13:15:11

标签: php sql windows postgresql

当我运行自己创建的PHP程序时,我的系统上发生了一个奇怪的问题。我从两个表中获取数据,并对表A和表B中的数据进行比较。如果该记录不在表A中,则将该记录写入表B。我发现该程序运行正常,但至少有一条记录必须首先在表B中。在我第一次成功运行后,表A中将有16000+条记录,现在表B中将有15000+条记录。我知道这将需要一些时间来处理。奇怪的是,我注意到程序运行时硬盘驱动器正在失去可用空间。我尝试手动运行垃圾回收。我还查看了会话文件的存储位置,只发现了一些很小的文件。我还尝试将会话文件的存储时间从1440秒调整为30秒。当我说我在“失去”可用空间时,有一些东西正在填满我的硬盘。我已经从6GB增加到5.75GB,如果我允许程序运行更长的时间,我只会损失更多的空间。我也尝试过只是重新启动系统,而我只能重新获得丢失的一小部分空间。在这一点上,我不确定该怎么做才能阻止这种情况的发生。以下是我的代码示例:

<?php

include('./connect_local_pdo.php'); //Includes DB Connection Script
ini_set('max_execution_time', 5400); //5400 seconds = 90 minutes
gc_disable();

try {


$tbl_a_data = $conn->prepare('SELECT col_a, col_b, col_c from table_a');
$tbl_a_data->execute();


$tbl_b_data = $conn->prepare('SELECT col_a, col_b, col_c from table_b');
$tbl_b_data->execute();
$tbl_b_array = $tbl_b_data->fetchAll(PDO::FETCH_ASSOC);


while($tbl_a_array = $tbl_a_data->fetch(PDO::FETCH_ASSOC)){


    foreach ($tbl_b_array as $tbl_b_array2){

        if ($tbl_a_array['col_a'] !== $tbl_b_array2['col_a']){

            $stmt = $conn->prepare("INSERT INTO table_b 
                                              (col_a, col_b, col_c)
                                              VALUES 
                                              (:col_a, :col_b, :col_c)");

            $stmt->bindParam(':col_a', $tbl_a_array['col_a']);
            $stmt->bindParam(':col_b', $tbl_a_array['col_b']);
            $stmt->bindParam(':col_c', $tbl_a_array['col_c']);


            $stmt->execute();

        } else {

                $stmt = $conn->prepare("update table_b
                                              set 
                                                col_b = table_a.col_b,
                                                col_c = table_a.col_c                                                    
                                            from table_a
                                            where table_b.col_a = table_a.col_a ");

                $stmt -> execute();


            }
        }
    }

gc_collect_cycles();
gc_mem_caches();
clearstatcache();


} catch (PDOException $a) {

   echo $a->getMessage();//Remove or change message in production code

}

在此方面提供的任何帮助将不胜感激!截至本文发布之时,我已经失去了2个运行该程序的空间。

1 个答案:

答案 0 :(得分:0)

与您一行

server <- function(input, output) {
  output$placeholder <- renderUI(selectInput("dat", "Select Data:",
                                             choices = c("mtcars", "ChickWeight")))
  outputOptions(output, "placeholder", suspendWhenHidden=FALSE)
  output$out <- renderPrint(summary(get(req(input$dat))))
}

我认为它是本地主机上的数据库。

数据库随着您的条目的增长而增长。添加行将需要空间。