Scripts

INI/TXT reader

Ik zie regelmatig mensen die zeggen dat ze een bepaalde actie zonder database willen doen. Nou heb ik regelmatig met zul soort dingen gewerkt en ik dacht Kom doe gek schrijf er een class voor. Hier is het LEES gedeelte van mijn class. Ik zal de rest (wat ik nog ga schrijven) hier posten als het af is. Graag positieve / negatieve feedback De enige functie die aangeroepen hoeft te worden is : $Inihandler = new IniHandler(/*Locatie van je config file*/) ; $Inihandler->getFileContent(/*Filename*/)) In deze functie geef je als eerste argument je filename mee. Verder kunnen er ongelimiteerd argumenten achter. Voor INI files kunnen array keys worden meegegeven Voor TXT files kunnen regelnummers worden meegegeven. Word er niets meegegeven zoals hier boven gedemonstreerd dan krijg je gewoon de hele content van de file terug.

initxt-reader
Index.php
[code]
<?php
error_reporting(E_ALL) ;
include(/*Locatie van je classfile*/)  ;

$Inihandler = new IniHandler(/*Locatie van je config file*/)  ;

echo "<pre>" ;
print_r($Inihandler->getFileContent(/*Filename*/,1,2)) ;
echo "</pre>" ;
?>
[/code]

Config.php
[code]
<?php

/*
Dit is de locatie waar je bestanden staan
*/
$config[1] = "ini_files/" ;

/*
Onderstaand is alleen van belang voor bestanden waarvan de extensie niet .txt of .ini is.
Onderstaande configuratie geeft aan hoe de betreffende bestanden dan behandeld dienen te worden .
*/

$config[2]  = "txt" ; //Dit kan ini of txt zijn.

/*
Deze waarde hoeft alleen opgegeven te worden als er binnen 1 regel een ander scheidingsteken word gebruikt zoals bijv :
waarde1,waarde2,waarde3

De defaultwaarde is "="
*/
$config[3]  = "" ;
?>
[/code]

Ini_handler.class.php
[code]
<?php

class IniHandler
{
    var $Inilocation ; // De locatie van de bestanden die gebruikt worden
    var $DefaultFiletype ; // De default filetype (1 is txt, 2 is ini)
    var $CurrentFiletype ; // De filetype van het huidige bestand (indien niet txt of ini gelijk aan de default filetype
    var $Seperator ; //Hiermee kun je aangeven welk teken word gebruikt om de waardes binnen 1 rege te scheiden (txt only)

    function IniHandler($config_files)
    {
        include($config_files) ;

        $this->Inilocation = $config[1]  ; // Set je bestandslocatie


        /* Onderstande code controleerd of er een / achter je mapnaam staat
        Zo niet word deze er achter gezet */
        if (substr($this->Inilocation,-1) != "/")
        {
            $this->Inilocation .= "/" ;
        }
        /*--------------*/

        /*Deze code controleerd welke default filetype er in de configfile gezet is
        Deze config optie word gebruikt op het moment dat de gebruiker de file geen extensie geeft
        Ook word deze gebruikt als er een extensie word opgegeven die niet bekend is.

        Dit is noodzakelijk voor een goede afhandeling van de file content. Eventuele txt/ini extensies zullen ten alle tijden de default overschrijven*/
        $file_type = strtolower($config[2] ) ;
        switch ($file_type)
        {
            case("txt") :
            {
                $this->DefaultFiletype = 1 ;
            }
            break ;
            case ("ini") :
            {
                $this->DefaultFiletype = 2 ;
            }
            break ;
        }
        /*--------------*/

        /*Met name van belang voor de mensen met txt files is de Seperator. Hiermee kun je aangeven welk teken word gebruikt om de waardes binnen 1 rege te scheiden*/
        if (isset($config[3] )  && !empty($config[3]) && $config[3] != "")
        {
            $this->Seperator = $config[3] ;
        }
        else
        {
            $this->Seperator = "=" ;
        }
    }


    /* Deze functie controleert of een bestand bestaat en welk type het is*/
    function checkFile($filename)
    {
        if (file_exists($this->Inilocation."".$filename))
        {
            $file_type = end(explode(".",$filename)) ;
            $file_type = strtolower($file_type) ;
            switch ($file_type)
            {
                case("txt") :
                {
                    $this->CurrentFiletype = 1 ;
                }
                break ;
                case ("ini") :
                {
                    $this->CurrentFiletype = 2 ;
                }
                break ;
                default:
                {
                    $this->CurrentFiletype = $this->DefaultFiletype ;
                }
                break ;
            }
            return true ;
        }
        else
        {
            return false ;
        }
    }

    /*En soort Switch functie. Hier word dmv eerder genoemde functie het filetype bepaald en aangegeven welke actie als volgende dient te worden uitgevoerd*/
    function getFileContent($filename)
    {
            if ($this->checkFile($filename))
            {
                for($i = 1 ; $i < func_num_args(); $i++)
                {
                    $key_list[] = func_get_arg($i) ;
                }

                $filename = $this->Inilocation."".$filename ;
                switch ($this->CurrentFiletype)
                {
                    case(1) :
                    {
                        $file_content = $this->getTxtFileContent($filename , $key_list) ;
                    }
                    break ;
                    case(2) :
                    {
                        $file_content = $this->getIniFileContent($filename , $key_list) ;
                    }
                    break ;
                }

                return $file_content ;
            }
            else
            {
                return false ;
            }
    }

    /* Deze functie leest de ini files uit */
    function getIniFileContent($filename,$key_list = false)
    {
        $file_content = parse_ini_file($filename,true) ;

        if (is_array($key_list))
        {
            $file_return_content = null ;
            foreach ($key_list as $key)
            {
                $file_return_content[] = $file_content[$key] ;
            }
            return $file_return_content;
        }
        else
        {
            return $file_content ;
        }
    }

    /*Deze functie leest de txt files uit en zet elke regen appart in een array*/
    function getTxtFileContent($filename,$line_nr = false)
    {
        $handler = fopen($filename,"r") ;

        if (isset($line_nr))
        {
            $i = 1 ;
        }

        $data = false ;
        while (!feof($handler))
        {
            $line = fgets($handler) ;
            if ( !in_array($i,$line_nr))
            {
                $i++ ;
                continue ;
            }
            else
            {
                $i++ ;
                $data[] = $line ;
            }
        }
        fclose($handler);

        return $data ;
    }

}

?>
[/code]

Reacties

0
Nog geen reacties.