>> I'm reading in a 66MB file into php so I can parse it and load it into a
>> database. However, it is taking a long time for php to read the file.
>> So long that the script times out. I know about the
>> ini_set("max_execution_time", 120) or whatever length I want to set the
>> time out for the script, but my question is as follows.
>>
>> Is it possible to read in a file and at the same time echo out a status
>> of how far along the file has been read?
>>
>> The code I have right now is below. Just wondering if what I'm trying
>> to do is possible and how to do it.
>>
>> // set script timeout
>> ini_set("max_execution_time", 120);
>>
>> // import file name
>> $log_file_name = "access_log.1";
>> echo "Reading access log!<br/>";
>> if (!$ac_arr = file("./$log_file_name")) {
>> echo "Couldn't load access log!";
>> die;
>> }
>>
>> Thanks!
>
> Even if you get around the execution time the above code is going to use
> up 66megs of memory to store that file in $ac_arr.
>
> You'd be much better off doing something like:
>
> $fd = fopen("./$log_file_name", "r");
>
> while ( !feof($fd) ) {
> $buf = fread($fd, 32768);
> // process buffer here
> }
> fclose($fd);
>
> That will let you do your progress thing as well as not eat up so much
> memory. Play around with values of 32768 to see if smaller or larger
> makes any different on your system.
>
> Good luck!
Ahhh.. Okay that's very cool and I did not know that. I knew that it was
chewing up a lot of memory reading it all at once.
I guess the only thing I have to worry about now is if I do a read like that
will it truncate a whole line instead of getting the whole line? The reason
why I ask is that if possible I would rather have it read line by line for X
lines and then process that buffer then go and grab more lines until end of
file. Is that possible?