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 — Indique si le fichier est exécutable
filename
Chemin vers le fichier.
Retourne true
si le fichier existe et qu'il est exécutable, false
sinon.
Sur les systèmes POSIX, un fichier est exécutable si le bit exécutable des
permissions de fichier est défini. Sur Windows, voir la note ci-dessous.
En cas d'échec, une alerte de type E_WARNING
sera émise.
Exemple #1 Exemple avec is_executable()
<?php
$file = '/home/vincent/somefile.sh';
if (is_executable($file)) {
echo $file.' est exécutable';
} else {
echo $file.' n\'est pas exécutable';
}
?>
Note: Les résultats de cette fonction sont mis en cache. Voyez la fonction clearstatcache() pour plus de détails.
À partir de PHP 5.0.0, cette fonction peut aussi être utilisée avec quelques protocoles url. Lisez Liste des protocoles et des gestionnaires supportés pour connaître les protocoles supportant la famille de fonctionnalités de stat().
Note: Sur Windows, un fichier est considéré exécutable, si c'est un fichier proprement exécutable tel que rapporté par l'API Win
GetBinaryType()
; pour des raisons de rétro-compatibilité, les fichiers qui ont comme extension .bat ou .cmd sont aussi considérés comme exécutables. Antérieur à PHP 7.4.0, tout fichier non vide avec une extension .exe ou .com était considéré exécutable. À noter que PATHEXT n'est pas pertinent pour 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).