#38496 [NEW]: fgetcsv() doesn't report delimiter/enclosure greater than 1 char like fputcsv.

From: Date: Fri, 18 Aug 2006 10:33:10 +0000
Subject: #38496 [NEW]: fgetcsv() doesn't report delimiter/enclosure greater than 1 char like fputcsv.
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-101022@lists.php.net to get a copy of this message
From: RQuadling at GMail dot com Operating system: Windows XP SP2 PHP version: 5CVS-2006-08-18 (snap) PHP Bug Type: Streams related Bug description: fgetcsv() doesn't report delimiter/enclosure greater than 1 char like fputcsv. Description: ------------ Hi. The issue was initially caught when I used '\t' rather than "\t". The source for fputcsv reports notices when you use a delimiter or an enclosure of > 1 character. But fgetcsv doesn't report this. The following patch should fix this. Index: file.c =================================================================== RCS file: /repository/php-src/ext/standard/file.c,v retrieving revision 1.449 diff -u -r1.449 file.c --- file.c 16 Jul 2006 15:54:25 -0000 1.449 +++ file.c 18 Aug 2006 10:30:51 -0000 @@ -2081,6 +2081,8 @@ if (delimiter_str_len < 1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "delimiter must be a character"); RETURN_FALSE; + } else if (delimiter_str_len > 1) { + php_error_docref(NULL TSRMLS_CC, E_NOTICE, "delimiter must be a single character"); } /* use first character from string */ @@ -2091,6 +2093,8 @@ if (enclosure_str_len < 1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "enclosure must be a character"); RETURN_FALSE; + } else if (enclosure_str_len > 1) { + php_error_docref(NULL TSRMLS_CC, E_NOTICE, "enclosure must be a single character"); } /* use first character from string */ enclosure = enclosure_str[0]; Reproduce code: --------------- <?php error_reporting(E_ALL); ++$dummy; // Proof of notices working. // Store CSV like data in temporary file. $fp = tmpfile(); // Real data I've been given - yeuch! fwrite($fp, <<< END_DATA BO111519112733CELTIC0022002/01/02```D.W.Marilyn```````22`21225`10039 BO111520=VARIOUS`HILL 12002/01/18``VariousMarilyn```````3636361225VARIOUS BO111521+VARIOUS`HILL 12002/01/14``VariousMarilyn```````3232321225VARIOUS BO111522\\VARIOUS`HILL 12002/01/14``VariousMarilyn```````1331331331225VARIOUS BO111523113027FRAIKIN0062002/01/02```S.W.Marilyn``````101`111225AAN124 END_DATA ); // Reset the file pointer. fseek($fp, 0, SEEK_SET); // Get data and report the number of $a = array ( fgetcsv($fp, 8192, '``'), // Expect notice - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "delimiter must be a single character") fgetcsv($fp, 8192, '`', '\t'), // Expect notice - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "enclosure must be a single character"); fgetcsv($fp, 8192, '`', '\t'), // Expect notice - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "enclosure must be a single character"); fgetcsv($fp, 8192, '`', '\t'), // Expect notice - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "enclosure must be a single character"); fgetcsv($fp, 8192, '`', "\t"), // Nothing wrong with this one. ); foreach($a as $b) { // Each row has 23 values. echo count($b), ' ', $b[2], "\n"; } fclose($fp); ?> Expected result: ---------------- Notices about enclosure or delimiter not being a single character like fputcsv Actual result: -------------- Notice: Undefined variable: dummy in C:\a.php on line 3 23 112733 23 =VARIOUS 23 +VARIOUS 3 VARIOUS`HILL 12002/01/14``VariousMarilyn```````1331331331225VARIOUS BO111523113027FRAIKIN0062002/01/02```S.W.Marilyn``````101`111225AAN124 1 -- Edit bug report at http://bugs.php.net/?id=38496&edit=1 -- Try a CVS snapshot (PHP 4.4): http://bugs.php.net/fix.php?id=38496&r=trysnapshot44 Try a CVS snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=38496&r=trysnapshot52 Try a CVS snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=38496&r=trysnapshot60 Fixed in CVS: http://bugs.php.net/fix.php?id=38496&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=38496&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=38496&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=38496&r=needscript Try newer version: http://bugs.php.net/fix.php?id=38496&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=38496&r=support Expected behavior: http://bugs.php.net/fix.php?id=38496&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=38496&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=38496&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=38496&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=38496&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=38496&r=dst IIS Stability: http://bugs.php.net/fix.php?id=38496&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=38496&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=38496&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=38496&r=nozend MySQL Configuration Error: http://bugs.php.net/fix.php?id=38496&r=mysqlcfg

« previous php.bugs (#101022) next »