Doc #41062 [Ver->Csd]: is_executable only looks at basic executables

[email protected]
Newsgroups php.doc.bugs
Message-ID <[email protected]>
Edit report at https://bugs.php.net/bug.php?id=41062&edit=1

 ID:                 41062
 Updated by:         [email protected]
 Reported by:        [email protected]
 Summary:            is_executable only looks at basic executables
-Status:             Verified
+Status:             Closed
 Type:               Documentation Problem
 Package:            Filesystem function related
 Operating System:   Windows
 PHP Version:        7.0.7
 Block user comment: N
 Private report:     N

 New Comment:

Automatic comment on behalf of cmb69
Revision: https://github.com/php/doc-en/commit/8d8cd43bfcd67415f3d548b7209c5b1a63d88fd1
Log: Fix #41062: is_executable only looks at basic executables


Previous Comments:
------------------------------------------------------------------------
[2021-11-08 11:56:28] [email protected]

There are certainly different ways to map the is_executable() behavior
to Windows, and PHP 7.4 decided to rely on GetBinaryType()[1].  For BC
reasons, .bat and .cmd are still reported as executable additionally,
but according to the comment[2] might be removed in the future.

So this is a WONTFIX, but I'm changing to doc problem, since the
behavior is not documented at all.

[1] <https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getbinarytypew>
[2] <https://github.com/php/php-src/blob/php-7.4.25/win32/ioutil.c#L936>

------------------------------------------------------------------------
[2016-06-02 04:54:19] [email protected]

Moving back to open - unless @pajoye wants to pick it back up.

------------------------------------------------------------------------
[2016-06-01 04:40:53] Justin dot Barth at gcinema dot net

This appears to still be an issue on PHP 7.0.6 , running on windows 2012 r2 datacenter edition.

------------------------------------------------------------------------
[2007-04-12 14:07:55] [email protected]

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 https://bugs.php.net/bug.php?id=41062&edit=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.