◐ Shell
clean mode source ↗

PHP: is_executable - Manual

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

is_executableTells whether the filename is executable

Description

function is_executable(string $filename): bool

Parameters

filename

Path to the file.

Return Values

Returns true if the filename exists and is executable, or false on error. On POSIX systems, a file is executable if the executable bit of the file permissions is set. For Windows, see the note below.

Errors/Exceptions

Upon failure, an E_WARNING is emitted.

Examples

Example #1 is_executable() example

<?php

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

if (is_executable($file)) {
    echo $file.' is executable';
} else {
    echo $file.' is not executable';
}

?>

Notes

Note: The results of this function are cached. See clearstatcache() for more details.

Note: On Windows, a file is considered executable, if it is a properly executable file as reported by the Win API GetBinaryType(); for BC reasons, files with a .bat or .cmd extension are also considered executable. Prior to PHP 7.4.0, any non-empty file with a .exe or .com extension was considered executable. Note that PATHEXT is irrelevant for is_executable().

See Also

  • is_file() - Tells whether the filename is a regular file
  • is_link() - Tells whether the filename is a symbolic link

Found A Problem?

divinity76 at gmail dot com

7 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;
}

Shyammakwana.me

9 years ago

For windows users, 

It will return TRUE for EXE extensions. I have checked for MSI, but it returns FALSE.

nick at NOSPAM dot ogredata dot com

6 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.

telezhkin at gmail dot com

7 years ago

Find no mention of this, but is_executable returns result for owner permissions only (not for group or other).

Anonymous

5 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.