Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查命令是否为;“可运行”;在PHP中?_Php - Fatal编程技术网

如何检查命令是否为;“可运行”;在PHP中?

如何检查命令是否为;“可运行”;在PHP中?,php,Php,文件\u exists()检查文件是否存在 但是,“pg_ctl”在我的系统上是有效的命令,因为C:\PostgreSQL\bin在我的路径中,所以运行“pg_ctl”实际上运行C:\PostgreSQL\bin\pg_ctl.exe file_exists将报告“pg_ctl”不存在,但它仍然“有点”存在,因为它可以运行 如何检查给定的路径或字符串(如“pg_ctl”)是否转换为有效的命令 我已经尝试了realpath。对于realpath('pg_ctl'),它返回一个布尔值false,因此

文件\u exists()
检查文件是否存在

但是,“pg_ctl”在我的系统上是有效的命令,因为
C:\PostgreSQL\bin
在我的
路径中,所以运行“pg_ctl”实际上运行
C:\PostgreSQL\bin\pg_ctl.exe

file_exists
将报告“pg_ctl”不存在,但它仍然“有点”存在,因为它可以运行

如何检查给定的路径或字符串(如“pg_ctl”)是否转换为有效的命令


我已经尝试了
realpath
。对于
realpath('pg_ctl')
,它返回一个布尔值false,因此这不起作用。

在Windows上,您可以使用
where.exe
,如果路径中存在路径,它将返回文件的路径

shell_exec('where pg_ctl');
应返回:

C:\PostgreSQL\bin\pg\u ctl.exe

因此,在输出中检查它:

$cmd = 'pg_ctl';
var_dump( strpos(shell_exec("where $cmd"), $cmd) !== false );

请参阅。@AlexHowansky
var_dump(是可执行文件('pg_ctl')
=
bool(false)
是可执行文件()
需要文件的完整路径(或者它看起来在当前目录中)——它不会遍历您的路径。PHP不关心(或不知道)您的路径——这是shell的特性,而不是PHP的特性。如果你想扫描路径中的目录,你需要自己扫描。@AlexHowansky整个要点是检查命令……PHP不是shell,它不知道什么是“命令”。在缺少shell exec的情况下(您不应该这样做),您必须编写代码来拆分冒号上的路径,在dir上迭代,并在命令名上运行is_executable(),就像它是该dir中的文件一样。@AlexHowansky INFO:找不到给定模式的文件。但是就像所有的事情一样,不要相信用户的输入,但在这个问题上似乎不是这样。它在生成错误消息后仍然运行第二个命令。尝试
where foo&bar
,您将收到信息消息,然后出现无法运行bar的错误。@AlexHowansky我知道这个概念,但我的
c:
仍然完好无损;-)如果我能正确回忆(已经有一段时间了),默认情况下,格式会提示用户确认,并且会有一个类似于
\y
的开关来跳过它,但我不打算对此进行测试。:)