is_executable

(PHP 4, PHP 5, PHP 7, PHP 8)

is_executable判断文件名是否可执行

描述

is_executable(string $filename): bool

判断文件名是否可执行。

参数

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 之前,任何具有 .exe.com 扩展名的非空文件都被认为是可执行文件。请注意,PATHEXTis_executable() 无关。

参见

  • is_file() - 判断文件名是否为普通文件
  • is_link() - 判断文件名是否为符号链接

添加说明

用户贡献的注释 5 个注释

5
divinity76 at gmail dot com
5 年前
is_executable() 不检查 PATH 环境变量,因此如果您的当前工作目录是 /dir/ 并且您的 PATH 环境中包含 /bin/ 并且文件 /bin/ffmpeg 存在,那么您仍然可以运行 shell_exec("ffmpeg"),但 is_executable("ffmpeg") 将返回 false。

如果您正在寻找一个也考虑 PATH 环境变量的 is_executable 版本,那么请尝试以下方法

<?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;
}
12
Shyammakwana.me
8 年前
对于 Windows 用户,

它将对 EXE 扩展名返回 TRUE。我检查了 MSI,但它返回了 FALSE。
2
nick at NOSPAM dot ogredata dot com
4 年前
此函数返回 PHP 正在执行的进程的值。

/var/somebody/files 仅对所有者可执行 (700)。

它包含对世界可读的文件,但没有执行权限,PHP 无法访问该目录以下载文件。

is_executable() 返回 false。

使目录对世界可执行 (701) 使 PHP 能够访问。下载成功。并且 is_executable() 返回 true。

我假设如果我将 PHP 添加到该文件夹的组中并授予该组执行权限,那也将有效。
-1
匿名
3 年前
在 Windows 下,它似乎总是对目录返回 false。

例如

<?php
$dir
= __DIR__;
$result = is_executable($dir) ? 'true' : 'false';

if(
$result){
echo
$result;
}
?>

因此,不要使用它来检查文件夹是否可遍历,因为它将是依赖于系统的代码。
-2
telezhkin at gmail dot com
5 年前
没有找到对此的提及,但 is_executable 仅返回所有者权限的结果(不是组或其他)。
To Top