2

bash の改行 [\n] を HTML の改行 [< br />] に変換する Web ページを作成しました。これは、Webページを呼び出すことで機能します

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

SELECT MAX(id) [適切な行とデータ フィールドを取得する] など、他の SQL クエリが機能することはわかっています。同じスクリプトが Linux bash で完全に正常に実行される理由 (SQL クエリを実行し、改行を置き換える) についてのアイデアはありますが、PHP shell_exec で呼び出すことはできませんか? ここで何か不足していますか?

* httpd エラー ログの状態: sudo: 申し訳ありませんが、sudo を実行するには tty が必要です

sudo: tty が存在せず、askpass プログラムが指定されていない

ユーザーapacheによって呼び出されているコマンド/スクリプトであるため、これはTTYの問題でしょうか? もしそうなら、回避策はありますか?

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 に答える