1

我有一个创建大型复杂表的 PHP 脚本。我正在尝试设置一个 shell 脚本,该脚本将接受 ID 作为参数,然后使用 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

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

4

3 回答 3

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, '"')"人物做一个。

另见:

于 2012-06-27T22:40:44.157 回答
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'
于 2012-06-27T22:51:40.710 回答
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
于 2012-06-28T22:56:11.980 回答