Jump to content

jhodges

New Members
  • Posts

    1
  • Joined

  • Last visited

    Never

Posts posted by jhodges

  1. Hello;

    I keep getting this error

    Warning: Supplied argument is not a valid File-Handle resource in /home/cust1/usr1122/html/newsletter/modules/classes/csvfile.inc.php on line 219.  This is the page , the lines in read give this error.  Any help would be appreciated

    <?php //csvfile.inc.php (table-xs v1.83) - (C) by Jack (tR) (http://www.jtr.de/scripting/php)

    class csvfile
    /*
    The Data source is a CSV text file (comma separated values)

    All values are seperated by Doublequotes (") and commata (,)
    e.g: ("...","...","...")

    The first line contains the attributes (headings of the table)

    */
    {

    // public class variables which can be modified
    var $name          = "";
    var $handle        = "";
    var $captions      = array();
    var $list_next_pos = 0;
    var $file_next_pos = 0;
    var $eol          = true;

    /*

    //--------------------------------------------------------------------------
    // I N T E R F A C E
    //--------------------------------------------------------------------------

    // returns the captions of the table rows
    array get_captions( );

    // opens the data source
    boolean open( string mode );

    // closes the data source
    boolean close();

    // initializes the data source
    boolean init();

    // returns the number of table entries
    int entries();

    // returns an entry from the table
    get_entry( int pos, reference array rows );

    // returns the next entry from the table
    get_next_entry( reference array rows );

    // returns several successive table entries
    get_entrylist( int start, int stop, reference array entrylist );

    // appends an entry to the table
    append( array data );

    // looks for the first appearance of a date in the table
    find_entry( string data );

    // looks for the next appearance of a date in the table
    find_next_entry( string data );

    // changes an entry in the table
    change( int pos, array data );

    // removes an entry from the table
    delete( int pos )

    // inserts a (line-)entry to the table
    function insert ( int pos, array data )

    //returns true if reachs end of list
    eol()

    */


    //--------------------------------------------------------------------------
    // Internal Help Functions
    //--------------------------------------------------------------------------

    function clean_string( $str )
    // Task:    Removes all superflous seperators and characters from
    //          the string
    // Input:  $str  : a row, red from CSV-file, still containing artefacts
    //                  of comma seperation
    //
    // Output:  String without " (Double Quotes) at the begin and end
    //          (additionally all slash-coded chars will be decoded)
    {
    $str = trim( $str );
    $newlen = $strlen = strlen( $str );

    // Ignore quotes if string contains with
    if ( substr($str,0,1) == '"')
    {
    $start = 1;
    $newlen--;
    }
    else $start = 0;

    // ignore Quotes if string ends with
    if (substr( $str, $strlen-1, 1 ) == '"') { $newlen--; }

    // cut the "real" data from string !!!
    $str = substr( $str, $start, $newlen );

    $str = stripslashes( $str ); // decode slash-coded chars

    return $str;
    }


    function get_captions()
    // Task:  returns the captions of the table rows
    //
    // Input:  none
    //
    // Output: returns the table captions in $captions
    {
    // reads captions from the first line
    $line = fgets( $this->handle, 4096 );
    $tokens = explode( '","' , $line );

    $keys = array_keys( $tokens );
    foreach ($keys as $key)
    {
    $this->captions[$key] = $this->clean_string( $tokens[$key] );
    }
    }


    //--------------------------------------------------------------------------
    // I M P L E M E N T A T I O N
    //--------------------------------------------------------------------------

    function open( $mode )
    // opens the data source
    {
    if ( ! $this->handle = fopen( $this->name, $mode ) )
    {
    return false;
    }
    else
    {
    // lock file if opened for write mode
    if ( eregi( "a|w|\+", $mode ) )
    { flock( $this->handle, 2); }

    $this->eol = feof( $this->handle );
    return true;
    }
    }


    function close()
    // closes the data source
    {
    flock( $this->handle, 3 );
    return fclose( $this->handle );
    }

    function init()
    // initializes the data source
    {
    if ( $this->open( "a+" ) && $this->close() )
    {
    return true;
    }
    return false;

    $this->list_next_pos = 0;
    $this->file_next_pos = 0;
    }

    function entries()
    // Task:  returns the number of table entries
    //
    // Input:  none
    //
    // Output: number of entries
    {
    $num_entries = 0;
    $this->open( "r" );

    // read captions from first line
    $this->get_captions();

    // ... and count all following lines
    while ( $line = fgets( $this->handle, 4096 ) )
    {
    $num_entries++;
    }
    $this->close();
    return $num_entries;
    }


    function get_entry( $pos, &$rows )
    // Task:  returns an entry from the table
    //
    // Input:  $pos    = number of the line from where to fetch the data
    //
    // Output: $rows    = array containing the entries
    {
    $this->open( "r" );

    // read table headings from the first line
    $this->get_captions();

    // skip all entries before start position
    $i=0;
    while ( ($i < $pos) && ($line = fgets( $this->handle, 4096 )))
    {
      $i++;
    }
    $line = fgets( $this->handle, 4096 );

    // keep current position in memory for get_next_entry
    [color=red]$this->file_next_pos = ftell( $this->handle);[/color]
    $this->list_next_pos = $pos + 1;

    if ( feof( $this->handle ) ) { $this->eol = true; }

    $this->close();

    $tokens = explode( '","' , $line );

    $keys = array_keys( $tokens );
    reset( $this->captions );

    foreach ($keys as $key)
    {
    $cap = current( $this->captions );
    $rows[$cap] = $this->clean_string( $tokens[$key] );
    next( $this->captions );
    }
    }

    function get_next_entry( &$rows )
    // Task:  returns the next entry from the table
    //
    // Output: $rows = array containing the entries
    {
    $this->open( "r" );

    //set to entry following last get_entry
    [color=red]fseek( $this->handle, $this->file_next_pos );[/color]

    if ( $line = fgets( $this->handle, 4096 ) )
    { $this->list_next_pos++; }

    // keep current position in memory for get_next_entry
    [color=red]$this->file_next_pos = ftell( $this->handle );[/color]

    if ( feof( $this->handle ) ) { $this->eol = true; }
    $this->close();

    $tokens = explode( '","' , $line );

    $keys = array_keys( $tokens );
    reset( $this->captions );

    foreach ($keys as $key)
    {
    $cap = current( $this->captions );
    $rows[$cap] = $this->clean_string( $tokens[$key] );
    next( $this->captions );
    }
    }


    function get_entrylist( $start, $stop, &$entrylist )
    // Task:  returns several successive table entries
    //
    // Input:  $start    = first entry to fetch
    //        $end      = last entry to fetch
    //
    // Output: $entrylist = two dimensional array containing the red lines/entries
    {
    $this->open( "r" );

    // Read table headings from the first line
    $this->get_captions();

    // Read all entries to the start position
    $i=0;
    while ( ($i < $start) && ($line = fgets( $this->handle, 4096 )))
    {
      $i++;
    }

    while ( ($i <= $stop) && ($line = fgets( $this->handle, 4096 )) )
    {
    $tokens = explode( '","' , $line );

    $keys = array_keys( $tokens );
    reset( $this->captions );

    foreach ($keys as $key)
    {
    $cap = current( $this->captions );
    $entrylist[$i][$cap] = $this->clean_string( $tokens[$key] );
    next( $this->captions );
    }

    $i++;
    }
    if ( feof( $this->handle ) ) { $this->eol = true; }
    $this->close();
    }


    function append( $data )
    // Task:  Appends an entry to the table
    //
    // Input: $data = array with the data to save
    //
    {
    clearstatcache(); //...otherwise filesize stays constant!!!

    if ( filesize( $this->name ) == 0 )
    {
    $line = '';
    $this->open( "a+" );

    $keys = array_keys( $data );
    foreach ($keys as $key)
    {
    if (!empty( $line ))
    {
    $line .= ',';
    }
    $line .= '"' . $key. '"';
    }

    fputs( $this->handle, $line."\n" );
    $this->close();
    }

    $this->open( "r" );
    $this->get_captions();
    $this->close();

    $line = '';
    $this->open( "a+" );

    $values = array_values( $this->captions );

    foreach ($values as $val)
    {
    if (!empty( $line ))
    {
    $line .= ',';
    }
    $line .= '"' . $data[$val]. '"';
    }

    fputs( $this->handle, $line."\n" );
    $this->close();
    }


    function find_entry( $data )
    // Task:  Searches for the first appearance of a date in the table
    //
    // Input:  $data = array with columns to find
    //
    {
    $entry = 0;
    $this->open( "r" );
    $this->get_captions();

    // for each row in table
    while ( $line = fgets( $this->handle, 4096 ) )
    {
    unset( $tokens );
    unset( $row ); $row = array();

    // read line and transfer csv-values into array $row

    $tokens = explode( '","' , $line );

    $keys = array_keys( $tokens );
    reset( $this->captions );

    foreach ($keys as $key)
    {
    $cap = current( $this->captions );
    $row[$cap] = $this->clean_string( $tokens[$key] );

    next( $this->captions );
    }

    $equal = true;

    $keys = array_keys( $data );
    foreach ($keys as $key)
    {
    if ( $data[$key] != $row[$key] )
    {
    $equal = false;
    break;
    }
    }

    if ( $equal )
    {
    break;
    }

    $entry++;
    }

    // keep current position in memory for get_next_entry
    $this->file_next_pos = ftell( $this->handle );

    if ( feof( $this->handle ) ) { $this->eol = true; }

    $this->close();
    $this->list_next_pos = $entry + 1;
    return $entry;
    }


    function find_next_entry( $data )
    // Task:  Searches for the next appearance of a date in the table
    //
    // Input:  $data = array with colums to find
    //
    {
    $ok = false;
    $entry = $this->list_next_pos;
    $this->open( "r" );

    //set to entry following last get_entry
    fseek( $this->handle, $this->file_next_pos );

    // for each row in table
    while ( $line = fgets( $this->handle, 4096 ) )
    {
    unset( $tokens );
    unset( $row ); $row = array();

    // read line and transfer csv-values into array $row

    $tokens = explode( '","' , $line );

    $keys = array_keys( $tokens );
    reset( $this->captions );

    foreach ($keys as $key)
    {
    $cap = current( $this->captions );
    $row[$cap] = $this->clean_string( $tokens[$key] );

    next( $this->captions );
    }

    $equal = true;

    $keys = array_keys( $data );
    foreach ($keys as $key)
    {
    if ( $data[$key] != $row[$key] )
    {
    $equal = false;
    break;
    }
    }

    if ( $equal )
    {
    break;
    }

    $entry++;
    }

    // keep current position in memory for get_next_entry
    $this->file_next_pos = ftell( $this->handle );
    $this->list_next_pos = $entry++;

    if ( feof( $this->handle ) ) { $this->eol = true; }

    $this->close();
    return $entry;
    }


    function change( $pos, $data )
    // Task:  Changes a line in the table
    //
    // Input:  $pos  = Position of the element
    //   $data  = array containing the data to save
    //
    {
    $num_of_entries = $this->entries();

    if ( filesize( $this->name ) == 0 )
    {
    $this->append( $data );
    }

    $this->open( "r" );
    $this->get_captions();
    $this->close();

    // Komplette Datei zeilenweise einlesen
    $entrylist = file( $this->name );

    $newline = '';

    $values = array_values( $this->captions );
    foreach ($values as $val)
    {
    if (!empty( $newline ))
    {
    $newline .= ',';
    }
    $newline .= '"' . $data[$val]. '"';
    }
    $newline .= "\n";
    $entrylist[$pos+1]=$newline;

    $this->open( "w" );
    fwrite( $this->handle, ereg_replace( "\r", "", implode( "", $entrylist ) ) );

    $this->close();
    }


    function delete( $pos )
    // Task:  Removes a line from the table
    //
    // Input: $pos = Position of the Element
    //
    {
    $num_of_entries = $this->entries();

    if ( filesize( $this->name ) != 0 )
    {

    // Komplette Datei zeilenweise einlesen
    $entrylist = file( $this->name );

    unset( $entrylist[$pos+1] );

    $this->open( "w" );
    fwrite( $this->handle, ereg_replace( "\r", "", implode( "", $entrylist ) ) );

    $this->close();
    }
    }


    function insert ( $pos, $data )
    // Task:  Removes a line from the table
    //
    // Input: $pos = Position of the Element
    //
    {
    $num_of_entries = $this->entries();

    if ( filesize( $this->name ) == 0 )
    {
    $this->append( $data );
    }
    else
    {
    $newline = '';

    $values = array_values( $this->captions );
    foreach ($values as $val)
    {
    if (!empty( $newline ))
    {
    $newline .= ',';
    }
    $newline .= '"' . $data[$val]. '"';
    }
    $newline .= "\n";

    $this->open( "r" );
    $this->get_captions();
    $this->close();

    $this->open( "r" );
    $captionline = fgets( $this->handle, 4096 );
    $entrylist = array();
    $entrylist[0] = $captionline;
    $pos++;

    // Datei bis zur Einfügeposition zeilenweise einlesen
    $i = 1;
    while ($i < $pos )
    {
    $entrylist[$i] = fgets( $this->handle, 4096 );
    $i++;
    }

    $entrylist[$i]=$newline;
    $i++;

    while ( $entrylist[$i] = fgets( $this->handle, 4096 ) )
    {
    $i++;
    }
    $this->close();

    $this->open( "w" );
    fwrite( $this->handle, ereg_replace( "\r", "", implode( "", $entrylist ) ) );
    $this->close();
    }
    }


    function eol()
    // Task:  Removes a line from the table
    //
    // Input: $pos = Position of the Element
    //
    {
    return $this->eol;
    }

    }

    ?>


    thanks

    John Hodges
    jodges@m-media.com
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.