PHP 8.4.2 Released!

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.' является исполняемым';
} else {
echo
$file.' не является исполняемым';
}

?>

Примечания

Замечание: Результаты функции кешируются. Подробнее о кешировании рассказывает описание функции clearstatcache().

Подсказка

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми обёртками url. Список обёрток, поддерживаемых семейством функций stat(), смотрите в разделе Протоколы и обёртки.

Замечание: В Windows файл считается исполняемым, если это по-настоящему исполняемый файл, как сообщает Win API GetBinaryType(); Для обратной совместимости файлы с расширением .bat или .cmd также считаются исполняемыми. До PHP 7.4.0 любой непустой файл с расширением .exe или .com считался исполняемым. Обратите внимание, что PATHEXT не имеет отношения к is_executable().

Смотрите также

  • is_file() - Сообщает, ведёт ли путь к стандартному файлу
  • is_link() - Определяет, является ли файл символической ссылкой

Добавить

Примечания пользователей 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