在shell脚本中使用PHP的HTML输出

时间:2012-06-27 22:33:47

标签: php bash curl

我有一个PHP脚本,可以创建大型复杂表。我正在尝试设置一个shell脚本,该脚本将接受一个I​​D作为参数,然后使用该ID运行PHP脚本并接受PHP脚本的HTML输出,以作为cURL发布到DocRaptor的一部分来制作PDF。

示例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

我该如何正确地做到这一点?

3 个答案:

答案 0 :(得分: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, '"')

参见:

答案 1 :(得分: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'

答案 2 :(得分: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