exec()哪个/哪里有mysql php?

时间:2014-12-23 09:05:31

标签: php command-line

我在代码中已经多次看到这样的事情,这似乎是在调用像MySQL这样的程序时跨平台的努力:

if ( $mysql = exec( 'which mysql' ) ) {
    // Use the path returned from 'which'. 
    exec( "$mysql {{{SOME MYSQL CMD HERE}}}" );
} else {
    // The call failed, so try and guess MySQL path.
    exec( "mysql {{{SOME MYSQL CMD HERE}}}" );
}

然而,这不是没有意义的吗?如果哪个能够猜出正在使用哪个mysql路径,那么已经提供了路径并且“' else'本来会有用的。如果它不存在,则两种选择都不起作用。

我感到好奇的是,是否曾经有过这样的情况:直接通过exec调用命令行实用程序如mysql或git不会起作用,但是试图首先猜测路径到哪个或哪里?

2 个答案:

答案 0 :(得分:3)

你正在尝试的是毫无意义的。 which正在迭代$PATH环境变量的元素,并尝试在那里找到名为mysql的二进制文件。

如果您只是发布mysql(没有路径),那么shell将与which执行相同的操作,但随后会执行命令。


您必须知道的一件重要事情:与glibc函数不同,PHP的exec()执行shell中的$command - 不是直接!您可以使用没有路径的二进制名称,因为它在shell中执行,shell尝试在$PATH中查找二进制文件。

答案 1 :(得分:0)

只有在您的系统上没有which时才会触及其他情况。

无论如何这是不好的做法:

如果在搜索路径中找到了which但没有找到mysql,则exec无论如何都会成功执行which-command,因此第一个条件为真。但在这种情况下,$ mysql-var包含一个字符串,其中包含" YOUR_PATH_HERE"中没有mysql。如果自己执行,这当然会导致错误。