2012-06-27 62 views
1

我有一個創建大型複雜表的PHP腳本。我試圖設置一個shell腳本,它將接受一個I​​D作爲參數,然後使用該ID運行PHP腳本,並接受PHP腳本的HTML輸出,作爲cURL帖子的一部分用於DocRaptor製作PDF。在shell腳本中使用PHP的HTML輸出

示例shell腳本看起來像這樣,我希望document_content是我生成的HTML。

myHTML = usr/bin/php mytablemaker.php?id=$1 
curl -H "Content-Type:application/json" -d'{"user_credentials":"API_KEY", "doc":{"name":"docraptor_sample.pdf", "document_type":"pdf", "test":"true", "document_content":"myHTML"}}' http://docraptor.com/docs > docraptor_sample.pdf 

我該如何正確地做到這一點?

回答

0

提供的例子沒有提到DOCUMENT_URL參數,但DocRaptor的錯誤消息。

使用我從hakreanttix瞭解到的工作代碼!

curl -H "Content-Type:application/json" -d'{"user_credentials":"API_KEY", "doc":{"name":"docraptor_sample.pdf", "document_type":"pdf", "test":"false", "document_url":"'"http://foo.com/tablemaker.php?CTN=$1"'"}}' http://docraptor.com/docs -o docraptor_sample.pdf 
+0

現在我很困惑。如果您刪除以myHTML = ...開頭的行,該腳本是否仍然有效?我認爲它會,並且你已經救了你自己的一些記憶:) – anttix

+0

你是對的......老闆在我工作之後把我從這個權利中解救出來。他決定使用screencap服務並提供JPEG而不是PDF。我沒有很好的關注。將從答案中刪除。 – jerrygarciuh

2

如果是bash中,這樣的事情應該工作:

myHTML = $(usr/bin/php mytablemaker.php?id=$1) 
curl -H "Content-Type:application/json" -d'{"user_credentials":"API_KEY", "doc":{"name":"docraptor_sample.pdf", "document_type":"pdf", "test":"true", "document_content":"'"$myHTML"'"}}' http://docraptor.com/docs > docraptor_sample.pdf 

但是你不要問HTML但對於HTML作爲一個JSON字符串,所以讓你的PHP腳本編碼字符串作爲JSON,看json_encode。或者在"字符上執行addcslashes($output, '"')

看得那麼清楚:

+0

謝謝! DocRaptor的示例不對HTML AFAICS進行編碼。他們的例子sh在這裏:https://raw.github.com/gist/1045686/5173a5a148eabe6065a67b85018f41a15f099045/doc_raptor_example.sh – jerrygarciuh

+0

他們做的,看看我的意思是看看json中的字符串是如何工作的:http:// json。 org - 如果PHP腳本輸出的HTML包含一個'''例如並且它沒有被轉義,那麼remove服務會認爲'document_content'字符串在那裏結束 - 如果甚至整個json都是無效的並且它完全拒絕操作( !)。 – hakre

+0

heh,生成一個帶有內容的PDF文件:'usr/bin/php reports_scorecard_blank_PDFMAKER.php?id = $ 1'我會嘗試不用引號 – jerrygarciuh

2

,最好的辦法是修改mytablemaker.php採取命令行使用情況考慮在內。 例如像這樣:

if(isset($argv[1])) { 
    $id=$argv[1]; 
} else { 
    $id=$_GET["id"]; 
} 
從BASH

然後你做:

# Get HTML from PHP script and escape quotes and 
# backslashes in string to comply to the JSON specification 
myHTML=$(/usr/bin/php -f mytablemaker.php $1 | sed -e 's/[\\"]/\\&/g') 

# Put the value of myHTML in a JSON call and send it to the server 
curl -H "Content-Type:application/json" -d'{"user_credentials":"API_KEY", "doc":{"name":"docraptor_sample.pdf", "document_type":"pdf", "test":"true", "document_content":"'"$myHTML"'"}}' http://docraptor.com/docs -o docraptor_sample.pdf 

注意在最後一行所做的字符串連接:

'first part'"second part"'third part' 
+0

不確定你對連線的意思是什麼?我正在嘗試你的方式,並在PHP中使用或不使用JSON編碼。DocRaptor報告獲取空字符串。 – jerrygarciuh

+0

您是否編輯了PHP腳本來考慮命令行用例?如果將echo「$ myHTML」作爲第二個命令添加到腳本中會怎樣? – anttix

+0

錯誤信息幫我解決了!他們還接受一個document_url參數,這些參數在示例中未顯示!現在就開始工作吧。謝謝! – jerrygarciuh