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

13 浏览
0 Comments

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

我有一个创建大型复杂表格的PHP脚本。我正试图设置一个shell脚本,该脚本将接受一个ID作为参数,然后使用该ID运行PHP脚本,并接受PHP脚本的HTML输出,用作cURL POST到DocRaptor以生成PDF的一部分。\n示例shell脚本如下,我希望document_content是我生成的HTML。\n

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

\n请问我应该如何正确操作?

0
0 Comments

问题的出现原因是代码中缺少一个名为document_url的参数,但是DocRaptor的错误信息中提到了这个参数。

解决方法是根据来自hakre和anttix的经验,使用以下代码:

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

然后,文中提到了一个关于删除以myHTML=开头的那行代码的问题,如果删除这行代码,脚本是否仍然能正常工作。答案是可以,这样做可以节省内存。

最后,作者表示自己被老板调走了,不再继续这个项目,老板决定使用一个屏幕捕捉服务,并提供JPEG而不是PDF。作者表示自己没有好好注意,将从答案中删除相关内容。

0
0 Comments

问题的原因是PHP脚本(mytablemaker.php)在命令行使用时无法输出HTML内容,只能在Web页面中显示。解决方法是修改mytablemaker.php脚本,使其能够根据命令行参数或GET请求参数来获取id,并输出HTML内容。然后,在Bash脚本中使用PHP命令获取HTML内容,并对字符串中的引号和反斜杠进行转义以符合JSON规范。最后,将HTML内容作为参数发送给服务器。

具体的解决方法如下:

首先,在mytablemaker.php脚本中添加以下代码,以判断是通过命令行参数还是GET请求参数来获取id:

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

然后,在Bash脚本中使用以下命令获取HTML内容,并对字符串中的引号和反斜杠进行转义:

myHTML=$(/usr/bin/php -f mytablemaker.php $1 | sed -e 's/[\\"]/\\&/g')

接下来,将HTML内容作为参数发送给服务器,可以使用curl命令,命令如下:

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

需要注意的是,在最后一行的字符串拼接中,使用了单引号和双引号进行拼接,以保证变量$myHTML的值能够正确地被解析。

如果在使用过程中遇到问题,可以在PHP脚本中添加echo "$myHTML"语句,以便查看HTML内容是否正确获取。

通过以上方法,可以解决PHP脚本在命令行使用时无法输出HTML内容的问题,并将HTML内容作为参数发送给服务器。

0
0 Comments

问题的原因是在shell脚本中使用了PHP的HTML输出作为变量,但是没有正确处理HTML中的特殊字符,导致脚本无法正常执行。解决方法是使用PHP的json_encode函数对HTML进行编码,或者使用addcslashes函数对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

此外,还可以参考以下链接了解更多相关信息:

- [Bash Scripting: Redirect output into variable](https://stackoverflow.com/q/5701653/367456)

- [json.org](http://json.org)

- [json_encode](http://php.net/json_encode)

- [addcslashes](http://php.net/addcslashes)

- [ob_get_clean](http://php.net/ob_get_clean)

注意,如果要将GET变量传递给命令行PHP解释器,需要使用CGI版本的PHP解释器。另外,使用类似`a = "value"`的方式在shell中赋值会导致命令找不到的错误。

0