Php 如何读取循环中停止的位置?
我确实有文本文件有500k的数据 我正在运行一个循环来存储一些信息。类似于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); 问题是当循环在中间停止时,我需要通过
$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