#39234 [Opn]: Retrieve short names to files.
| From: | RQuadling at GMail dot com | Date: | Mon, 23 Oct 2006 12:39:29 +0000 |
| Subject: | #39234 [Opn]: Retrieve short names to files. | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-103905@lists.php.net to get a copy of this message | ||
ID: 39234
User updated by: RQuadling at GMail dot com
Reported By: RQuadling at GMail dot com
Status: Open
Bug Type: Feature/Change Request
Operating System: Windows XP SP2
PHP Version: 5CVS-2006-10-23 (snap)
New Comment:
http://msdn.microsoft.com/library/en-us/fileio/fs/getfullpathname.asp
and
http://msdn.microsoft.com/library/en-us/fileio/fs/getshortpathname.asp
(Maybe these will fit?)
Previous Comments:
------------------------------------------------------------------------
[2006-10-23 12:37:56] RQuadling at GMail dot com
Description:
------------
Hello.
(I was required to pick a version, but that is not really relevant).
This issue extends from a bug/feature of the Windows command shell
executable (cmd.exe) which only allows a single set of double quotes to
be used when being used with the /C option.
e.g.
<?php
// Fine
exec('"C:\Program Files\Some Dir\Some Program" C:\somefile.txt');
// Not fine
exec('"C:\Program Files\Some Dir\Some Program" "C:\some file with a
space in the name.txt"');
?>
You get an error which is the same at the command prompt.
These work (the parameter is useless).
C:\windows\system32\calc.exe 123
"C:\windows\system32\calc.exe" 123
C:\windows\system32\calc.exe "123"
"C:\windows\system32\calc.exe" "123"
cmd /c C:\windows\system32\calc.exe 123
cmd /c "C:\windows\system32\calc.exe" 123
cmd /c C:\windows\system32\calc.exe "123"
But this doesn't work at the command line.
cmd /c "C:\windows\system32\calc.exe" "123"
You get the error ...
'C:\windows\system32\calc.exe" "123' is not recognized as an internal
or external command, operable program or batch file.
So, whilst this isn't a PHP bug, PHP could certainly help get around
the problem.
My proposal is to either extend the PHP function realpath() to allow
for a boolean parameter to indicate the short name is to be returned.
e.g.
string realpath ( string path [, boolean return_short_name] )
or to introduce 2 new functions
string shortname ( string longname )
string longname ( string shortname )
In addition, extending the SPL to have a getShortName() method.
To get the shortname within MS VC++, there is a function called
GetShortPathName(). There is also GetLongPathName().
References to these functions can be found at
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/getshortpathname.asp
and
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/getlongpathname.asp
DWORD GetShortPathName(
LPCTSTR lpszLongPath,
LPTSTR lpszShortPath,
DWORD cchBuffer
);
DWORD GetLongPathName(
LPCTSTR lpszShortPath,
LPTSTR lpszLongPath,
DWORD cchBuffer
);
With the shortname() function, a filename like ...
C:\Program Files\Microsoft SQL Server\80\Tools\Binn\osql.exe
would become ...
C:\PROGRA~1\MI6841~1\80\TOOLS\BINN\OSQL.EXE
The name supplied is system dependent. I have a LOT of directories in
"C:\Program Files" starting with Microsoft.
27/10/2004 15:01 <DIR> MI3AA1~1 Microsoft ActiveSync
16/03/2006 11:13 <DIR> MIAF83~1 Microsoft AntiSpyware
05/01/2005 10:02 <DIR> MIDA86~1 Microsoft Baseline
Security Analyzer
23/02/2005 16:17 <DIR> MIAF01~1 Microsoft Firewall
Client
27/10/2004 12:13 <DIR> MICROS~1 microsoft frontpage
06/04/2006 09:22 <DIR> MICROS~3 Microsoft
IntelliPoint
06/04/2006 09:26 <DIR> MICROS~2 Microsoft IntelliType
Pro
06/04/2006 10:13 <DIR> MICROS~4 Microsoft Office
29/10/2004 14:36 <DIR> MI6841~1 Microsoft SQL Server
16/11/2004 16:31 <DIR> MIAF9D~1 Microsoft Visual
Studio
28/10/2004 08:44 <DIR> MIF2B0~1 Microsoft Works
23/02/2005 12:02 <DIR> MICROS~1.NET Microsoft.NET
In terms of impact, making 2 new functions which are Windows only would
probably be easier.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=39234&edit=1