#23636 [Csd]: overriding auto_detect_line_endings

From: Date: Fri, 16 May 2003 09:12:34 +0000
Subject: #23636 [Csd]: overriding auto_detect_line_endings
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-39778@lists.php.net to get a copy of this message
ID: 23636 Updated by: wez@php.net Reported By: mitra at mitra dot biz Status: Closed Bug Type: Feature/Change Request PHP Version: 4.3.1 New Comment: It is worth noting that: ini_set('auto_detect_line_endings', true); is only inspected and used by the stream when it reads the *first* line (via fgets). Subsequent reads use the value it detect then. This is only an issue if (for some strange reason!) you have a mixture of different line ending conventions in a file. In other words, the ini setting is only inspected at the time the stream is opened via fopen() or fsockopen(). Previous Comments: ------------------------------------------------------------------------ [2003-05-16 03:29:49] mitra at mitra dot biz How is one supposed to deduce that PHP_INI_ALL means you can change it with "ini_set", if one doesn't know that function exists. There is nothing on the ref.filesystem page, nor any link from PHP_INI_ALL to something that explains what it means. (not intending to be critical, but as someone whose done a lot of PHP programming, and was explicitly looking for a programatic way to set this variable, I couldn't find it). ------------------------------------------------------------------------ [2003-05-16 01:48:38] philip@php.net The documentation already shows it as being PHP_INI_ALL so why did you feel it implies otherwise? http://www.php.net/manual/en/ref.filesystem.php ------------------------------------------------------------------------ [2003-05-15 23:23:18] mitra at mitra dot biz Thanks - so maybe the docs should be updated to show that a) the settings are settable, the implication is that they can only be set in php.ini b) the stream_get_line alternative to fgets Oops - since this is OpenSource documentation, maybe I should do it ...... done ------------------------------------------------------------------------ [2003-05-15 19:12:13] pollita@php.net This option *IS* settable within your PHP scripts. Example: <?php ini_set('auto_detect_line_endings', true); $contents = file('unknowntype.txt'); ini_set('auto_detect_line_endings', false); $content2 = file('unixfile.txt'); ?> Note, with PHP 4.3 anytime Mac files are read using fgets or file you'll need to auto_detect_line_endings since \n is otherwise assumed. However, with PHP 5.0, stream_get_line() will allow you to specify what line ending character to read up to. \\ Read a line from a MAC file stream_get_line($fp, 4096, "\r"); \\ Read a line from a UNIX file stream_get_line($fp, 4096, "\n"); \\ Read a line from a DOS file stream_get_line($fp, 4096, "\r\n"); \\ Read a line up to any filesystem line ending ini_set('auto_detect_line_endings', true); fgets($fp); \\ You can also make up your own line ending characters: \\ Read up to the first instance of ":" stream_get_line($fp, 4096, ":"); ------------------------------------------------------------------------ [2003-05-15 02:21:39] mitra at mitra dot biz I'm often running into problems with users, moving files around from a Macintosh to Linux, it would be useful if PHP allowed modification of auto_detect_line_endings in the php3, rather than just in php.ini. In this way, files which handle user supplied files, can do the auto-detection, while those reading files of known origin can leave it as it is. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=23636&edit=1

« previous php.bugs (#39778) next »