2

我创建了一个将 bash 换行符 [\n] 转换为 HTML 换行符 [< br />] 的网页。这可以通过网页调用来实现

shell_exec("bash /xxx/xxx/script.sh");

在 bash script.sh 中,它运行一系列 SQL 查询以将 bash 换行符替换为 html 换行符,从而允许我将 SQL 数据格式化为基于 HTML 的电子邮件。

`mysql -uXXX -pXXX -e "UPDATE tbl SET var = REPLACE(var, '\n', '<br />')" db`

当我通过 Linux cli 运行这个 bash 脚本时,它运行完美,它发出的电子邮件使用 HTML 换行符。但是当我通过 shell_exec 运行脚本时,它只以纯文本形式显示 bash 换行代码 [\n]。

这是使用 PHP shell_exec 运行 bash 脚本时的电子邮件输出示例。

[ var1 ]
test test test\ntest test test\n test some more
[ var2 ]
test test\ntest\ntest

当我从 linux 运行 bash 脚本时的示例。

[ var1 ]
test test test
test test test
test some more
[ var2 ]
test test
test
test

我知道我的其他 SQL 查询有效,例如 SELECT MAX(id) [获取适当的行和数据字段]。关于为什么相同的脚本在 linux bash 下运行完美(运行 SQL 查询,替换换行符)的任何想法,但不是通过使用 PHP shell_exec 调用它?我在这里错过了什么吗?

* httpd 错误日志状态:sudo:对不起,你必须有一个 tty 才能运行 sudo

当我启用时: sudo: no tty present and no askpass program specified

这可能是 TTY 问题,因为它是用户 apache 调用的命令/脚本吗?如果是这样,任何解决方法?

4

1 回答 1

0

我认为发生的情况是,当您想转义“\”字符和“n”字符时,它正在替换“\n”字符。尝试像这样更改您的请求:

`mysql -uXXX -pXXX -e "UPDATE tbl SET var = REPLACE(var, '\\n', '<br />')" db`
于 2013-01-17T19:13:16.463 回答