Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.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 exec()但从进程列表中隐藏参数?_Php_Mysql_Shell - Fatal编程技术网

是否可以运行PHP exec()但从进程列表中隐藏参数?

是否可以运行PHP exec()但从进程列表中隐藏参数?,php,mysql,shell,Php,Mysql,Shell,我希望有一个受到适当保护的PHP基于web的工具来运行mysqlcheck,以了解一般数据库表的运行状况,但我不希望密码在进程列表中可见。我想做这样的事情: $output = shell_exec('mysqlcheck -Ac -uroot -pxxxxx -hhostname'); // strip lines that's OK echo '<pre>'.preg_replace('/^.+\\sOK$\\n?/m', '', $output).'</pre>'

我希望有一个受到适当保护的PHP基于web的工具来运行
mysqlcheck
,以了解一般数据库表的运行状况,但我不希望密码在进程列表中可见。我想做这样的事情:

$output = shell_exec('mysqlcheck -Ac -uroot -pxxxxx -hhostname');

// strip lines that's OK
echo '<pre>'.preg_replace('/^.+\\sOK$\\n?/m', '', $output).'</pre>'; 
$output=shell_exec('mysqlcheck-Ac-uroot-pxxx-hhostname');
//剥线没关系
回显''.'预替换('/^.+\\sOK$\\n?/m',''.$output.'';
不幸的是,对于
shell_exec()
,我必须在命令行中包含密码,但担心密码会显示在进程列表中(
ps-a | grep mysqlcheck

在我的测试机器上使用mariadb 5.5,mysqlcheck不会在进程列表中显示密码,但我的生产机器没有运行mariadb,也没有运行其他操作系统,我希望安全起见,不要在生产机器上运行这些测试


是否所有版本的mysql都会在进程列表中隐藏密码?我的问题没有问题吗?

是的,因为至少是MySQL 5.1,客户端会在命令行上隐藏密码

我在2009年发现了前MySQL社区经理Lenz Grimmer的博客,他在博客中链接了MySQL 5.1源代码中的相关代码

您也可以完全不在命令行上传递密码,而是将用户/密码凭据存储在PHP有权读取的文件中,然后作为以下方式执行客户端:

mysqlcheck -Ac -uroot -p -hhostname

文件名就是一个例子;可以指定所需的任何路径。关键是大多数MySQL客户机工具都接受默认的额外文件选项。有关更多信息,请参阅。

这是一个真正的问题,您的操作系统将显示它,只是可能不会显示在默认视图中

您可以改为允许您读写该文件打开的流


将提示输入密码,您可以使用proc_open中的管道写入该密码

如果您创建一个bash脚本并从中运行mysql会怎么样;然后从exec调用che bash脚本?这取决于您正在执行的应用程序是否重写进程列表以删除密码等敏感内容,即使这样,也有一点竞争条件,在子进程进入重写阶段之前,pw仍然可用。根据手册:
mysqlcheck使用SQL语句检查表、修复表、分析表和优化表,方便用户使用。
。因此,您可以使用PDO或mysqli在php脚本中编写自己的版本,而无需使用
shell_exec
。有多种方法,但是在这种情况下,使用mysql,您可以通过指定@jeroen来更轻松地完成此操作。循环php脚本是我的备份计划,但是,使用包含的二进制文件来精确地完成这项工作,如果可行的话,这似乎是一个更好的选择。感谢您提供有关mysqlcheck的详细信息。
mysqlcheck -Ac -uroot -p -hhostname