2013-01-10 24 views
2

我創建了一個網頁,可將bash換行符[\ n]轉換爲HTML換行符[< br />]。這是通過具有網頁呼叫將bash換行符轉換爲HTML換行符;在BASH中運行良好,但不通過shell_exec

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查詢,替換換行符),而不是通過用shell_exec調用它?我在這裏錯過了什麼嗎?

* httpd的錯誤日誌指出: 須藤:對不起,你必須有一個tty運行sudo的

,當我啓用: 須藤:沒有TTY出現,也沒有askpass程序指定

莫非這是一個TTY問題,因爲它是由用戶apache調用的命令/腳本?如果是這樣,任何解決方法?

+0

我知道這並不能解決你問的問題,但是你的bash腳本發出的電子郵件或者是'shell_exec'的輸出傳遞給PHP腳本,然後發出消息?如果是後者,那麼你可以使用['nl2br()'](http://php.net/nl2br)在PHP端執行newline->'
'標籤轉換。 – RikkusRukkus

+5

使用'shell_exec'是在PHP中執行SQL查詢的最佳方式嗎? **提示:** [no](http://php.net/manual/en/book.mysql.php)。 – kojiro

+1

'sudo'錯誤消息顯示問題出現在您未在此處發佈的代碼中。無論如何,你的方法似乎相當奇怪。爲什麼你不會在PHP中進行替換,如果這就是你正在使用的? – tripleee

回答

0

我認爲會發生的是,當您想要跳過'\'字符和'n'字符時,它正在替換'\ n'字符。嘗試改變你的請求是這樣的:

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