PHP -R STDIN chomping line ends

php.internals

Aaron Wormus

22 years ago
Greetings! I've been exploring the work done on the PHP CLI sapi, and am impressed with the new features that are in PHP 5. One thing that I am a bit troubled about is the behaviour of the -R switch in that it removes the trailing \n and \r line end characters when it delivers the line to $argn. I can't see any useful reasons for it doing this, and it does not handle STDIN the way it should. The following file should just pass through the following code, not strip out all the line ends: cat file.txt | php -R 'echo "$argn";' I realize that one possible reason that this was included was because it is simpler to add a line end if needed then to chomp it. However, even if I do use: cat file.txt | php -R 'echo "$argn\n";' if the file uses \r\n line ends, it still changes the file. And it's unacceptable to have to know what type of file it is when doing a command as simple as that. Curt Zirzow provided me with the patch that I'm including, and would like to ask that the behaviour be changed before the PHP 5 final. I realize that this has been working like this for over a year, and by making this change we would be breaking backwards compatibility (with pre version 5 releases). However, since I do believe that this behaviour is wrong, I feel that it would be a mistake to let it get into the PHP 5 final, as it will need to get changed sooner or later, and if it is introduced into PHP with version 5 then it will be much harder to reverse. I'm sorry if I'm ranting a bit. I am known to miss obvious things, so if it's my mistake and there is a good reason for the behaviour, please let me know. I appreciate all the work that has gone into PHP 5, I'm enjoying it throughly! Aaron

Marcus Börger

22 years ago
Hello Aaron, the idea of removing the line ends comes from copying other unix tools behavior. Also reappending a line ending should result in the standard line ending for the platform used. So th eproblem is actually working with input from another platform. I won't change the standard behavior of the -R/-F switch but could probably add it a new switch which would stop removing the trailing new lines. marcus Tuesday, May 4, 2004, 10:46:29 AM, you wrote:
> Greetings! > I've been exploring the work done on the PHP CLI sapi, and am impressed > with the new features that are in PHP 5.
> One thing that I am a bit troubled about is the behaviour of the -R > switch in that it removes the trailing \n and \r line end characters > when it delivers the line to $argn. I can't see any useful reasons for > it doing this, and it does not handle STDIN the way it should.
> The following file should just pass through the following code, not > strip out all the line ends:
> cat file.txt | php -R 'echo "$argn";'
> I realize that one possible reason that this was included was because > it is simpler to add a line end if needed then to chomp it. However, > even if I do use:
> cat file.txt | php -R 'echo "$argn\n";'
> if the file uses \r\n line ends, it still changes the file. And it's > unacceptable to have to know what type of file it is when doing a > command as simple as that.
> Curt Zirzow provided me with the patch that I'm including, and would > like to ask that the behaviour be changed before the PHP 5 final.
> I realize that this has been working like this for over a year, and by > making this change we would be breaking backwards compatibility (with > pre version 5 releases). However, since I do believe that this behaviour > is wrong, I feel that it would be a mistake to let it get into the PHP 5 > final, as it will need to get changed sooner or later, and if it is > introduced into PHP with version 5 then it will be much harder to reverse.
> I'm sorry if I'm ranting a bit. I am known to miss obvious things, so > if it's my mistake and there is a good reason for the behaviour, please > let me know. I appreciate all the work that has gone into PHP 5, I'm > enjoying it throughly!
> Aaron
-- Best regards, Marcus mailto:helly@php.net