#23636 [Csd]: overriding auto_detect_line_endings
| From: | wez@php.net | 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