Edit report at https://bugs.php.net/bug.php?id=73716&edit=1
ID: 73716
Comment by: anrdaemon at freemail dot ru
Reported by: anrdaemon at freemail dot ru
Summary: PHP 7.1's CHCP switching in console should be
optional
Status: Feedback
Type: Feature/Change Request
Package: Output Control
Operating System: Windows
PHP Version: 7.1.0
Block user comment: N
Private report: N
New Comment:
"Extensions not loaded" with subsequent process interruption was how I first stumbled upon
this issue. A worst case scenario, if you wish.
I since found the way to reliable trigger it under normal circumstances.
Asking for "reproduction with cmd" isn't fair, CMD itself doesn't update console
buffer in realtime (nor is CMD strictly required to be present, to begin with⦠99% of the time
I don't use it at all, running PHP scripts straight from other programs though its
association).
Previous Comments:
------------------------------------------------------------------------
[2016-12-13 18:31:29] ab@php.net
So it doesn't load extension, while under Far manager? What is internal redirect? Preferably it
should be reproducible with the pure cmd.
Thanks.
------------------------------------------------------------------------
[2016-12-13 18:24:01] anrdaemon at freemail dot ru
Reproduction case?
Get Far manager (+FAR Commands plugin, which is part of standard package -
farmanager.com/download.php ), start PHP 7.1 with internal redirectâ¦
view:<? php -d internal_encoding=utf-8 -r "sleep(3);"
â¦observe console corruption for the duration of script execution.
May be not the most self-container demonstration, but very much visual.
Works equally well with CP437.
------------------------------------------------------------------------
[2016-12-13 17:41:51] ab@php.net
@anrdaemon, it would be nice, if you could put your language down to the technical level from your
shame theory. You say " half the extensions can't be loaded" - could you post some
reproduce case for this, that can be debugged?
Thanks.
------------------------------------------------------------------------
[2016-12-13 16:01:03] anrdaemon at freemail dot ru
That's just reinforcing my point, that single-minded pseudosolutions are not going to cut it.
Terminal encoding is a known complex problem, and by now people developed a treasure trove of
knowledge in dealing with it.
Why PHP has to "invent" its own ways? The "one size fits all" approach
didn't quite worked for several last centuries only on my memory. I don't want to see
anyone trying to walk that road only to be covered in shame. Yet again.
------------------------------------------------------------------------
[2016-12-13 07:14:25] yohgaki@php.net
Since you seems to using ISO-8859 compatible encoding, your situation is better than CP932(SJIS).
You can simply use CP866, but CP932 cannot be internal_encoding.
Therefore, we(Japanese) has to use UTF-8/EUC-JP for internal_encoding on Windows. Although, web
input/output conversion can be handled by mbstring/iconv, inputs/outputs have to converted manually,
filenames especially. For this reason, I suppose most Japanese PHP users do not use multibyte
filenames with PHP.
If you could use your code page without problems, I suggest to use it as internal_encoding with CLI.
It's a lot easier.
You may try
cmd.exe /f:on /k "chcp 65001
to use UTF-8 with cmd.exe.
I tried it on my Windows. Japanese filenames (CP932) raised error and stopped "dir"ing. If
all of your filenames are UTF-8, it may work. However, other programs like explorer may have
problems with UTF-8 filenames. (I don't know how your version of Windows behave)
Anyway, feasible resolution for mixed encoding environment that treats various encoding
automagically is very tough subject and use of UTF-8 could be problematic as described above.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=73716
--
Edit this bug report at https://bugs.php.net/bug.php?id=73716&edit=1