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

From: Date: Mon, 08 Nov 2021 11:56:28 +0000
Subject: Req->Doc #41062 [Opn->Ver]: is_executable only looks at basic executables
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-19309@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=41062&edit=1

 ID:                 41062
 Updated by:         cmb@php.net
 Reported by:        RQuadling@php.net
 Summary:            is_executable only looks at basic executables
-Status:             Open
+Status:             Verified
-Type:               Feature/Change Request
+Type:               Documentation Problem
-Package:            *General Issues
+Package:            Filesystem function related
 Operating System:   Windows
 PHP Version:        7.0.7
 Block user comment: N
 Private report:     N

 New Comment:

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>


Previous Comments:
------------------------------------------------------------------------
[2016-06-02 04:54:19] requinix@php.net

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] RQuadling@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 https://bugs.php.net/bug.php?id=41062&edit=1


Thread (2 messages)

« previous php.doc.bugs (#19309) next »