Php 如何读取循环中停止的位置?

Php 如何读取循环中停止的位置?,php,mysql,loops,Php,Mysql,Loops,我确实有文本文件有500k的数据 我正在运行一个循环来存储一些信息。类似于 $file = fopen("top-1-500000.txt", "r") or exit("Unable to open file!"); while(!feof($file)) { //some function mysql_query("INSERT INTO table (name) VALUES ('$value')"); } fclose($file); 问题是当循环在中间停止时,我需要通过

我确实有文本文件有500k的数据

我正在运行一个循环来存储一些信息。类似于

$file = fopen("top-1-500000.txt", "r") or exit("Unable to open file!");  
while(!feof($file)) { //some function
mysql_query("INSERT INTO table (name) VALUES ('$value')");
    }  fclose($file);

问题是当循环在中间停止时,我需要通过手动读取MySQL数据库来删除已经从文本文件读取的数据,以防止循环从文本文件的第一行再次读取。对于多个文件来说,这是一项巨大的工作。

如果您使用
file()
读取文件,您可以在循环中使用计数器来计算迭代次数,然后当您需要返回循环停止的位置时,使用该计数器

$file_array = file("top-1-500000.txt");
for($i=0;$i<count($file_array);$i++)
{
    // ...code here...
    mysql_query("INSERT INTO table (name) VALUES ('$value')");
}
$file_array=file(“top-1-500000.txt”);

对于($i=0;$i您正在逐行读取文件,因此

$line = fgets($handle);
将读取(您可以指定)

有一个名为的函数,您可以使用该函数导航内部文件指针并从该位置读取。 一种可能的解决方案是在数据库中保留读取行的数目,并且当(如果)循环在中间死亡时,可以使用<代码> $NUBLY行> 1024代码/代码>作为<代码> fSeCK()/<代码的偏移量>
然后继续阅读。

我假设“中途停止”是指脚本超时。您应该使用
设置时间限制来防止脚本超时(我假设您的服务器配置允许您这样做)。

读取大文件的另一种方法是使用MySQL功能

例如:

LOAD DATA INFILE 'top-1-500000.txt' INTO TABLE tbl_name
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES;

如何读取每行字符或每字符字符的文件?为什么在中间停止循环?是否有人手动终止脚本(类似于CTRL—C)?最好的猜测是您的内存或执行时间不足,无法工作,如果有换行符,它不会读取完整的1024个字符。脚本由外部终止。由于我使用API,因此存在限制。我已将时间限制设置为100000