PHP 8.4.1 Released!

is_executable

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

is_executableTells whether the filename is executable

Опис

is_executable(string $filename): bool

Tells whether the filename is executable.

Параметри

filename

Path to the file.

Значення, що повертаються

Returns true if the filename exists and is executable, or false on error. On POSIX systems, a file is executable if the executable bit of the file permissions is set. For Windows, see the note below.

Помилки/виключення

Під час збоїв буде видаватись E_WARNING.

Приклади

Приклад #1 is_executable() example

<?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().

Зауваження: On Windows, a file is considered executable, if it is a properly executable file as reported by the Win API GetBinaryType(); for BC reasons, files with a .bat or .cmd extension are also considered executable. Prior to PHP 7.4.0, any non-empty file with a .exe or .com extension was considered executable. Note that PATHEXT is irrelevant for is_executable().

Прогляньте також

  • is_file() - Tells whether the filename is a regular file
  • is_link() - Tells whether the filename is a symbolic link

add a note

User Contributed Notes 5 notes

up
5
divinity76 at gmail dot com
5 years ago
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;
}
up
12
Shyammakwana.me
8 years ago
For windows users,

It will return TRUE for EXE extensions. I have checked for MSI, but it returns FALSE.
up
2
nick at NOSPAM dot ogredata dot com
4 years ago
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.
up
-1
Anonymous
4 years ago
Under windows, it seems to returns always false for directories.

I.e

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

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

So do NOT use this to check if a folder is transversable because it will be system dependant code.
up
-2
telezhkin at gmail dot com
5 years ago
Find no mention of this, but is_executable returns result for owner permissions only (not for group or other).
To Top