exec()哪个/哪里可以访问mysql php?
在调用MySQL这样的程序时,我在代码中见过几次这样的事情,这似乎是一种跨平台的努力: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
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”不也可以工作吗?谢谢你的详细回答。