For windows users,
It will return TRUE for EXE extensions. I have checked for MSI, but it returns FALSE.
(PHP 4, PHP 5, PHP 7, PHP 8)
is_executable — 判断给定文件名是否可执行
filename
文件的路径。
如果文件存在且可执行则返回 true
,错误时返回 false
。在 POSIX
系统中,如果设置了文件权限的可执行位,则文件可执行。对于 Windows,请参阅下面的注释。
失败时抛出 E_WARNING
警告。
示例 #1 is_executable() 例子
<?php
$file = '/home/vincent/somefile.sh';
if (is_executable($file)) {
echo $file.' is executable';
} else {
echo $file.' is not executable';
}
?>
注意: 此函数的结果会被缓存。参见 clearstatcache() 以获得更多细节。
自 PHP 5.0.0 起, 此函数也用于某些 URL 包装器。请参见 支持的协议和封装协议以获得支持 stat() 系列函数功能的包装器列表。
注意: 在 Windows 上,如果文件是 Win API
GetBinaryType()
报告的正确可执行文件,则该文件视为可执行文件;由于 BC 原因,扩展名是 .bat 或 .cmd 的文件也被视为可执行文件。在 PHP 7.4.0 之前,任何扩展名是 .bat 或 .cmd 的非空文件都被视为可执行文件。注意 PATHEXT 与 is_executable() 无关。
For windows users,
It will return TRUE for EXE extensions. I have checked for MSI, but it returns FALSE.
is_executable() does not check the PATH environment variable, so if your current working dir is /dir/ and you have /bin/ in your PATH env and the file /bin/ffmpeg exists, then you can still run shell_exec("ffmpeg"), but is_executable("ffmpeg") will return false.
if you're looking for a version of is_executable that also considers the PATH environment variable, then try this:
<?php
function is_executable_pathenv(string $filename): bool
{
if (is_executable($filename)) {
return true;
}
if ($filename !== basename($filename)) {
return false;
}
$paths = explode(PATH_SEPARATOR, getenv("PATH"));
foreach ($paths as $path) {
if (is_executable($path . DIRECTORY_SEPARATOR . $filename)) {
return true;
}
}
return false;
}
This function returns the value for the process PHP is executing under.
/var/somebody/files was only executable by owner (700).
It contained world-readable files, but without execute permission, PHP could not access the directory to download the files.
is_executable() returned false.
Making the dir world-executable (701) gave access to PHP. The download worked. And is_executable() returned true.
I assume that if I added PHP to the group of the folder and gave the group executable permission, that would also work.
Find no mention of this, but is_executable returns result for owner permissions only (not for group or other).