Re: php can't resolve 8.3 paths to unicode filenames, is that expected ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Anatol,

Wednesday, July 31, 2013, 12:47:58 AM, you wrote:

> Warning: fopen(ZZZZZZ~1.TXT): failed to open stream: Invalid argument in
> Command line code on line 1
> bool(false)

Yes, but how does the function even know that there are multibyte
in it's arguments ? Since it was given the ascii compliant name ?
And why 16 bit apps don't experience any errors since they are much
older than php ? Maybe because they are ignorant about multibyte paths ?
Shouldn't php be ignorant too if it can't handle it ?

> The file without multibyte chars in the name can be opened. Also, do you
> notice that question marks in the other filename?

Yes, but there are no question marks in shortenened path.

> Those have to be handled.

But how the php function does know about that ?
Now I tried to open that greek file in old msdos 622 and it worked
without any issue. Although I know it will mess it name if I try to
change it. And I expect the same from php. But I don't want here
to rename anything in php.

> Despite of how good the other old and new programs are, PHP
> doesn't support this at the moment.

So it should and it is a bug. And it is the two different things if 
I want you to make PHP Unicode complying, which I do not.
I want you to make php completely ignorant of unicode paths
as are the old 20 yo apps until it will be able to 100% successfully handle it.

> As a dessert I'd suggest you to read this ticket from not very recent past
> about how it's going in python http://bugs.python.org/issue13247 :)
under Windows, os.path.abspath returns non-ASCII bytes paths as question marks
but what you need abspath for ? and why php filesystem functions need 
to know absolute path ?


another thing I noticed is that php doesn't as I thought try to translate the path, if I give it
the one without unicode I get back it in the same shortened form
so what is happening here ? it doesn't give the user absolute path but it must
be using it somewhere internally

<?
$FS = new \COM('Scripting.FileSystemObject', null, CP_UTF8);
$FS->CreateTextFile("c:\\zzzzzzzzz_ellada.txt");
$ShortPath = $FS->GetFile("c:\\zzzzzzzzz_ellada.txt")->ShortPath;
echo "short path: ".$ShortPath."\n";
$handle = fopen($ShortPath, 'r');
echo "handle path: ".stream_get_meta_data($handle)['uri']."\n";
// echoes: C:\ZZZZZZ~2.TXT
?>


-- 
PHP Windows Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php





[Index of Archives]     [PHP Home]     [PHP Users]     [PHP Database Programming]     [PHP Install]     [Kernel Newbies]     [Yosemite Forum]     [PHP Books]

  Powered by Linux