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

Reply via email to