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

问题描述 投票:0回答:1

当我运行我创建的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个演出空间。

php sql windows postgresql
1个回答
0
投票

随着你的线

include('./connect_local_pdo.php'); //Includes DB Connection Script

我假设它是localhost上的数据库。

数据库随着您的输入而增长。添加行需要空间。

© www.soinside.com 2019 - 2024. All rights reserved.