Jump to content

Archived

This topic is now archived and is closed to further replies.

jhodges

Warning: Supplied argument is not a valid File-Handle resource

Recommended Posts

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

Share this post


Link to post
Share on other sites

×

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.