is_executable
(PHP 4, PHP 5, PHP 7, PHP 8)
is_executable — ファイルが実行可能かどうかを調べる
パラメータ
filename
-
ファイルへのパス。
戻り値
ファイルが存在し、かつそれが実行可能な場合に true
、
エラー時に false
を返します。
POSIX 準拠のシステムでは、
ファイルパーミッションの実行ビットが立っているものが実行可能です。
Windows については、下記を参照ください。
エラー / 例外
失敗したときは E_WARNING
が発生します。
例
例1 is_executable() の例
<?php
$file = '/home/vincent/somefile.sh';
if (is_executable($file)) {
echo $file.' は実行可能です';
} else {
echo $file.' は実行可能ではありません';
}
?>
注意
注意: この関数の結果は キャッシュされます。詳細は、clearstatcache() を参照してください。
ヒント
PHP 5.0.0
以降、この関数は、
何らかの URL ラッパーと組合せて使用することができます。
どのラッパーが stat() ファミリーをサポートしているかを調べるには
サポートするプロトコル/ラッパー を参照してください。
注意: Windows では、Windows API
GetBinaryType()
が適切に実行可能ファイルと報告した場合に、実行可能と見なされます。 後方互換のため、拡張子 .bat や .cmd が付いたファイルも同様に実行可能と見なされます。 PHP 7.4.0 より前のバージョンでは、 拡張子 .bat や .cmd が付いた空でないファイルは実行可能と見なされていました。 環境変数 PATHEXT は、is_executable() と無関係なことに注意が必要です。
+add a note
User Contributed Notes 5 notes
divinity76 at gmail dot com ¶
5 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 ¶
8 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 ¶
4 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.
Anonymous ¶
4 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.
telezhkin at gmail dot com ¶
5 years ago
Find no mention of this, but is_executable returns result for owner permissions only (not for group or other).