Login   Register  
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: 5 months 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 $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

?>