PHP 8.3.4 Released!

is_executable

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

is_executableDiz se um arquivo é executável

Descrição

is_executable(string $filename): bool

Diz se um arquivo é executável.

Parâmetros

filename

Caminho para o arquivo.

Valor Retornado

Retorna true se o arquivo existe e é executável, ou false em caso de erro. Em sistemas POSIX, um arquivo é executável se o bit de executável das permissões de arquivo estiver ligado. Para Windows, veja a nota abaixo.

Erros/Exceções

Em caso de falha, um E_WARNING será emitido.

Exemplos

Exemplo #1 Exemplo da is_executable()

<?php

$file
= '/home/vincent/arquivo.sh';

if (
is_executable($file)) {
echo
$file.' é executável';
} else {
echo
$file.' não é executável';
}

?>

Notas

Nota: Os resultados desta função são armazenados em cache. Consulte a função clearstatcache() para mais detalhes.

Dica

A partir do PHP 5.0.0, esta função também pode ser usada com alguns wrappers URL. Consulte os Protocolos e Wrappers suportados para determinar quais wrappers suportam a família de funções stat().

Nota: No Windows, um arquivo é considerado executável se for assim reportado pela função GetBinaryType() da API do Windows; por razões de compatibilidade, arquivos com extensões .bat ou .cmd também são considerados executáveis. Antes do PHP 7.4.0, qualquer arquivo não vazio com extensão .exe ou .com era considerado executável. Note que PATHEXT é irrelevante para a função is_executable().

Veja Também

  • is_file() - Informa se o arquivo é um arquivo comum
  • is_link() - Informa se o arquivo é uma ligação simbólica

add a note

User Contributed Notes 5 notes

up
12
Shyammakwana.me
7 years ago
For windows users,

It will return TRUE for EXE extensions. I have checked for MSI, but it returns FALSE.
up
5
divinity76 at gmail dot com
4 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
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
telezhkin at gmail dot com
4 years ago
Find no mention of this, but is_executable returns result for owner permissions only (not for group or other).
up
-1
Anonymous
3 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.
To Top