一尘不染

读取巨大的文本文件并将每一行存储在数据库中

mysql

我编写了一个PHP脚本,该脚本贯穿文本文件(实际上是imdb的“列表”文件)并将其存储在本地MySQL数据库中。

public static function updateMovies( $list ) {
    $offset = 15;               // movies.list start with movie names at line 16
    $handle = fopen($list, "r") or die("Couldn't get handle");
    if ($handle) {
        while (!feof($handle)) {
            $buffer = fgets($handle);
            if($offset!=0)
                $offset--;
            else
                if($buffer[0] != '"'){
                    $title = trim( substr( $buffer, 0, strpos( $buffer, '(' ) ) );
                    $year = intval(trim( substr( $buffer, strpos( $buffer,'(' )+1, 4 ) ));
                    Movie::create( $title, $year );
                }
        }
        fclose($handle);
    }
}

由于这些列表文件最大为200MB,因此需要花费大量时间。默认情况下,PHP MAX_EXECUTION_TIME设置为30秒。

我将此值设置为300只是为了尝试是否可行。例如,我的“
movies.list”文件约为80MB,并使用此脚本运行了300秒,在数据库中创建了约25000行。这行不通,因为我什至没有看过以“ B”开头的电影。

我知道我可以将其设置MAX_EXECUTION_TIME为0(无限制),但是将来我不希望该数据库位于我的本地主机上。MAX_EXECUTION_TIME据我所知,我希望在我的Web服务器上将它设置为90,并将Web服务器的主机设置为90。

有什么想法您将如何处理?


阅读 248

收藏
2020-05-17

共1个答案

一尘不染

您可以:使用set_time_limit(sec)
或(更好)从命令行通过cron条目运行脚本。这样,您将避免许多其他非PHP相关的超时问题。

2020-05-17