gpt4 book ai didi

php - 通过 php 执行时,MySQL 输出未格式化

转载 作者:行者123 更新时间:2023-12-03 21:58:36 25 4
gpt4 key购买 nike

我正在尝试从 mysql 获取格式化输出,因为它通常在从 shell 执行时显示。这是讨论 herehere ,但这对我不起作用。

例如,当我在我的 shell 中运行它时:

mysql -e "select language_id, name, image from `language`;" my_database

我得到预期的输出:

+-------------+-----------+--------+
| language_id | name | image |
+-------------+-----------+--------+
| 1 | English | gb.png |
| 2 | Français | fr.png |
+-------------+-----------+--------+

但是当我从 php cli 做同样的事情时:
passthru('mysql -e "select language_id, name, image from `language`;" my_database');

它没有格式化:

language_id name    image
1 English gb.png
2 Français fr.png

我试过 passthru , system , exec , 和 shell_exec但都返回相同的未格式化输出。 为什么从 php 运行时输出不同?

最佳答案

当您运行时 strace mysql命令你可以看到这些行

ioctl(0, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0

这是用于检查 stdin 的终端属性的系统调用和 stdout (见 tty_ioctl(4) )。

这意味着, mysql 正在检查它是否输出到终端/tty 或管道 并因此而表现不同。
由于 PHP 提供的所有命令都基于对进程进行 fork 并将输出通过管道传输回 PHP,因此您将无法生成 mysql表现得就像在真正的终端中运行一样。

注意:您可以通过调用在 shell 中重现此行为

mysql -e "select language_id, name, image from `language`;" my_database | tee

关于php - 通过 php 执行时,MySQL 输出未格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60741025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com