Edit report at http://bugs.php.net/bug.php?id=41062&edit=1

 ID:               41062
 Updated by:       paj...@php.net
 Reported by:      rquadl...@php.net
 Summary:          is_executable only looks at basic executables
-Status:           Open
+Status:           Assigned
 Type:             Feature/Change Request
-Package:          Feature/Change Request
+Package:          *General Issues
 Operating System: Windows XP SP2
 PHP Version:      5CVS-2007-04-12 (snap)
-Assigned To:      
+Assigned To:      pajoye



Previous Comments:
------------------------------------------------------------------------
[2007-04-12 14:07:55] rquadl...@php.net

Description:
------------
For Windows, the is_executable() function only checks the file
extensions of exe, com, bat and cmd.



This is incomplete.



Within Windows, there is an environment variable called PATHEXT. This
contains a list of extensions which are executable.



If you type a program whose extension is in this list and the program
with that extension is in the path, then it is executed.



You can easily add .PHP to this list (see UserNote
http://www.php.net/manual/en/features.commandline.php#53252). This is
completely normal behaviour on windows.



Using the "FileTypes" mechanism allows any type of file to have an
automatic "handler" (double click a PDF file and Acrobat loads with that
file). By also adding the extension to the PATHEXT environment variable
you can type just the name at the CLI and the lovely windows magic
happens automagically.



The standard list of executable types within windows XP is:



PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH



Mine is:



PATHEXT=.COM;.EXE;.BAT;.CMD;.PHP;.PYC;.PY;



I don't deal with MS VB scripts, but I do deal with PHP and Python!



All of these are "executable" (i.e. the behaviour of an abc.php is the
same as an abc.bat or an abc.exe).



Admittedly this is only on windows, but the current method should either
be documented as only being of limited use on Windows (with the  4
types) or be extended to look at the Windows mechanism (just like I
assume the *ix version looks at an executable bit on the permissions?).



The following is a screen grab to prove the point.



12/04/2007 15:02:28 C:\>type "d:\PHP Quickies\isexec.php"

<?php

echo $argv[0], ' is ', (is_executable($argv[0]) ? '' : 'not '),
'executable';

?>



12/04/2007 15:02:34 C:\>set path

Path=C:\Batch;C:\PHP5;D:\PHP Quickies;C:\Program Files\Windows Resource
Kits\Tools;C:\Python\Lib;C:\Program
Files\WinRAR;D:\Sage\UTILS;c:\program
files\imagemagick;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program
Files\Universal Extractor\bin;C:\Program Files\Microsoft SQL
Server\80\Tools\BINN;C:\Program Files\Nmap;D:\Cygwin\bin;

PATHEXT=.COM;.EXE;.BAT;.CMD;.PHP;.PYC;.PY;.VBS;.VBE;.JS;.JSE;.WSF;.WSH



12/04/2007 15:02:37 C:\>isexec

D:\PHP Quickies\isexec.php is not executable





Reproduce code:
---------------
<?php

echo is_executable($argv[0]) ? 'Executable' : 'Not executable';

?>

Expected result:
----------------
D:\PHP Quickies\isexec.php is executable

Actual result:
--------------
D:\PHP Quickies\isexec.php is not executable


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=41062&edit=1

Reply via email to