PHP Classes
elePHPant
Icontem

File: file_text_example.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Schroetter Christian  >  Text File  >  file_text_example.php  >  Download  
File: file_text_example.php
Role: Example script
Content type: text/plain
Description: Sample file
Class: Text File
Read text files one line at a time
Author: By
Last change: Add new case to test memory and time usage for the class "TextFileReader" (found on PHP Classes)
Date: 1 year ago
Size: 4,386 bytes
 

Contents

Class file image Download
<?php
    define
('IN_SOFT', true);
   
define('NOTCONNECTED', true);

   
define('CODE_CREATEUR', 27);

    include(
'./text_file.class.php');

   
set_time_limit(0);
/*
    $file = fopen('./allCountries.txt', 'r');
    $res = fread($file, 1024 * 1024 * 50);
    fclose($file);

    $file = fopen('./piece_allCountries.txt', 'w');
    fwrite($file, $res);
    fclose($file);
*/

    // piece_allCountries.txt is build on the 1st 50 MO of allCountries.txt file
    // @see: http://download.geonames.org/export/dump/

   
if(in_array('-1', $argv))
    {
       
// load the file onto memory
       
$aTheLines = file('./piece_allCountries.txt');
       
var_dump(memory_get_usage() / (1024 * 1024)); // -> float(147.34832763672)(MO)

       
$start = microtime(true);
       
// access all the line(s) (Fastest but not memory optimized, for lazy (or small file))
       
foreach($aTheLines as $line)
        {
           
// do something with line...

            // var_dump(memory_get_usage() / (1024 * 1024)); // -> float(147.34832763672)(MO)
            // never decrease neither increase
       
}
        echo
'All lines read in: ' . (microtime(true) - $start) . "\n";
       
var_dump(memory_get_usage() / (1024 * 1024)); // -> float(147.34832763672)(MO)
   
}
    else if(
in_array('-2', $argv))
    {
       
// load the file onto memory
       
$aTheLines = file('./piece_allCountries.txt');
       
var_dump(memory_get_usage() / (1024 * 1024)); // -> float(147.34832763672)(MO)

       
$start = microtime(true);
       
// access all the line(s) (memory optimized but slowest)
       
for($i = 0 ; $i < count($aTheLines) ; $i++)
        {
           
// do something with line -> $aTheLines[$i]

            // then we remove the line we juste used to release some memory
           
unset($aTheLines[$i]);

           
// var_dump(memory_get_usage() / (1024 * 1024)); // -> float(147.34832763672) (MO)
            // slightly decrease
       
}
        echo
'All lines read in: ' . (microtime(true) - $start) . "\n";

       
var_dump(memory_get_usage() / (1024 * 1024)); // -> float(72.710220336914)(MO)
   
}
    else if(
in_array('-3', $argv))
    {
       
// $file_path = './allCountries.txt';
       
$file_path = './piece_allCountries.txt';

       
$txtFile = new CTextFile();
        if(!
$txtFile->Open($file_path))
        {
            echo
'Impossible d\'ouvrir le fichier: ' . $file_path . "\n";
            return
false;
        }
       
var_dump(memory_get_usage() / (1024 * 1024)); // -> < 1MO

       
$txtFile->SetBufferLength(10 * 1024); // 10Ko

        // $txtFile->SetLineFeed("\r"); // under Mc -> eq: Set MacintoshLineFeed
        // $txtFile->SetLineFeed("\r\n"); // under windows -> eq: SetWindowsLineFeed
       
$txtFile->SetLineFeed("\n"); // under linux -> eq: SetLinuxLineFeed

       
$line = 1;
       
$start = microtime(true);
        while(
$txtFile->Eof() === false)
        {
           
$txtFile->ReadLine();
           
// echo $txtFile->ReadLine() . "\n";

           
if( ($line % 100000) == 0) // display the memory usage every 100000 lines
           
{
                echo
"\t";
               
var_dump(memory_get_usage() / (1024 * 1024)); // -> < 1MO
           
}

           
$line++;
        }
        echo
'All lines read in: ' . (microtime(true) - $start) . "\n";
       
var_dump(memory_get_usage() / (1024 * 1024)); // -> < 1MO

       
$txtFile->Close();
    }
    else if(
in_array('-4', $argv))
    {
       
// test with a custom line separator
       
$file_path = './text_file.class.php';

       
$txtFile = new CTextFile();
        if(!
$txtFile->Open($file_path))
        {
            echo
'Impossible d\'ouvrir le fichier: ' . $file_path . "\n";
            return
false;
        }

       
$txtFile->SetLineFeed('qwerty'); // fake line feed -> The whole file should be read...
       
$txtFile->SetBufferLength(512); // 10 chars

       
$line = 1;
       
$start = microtime(true);
        while(
$txtFile->Eof() === false)
        {
            echo
$txtFile->ReadLine() . "\n";
           
$line++;
        }
        echo
'All lines read in: ' . (microtime(true) - $start) . "\n";
       
var_dump(memory_get_usage() / (1024 * 1024)); // -> < 1MO

       
$txtFile->Close();
    }
    else if(
in_array('-5', $argv))
    {
        include(
'./textfilereader.class.php'); // By Hamid Ghorashi

        // $file_path = './allCountries.txt';
       
$file_path = './piece_allCountries.txt';
       
var_dump(memory_get_usage() / (1024 * 1024)); // -> < 1MO

       
$test = new TextFileReader($file_path);

       
$line = 1;
       
$start = microtime(true);
       
$res = $test->readLine();
        while(
$res != NULL)
        {
            if( (
$line % 100000) == 0) // display the memory usage every 100000 lines
           
{
                echo
"\t";
               
var_dump(memory_get_usage() / (1024 * 1024)); // -> < 1MO
           
}

           
$line++;

           
$res = $test->readLine();
        }
        echo
'All lines read in: ' . (microtime(true) - $start) . "\n";
       
var_dump(memory_get_usage() / (1024 * 1024)); // -> < 1MO
   
}
   
TextFileReader

?>