For windows users,
It will return TRUE for EXE extensions. I have checked for MSI, but it returns FALSE.
(PHP 4, PHP 5, PHP 7, PHP 8)
is_executable — Diz se um arquivo é executável
filename
Caminho para o arquivo.
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.
Em caso de falha, um E_WARNING
será emitido.
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';
}
?>
Nota: Os resultados desta função são armazenados em cache. Consulte a função clearstatcache() para mais detalhes.
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().
For windows users,
It will return TRUE for EXE extensions. I have checked for MSI, but it returns FALSE.
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;
}
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.
Find no mention of this, but is_executable returns result for owner permissions only (not for group or other).