PHP Conference Japan 2024

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() 报告的正确可执行文件,则该文件被视为可执行文件;出于向后兼容的原因,扩展名为 .bat.cmd 的文件也被视为可执行文件。在 PHP 7.4.0 之前,任何扩展名为 .exe.com 的非空文件都被视为可执行文件。请注意,PATHEXTis_executable() 无关。

参见

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

添加注释

用户贡献的注释 5 条注释

divinity76 at gmail dot com
5 年前
is_executable() 不检查 PATH 环境变量,因此如果您的当前工作目录是 /dir/ 并且您的 PATH env 中有 /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;
}
Shyammakwana.me
8 年前
对于 Windows 用户,

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

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

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

is_executable() 返回 false。

将 dir 设置为世界可执行 (701) 使 PHP 可以访问。下载成功。并且 is_executable() 返回 true。

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

例如

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

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

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