to test whether the directory /home/david is executable (regardless of whether it is readable or writeable), issue the command:
$my_isWriteable = @file_exists("/home/david/.")
the @ gets rid of the warning when this command fails when the directory is not executable.
is_executable
(PHP 4, PHP 5)
is_executable — Tells whether the filename is executable
Description
bool is_executable
( string
$filename
)Tells whether the filename is executable.
Parameters
-
filename -
Path to the file.
Return Values
Returns TRUE if the filename exists and is executable, or FALSE on
error.
Changelog
| Version | Description |
|---|---|
| 5.0.0 | is_executable() became available with Windows |
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';
}
?>
Errors/Exceptions
Upon failure, an E_WARNING is emitted.
Notes
Note: The results of this function are cached. See clearstatcache() for more details.
Tip
As of PHP 5.0.0, this function can also be used with some URL wrappers. Refer to Supported Protocols and Wrappers to determine which wrappers support stat() family of functionality.
david at littlesystems dot com dot au ¶
10 years ago
DaveRandom ¶
3 months ago
is_executable() cannot necessarily be relied upon to return sensible results on Windows. Unlike *nix, it does not check permissions, it uses the Windows API call GetBinaryType(), which checks specifically whether the file path is a binary executable file.
This means, crucially, that it will never return TRUE for batch files or other scripts that could otherwise be executed directly when called through the shell.
PHP source code ref: http://lxr.php.net/xref/PHP_5_4/TSRM/tsrm_win32.c#213
GetBinaryType() documentation: http://msdn.microsoft.com/en-gb/library/windows/desktop/aa364819(v=vs.85).aspx
Buuyo ¶
8 years ago
The change doesn't appear to be documented, so I thought I would mention it. In php5, as opposed to php4, you can no longer rely on is_executable to check the executable bit on a directory in 'nix. You can still use the first note's method to check if a directory is traversable:
@file_exists("adirectory/.");
