Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
exec()哪个/哪里可以访问mysql php?_Php_Command Line - Fatal编程技术网

exec()哪个/哪里可以访问mysql php?

exec()哪个/哪里可以访问mysql php?,php,command-line,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( "m

在调用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}}}" );
}
然而,这不是毫无意义吗?如果which能够猜出正在使用哪个mysql路径,那么已经提供了该路径,“else”就可以工作了。如果它不存在,两个选项都不起作用


我想知道的是,是否曾经有过这样一种情况:直接通过exec调用mysql或git之类的命令行实用程序是不起作用的,但是尝试先猜测将要通过的路径或将要通过的路径是什么?

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

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



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

中查找二进制名称。只有在您的系统上没有
的情况下,才会出现else情况

无论如何,这是一种糟糕的做法:


如果在搜索路径中找到
which
但没有找到
mysql
,则
exec
会成功执行which命令,因此第一个条件为true。但在本例中,$mysql var包含一个类似“在您的路径中没有mysql”的字符串。这当然会导致一个错误,如果执行本身。

可能是这段代码的作者,想想当
哪个
命令不存在时的变体在这种情况下,MySQL命令将是相同的,因此在运行什么时没有差异,只是使用“哪个”路径运行(请参阅我在那里做的:)请在您看到的地方共享代码。对于MySQL,这是一个垃圾代码,如果有可用的本机驱动程序,您不应该从命令行运行。除此之外,如果它没有被
哪个
检测到,我看不出在
else
的情况下它是如何被猜测的。否则可能是任何其他的选择,它只是在那里说明这一点。。。我的主要问题是,如果“哪个mysql”可以工作,那么简单的“mysql”不也可以工作吗?谢谢你的详细回答。