W3docs

is_executable()

La fonction is_executable() vérifie si un fichier existe et peut être exécuté. Elle retourne true si le fichier est exécutable, false sinon.

Qu'est-ce que la fonction is_executable() ?

is_executable() est une fonction PHP intégrée qui indique si un fichier existe et peut être exécuté en tant que programme par le processus courant. Elle retourne true uniquement lorsque les deux conditions sont remplies ; sinon elle retourne false.

« Exécutable » signifie ici que le système d'exploitation autorise l'exécution du fichier — par exemple un script shell, un binaire compilé ou un .exe sous Windows. Un fichier texte ordinaire ou un fichier source .php n'est normalement pas exécutable, même si PHP peut le lire.

Cette page présente la syntaxe, ce que signifie réellement la valeur de retour, les différences de comportement selon le système d'exploitation, ainsi que les pièges courants (mise en cache, fichiers manquants, bits de permission).

Syntaxe

is_executable(string $filename): bool
ParamètreDescription
$filenameChemin vers le fichier à vérifier. Peut être relatif au répertoire de travail du script ou un chemin absolu.

Valeur de retourtrue si le fichier existe et est exécutable, false sinon. PHP émet également un E_WARNING si le chemin est invalide (par exemple, si un répertoire dans le chemin ne peut pas être parcouru).

Un exemple basique

php— editable, runs on the server

La fonction retourne un boolean, ce qui permet de l'utiliser directement dans une condition if. Ici, on pointe vers le binaire PHP ; sur un serveur Linux typique, ce chemin est exécutable et la première branche s'exécute. Le chemin exact varie selon le système, c'est pourquoi l'exemple suivant crée un fichier entièrement contrôlé.

Créer et tester un fichier

La vérification est plus significative quand vous contrôlez les bits de permission du fichier. L'exemple ci-dessous écrit un petit script shell, le marque comme exécutable avec chmod(), et confirme le résultat :

<?php

$script = sys_get_temp_dir() . '/hello.sh';
file_put_contents($script, "#!/bin/sh\necho hi\n");

// Before chmod: readable but not executable.
var_dump(is_executable($script)); // bool(false)

chmod($script, 0755);             // owner rwx, group/other r-x
clearstatcache();                 // forget the cached result

var_dump(is_executable($script)); // bool(true)

unlink($script);

Deux points à noter :

  • Le fichier n'est pas exécutable tant que le bit d'autorisation d'exécution n'est pas défini, même s'il existait déjà et était lisible.
  • Après avoir modifié les permissions, vous devez appeler clearstatcache() (voir ci-dessous).

Consultez chmod() pour savoir comment le mode octal 0755 se traduit en permissions propriétaire/groupe/autres.

Le piège du cache stat

PHP met en cache le résultat des appels stat du système de fichiers (utilisés par is_executable(), is_readable(), is_writable(), file_exists(), etc.) pour des raisons de performance. Si vous modifiez les permissions d'un fichier pendant la même requête et que vous le revérifiez, vous pouvez obtenir l'ancienne réponse :

<?php

$file = sys_get_temp_dir() . '/cache-demo';
touch($file);

is_executable($file);   // result is now cached for this path

chmod($file, 0755);
var_dump(is_executable($file)); // may still report the OLD value

clearstatcache();
var_dump(is_executable($file)); // bool(true) — fresh check

unlink($file);

Appelez clearstatcache() après tout chmod(), chown(), rename() ou unlink() si vous souhaitez re-tester le même chemin dans la même exécution.

Comportement selon le système d'exploitation

  • Linux / macOS — le résultat suit le bit d'exécution Unix (x) pour la classe utilisateur/groupe/autres concernée. Un fichier avec le mode 0644 n'est pas exécutable ; 0755 l'est.
  • Windows — il n'existe pas de bit de permission d'exécution. PHP déduit « exécutable » à partir de l'extension du fichier : les chemins se terminant par .exe, .bat, .cmd ou .com sont traités comme exécutables. Avant PHP 7.4, is_executable() retournait toujours false sur Windows, donc testez sur votre version cible.

En raison de ces différences, ne supposez jamais qu'un script qui retourne true sur Linux fera de même sur Windows, et vice versa.

Quand l'utiliser ?

  • Avant d'exécuter un programme externe avec exec(), shell_exec() ou proc_open() — vérifiez que le binaire est réellement exécutable et renvoyez une erreur claire s'il ne l'est pas, plutôt que d'échouer en profondeur dans l'appel.
  • Déploiement / vérifications de santé — confirmez qu'un script auxiliaire (une tâche cron, un hook de build) possède les bonnes permissions après avoir été copié ou extrait d'un système de contrôle de version, où le bit d'exécution est parfois perdu.
  • Contrôle de sécurité — combiné avec un chemin fixe, refusez d'exécuter quoi que ce soit qui ne soit pas un exécutable connu et correctement autorisé.

Fonctions associées

is_executable() fait partie d'une famille de vérifications de permissions et de types — choisissez celle qui correspond à la question posée :

  • is_file() — le chemin est-il un fichier ordinaire (pas un répertoire) ?
  • is_dir() — le chemin est-il un répertoire ?
  • is_readable() — le fichier peut-il être lu ?
  • is_writable() — le fichier peut-il être écrit ?
  • file_exists() — le chemin existe-t-il (fichier ou répertoire) ?
  • fileperms() — lire les bits de permission bruts.
  • chmod() — modifier les bits de permission d'un fichier.

Conclusion

is_executable() retourne true uniquement lorsqu'un fichier existe et possède la permission d'exécution pour le processus courant. Retenez trois choses : le résultat est dépendant du système d'exploitation (bit d'exécution Unix contre extension Windows), il est mis en cache par stat donc appelez clearstatcache() après avoir modifié les permissions, et il est plus utile comme garde avant d'exécuter des programmes externes.

Pratique

Pratique
Que fait la fonction is_executable() en PHP ?
Que fait la fonction is_executable() en PHP ?
Was this page helpful?