2024 PHP Conference Japan

is_executable

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

is_executable判斷檔名是否可執行

描述

is_executable(字串 $filename): 布林值

判斷給定的檔名是否可執行。

參數

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 系統上,如果 Win API GetBinaryType() 報告該檔案為可執行檔,則該檔案即視為可執行檔;為了向下相容,副檔名為 .bat.cmd 的檔案也被視為可執行檔。在 PHP 7.4.0 之前,任何非空的 .exe.com 副檔名檔案都被視為可執行檔。請注意,PATHEXTis_executable() 無關。

參見

  • is_file() - 判斷檔案名稱是否為一般檔案
  • is_link() - 判斷檔案名稱是否為符號連結

新增註釋

使用者提供的註釋 5 則註釋

divinity76 at gmail dot com
5 年前
is_executable() 並不會檢查 PATH 環境變數,因此,如果您的目前工作目錄是 /dir/,且您的 PATH 環境變數中有 /bin/,並且檔案 /bin/ffmpeg 存在,則您仍然可以執行 shell_exec("ffmpeg"),但 is_executable("ffmpeg") 會返回 false。

如果您正在尋找一個也會考慮 PATH 環境變數的 is_executable 版本,請嘗試以下程式碼

<?php

函式 is_executable_pathenv(字串 $filename): 布林值
{
如果 (
is_executable($filename)) {
返回
true;
}
如果 (
$filename !== basename($filename)) {
返回
false;
}
$paths = explode(PATH_SEPARATOR, getenv("PATH"));
foreach (
$paths as $path) {
如果 (
is_executable($path . DIRECTORY_SEPARATOR . $filename)) {
返回
true;
}
}
返回
false;
}
Shyammakwana.me
8 年前
對於 Windows 使用者,

它會針對 EXE 副檔名回傳 TRUE。我檢查過 MSI,但它回傳 FALSE。
nick at NOSPAM dot ogredata dot com
4 年前
這個函式會回傳執行 PHP 的程序的值。

/var/somebody/files 只有擁有者可執行 (700)。

它包含了全域可讀的檔案,但沒有執行權限,PHP 無法存取目錄以下載檔案。

is_executable() 回傳 false。

將目錄設為全域可執行 (701) 後,PHP 就能存取。下載成功。而且 is_executable() 回傳 true。

我猜想,如果我將 PHP 加入資料夾的群組,並賦予該群組執行權限,應該也能成功。
匿名
4 年前
在 Windows 下,對於目錄似乎總是回傳 false。

例如

<?php
$dir
= __DIR__;
$result = is_executable($dir) ? 'true' : 'false';

如果(
$result){
echo
$result;
}
?>

所以不要用這個來檢查資料夾是否可遍歷,因為這會變成系統相依的程式碼。
telezhkin at gmail dot com
5 年前
沒有找到相關說明,但 is_executable 只會回傳擁有者權限的結果(而不是群組或其他)。
To Top