From:             sharkpp at gmail dot com
Operating system: Windows
PHP version:      5.4.14
Package:          Filesystem function related
Bug Type:         Bug
Bug description:is_dir() is inaccurate result on Windows with japanese locale.

Description:
------------
Environment

I'm testing this problem on Windows 7 Ultimate x86 english.

Configuration changes little is required to reproduce.

1. Please open "Control Panel".
2. Please click "Change display language" link.
3. Please select "Administrative" tab and click "Change system locale..." 
button.
4. Please change current system locale "Japanese(Japan)".

The above procedure is not needed if you want to try in the Japanese
versions of 
Windows.

php in immediately after installation, the default state is also php.ini
(does 
not exist).

Problem

is_dir() will lie If you create a folder that contains the "\x5C" in the
string.
It may YYYY is included in the second byte of Shift_JIS.
For example ソ(\x83\x5C).
More example: 
https://ja.wikipedia.org/wiki/Shift_JIS (japanese)


Test script:
---------------
@mkdir("a");
@mkdir("\x83\x5D");
@mkdir("\x83\x5C");

$dir = './';
if ($dh = opendir($dir)) {
    while (($file = readdir($dh)) !== false) {
        $path = $dir . $file;
        $type = filetype($path);
        $type2= is_dir($path) ? 'dir' : 'file';
        $comp = $type == $type2 ? 'OK' : 'NG';
        echo "filetype()[".str_pad($type, 4)."] ==
is_dir()[".str_pad($type2, 4)."] -> $comp: {$file}\n";
    }
    closedir($dh);
}


Expected result:
----------------
filetype()[dir ] == is_dir()[dir ] -> OK: .
filetype()[dir ] == is_dir()[dir ] -> OK: ..
filetype()[dir ] == is_dir()[dir ] -> OK: a
filetype()[file] == is_dir()[file] -> OK: test.php
filetype()[dir ] == is_dir()[file] -> NG: ソ
filetype()[dir ] == is_dir()[dir ] -> OK: ゾ


Actual result:
--------------
filetype()[dir ] == is_dir()[dir ] -> OK: .
filetype()[dir ] == is_dir()[dir ] -> OK: ..
filetype()[dir ] == is_dir()[dir ] -> OK: a
filetype()[file] == is_dir()[file] -> OK: test.php
filetype()[dir ] == is_dir()[dir ] -> OK: ソ
filetype()[dir ] == is_dir()[dir ] -> OK: ゾ


-- 
Edit bug report at https://bugs.php.net/bug.php?id=64699&edit=1
-- 
Try a snapshot (PHP 5.4):   
https://bugs.php.net/fix.php?id=64699&r=trysnapshot54
Try a snapshot (PHP 5.3):   
https://bugs.php.net/fix.php?id=64699&r=trysnapshot53
Try a snapshot (trunk):     
https://bugs.php.net/fix.php?id=64699&r=trysnapshottrunk
Fixed in SVN:               https://bugs.php.net/fix.php?id=64699&r=fixed
Fixed in release:           https://bugs.php.net/fix.php?id=64699&r=alreadyfixed
Need backtrace:             https://bugs.php.net/fix.php?id=64699&r=needtrace
Need Reproduce Script:      https://bugs.php.net/fix.php?id=64699&r=needscript
Try newer version:          https://bugs.php.net/fix.php?id=64699&r=oldversion
Not developer issue:        https://bugs.php.net/fix.php?id=64699&r=support
Expected behavior:          https://bugs.php.net/fix.php?id=64699&r=notwrong
Not enough info:            
https://bugs.php.net/fix.php?id=64699&r=notenoughinfo
Submitted twice:            
https://bugs.php.net/fix.php?id=64699&r=submittedtwice
register_globals:           https://bugs.php.net/fix.php?id=64699&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=64699&r=php4
Daylight Savings:           https://bugs.php.net/fix.php?id=64699&r=dst
IIS Stability:              https://bugs.php.net/fix.php?id=64699&r=isapi
Install GNU Sed:            https://bugs.php.net/fix.php?id=64699&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=64699&r=float
No Zend Extensions:         https://bugs.php.net/fix.php?id=64699&r=nozend
MySQL Configuration Error:  https://bugs.php.net/fix.php?id=64699&r=mysqlcfg

Reply via email to