note 123883 modified in function.is-executable by salathe
| From: | salathe@php.net | Date: | Sun, 26 May 2019 10:06:01 +0000 |
| Subject: | note 123883 modified in function.is-executable by salathe | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-211133@lists.php.net to get a copy of this message | ||
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;
}
--was--
is_executable() does not check the PATH environment variable, so if your current working dir is
/dir/ and you /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;
}
$separator = (stripos(PHP_OS_FAMILY, "win") === false ? ":" :
";");
$paths = explode($separator, getenv("PATH"));
foreach ($paths as $path) {
if (is_executable($path . DIRECTORY_SEPARATOR . $filename)) {
return true;
}
}
return false;
}
http://php.net/manual/en/function.is-executable.php