在shell脚本中使用PHP的HTML输出
我有一个创建大型复杂表的PHP脚本。我正在尝试设置一个shell脚本,它将接受一个ID作为参数,然后使用该ID运行PHP脚本,并接受PHP脚本的HTML输出,作为cURL post to DocRaptor生成PDF的一部分 示例shell脚本如下所示,我希望文档内容是我生成的HTML在shell脚本中使用PHP的HTML输出,php,bash,curl,Php,Bash,Curl,我有一个创建大型复杂表的PHP脚本。我正在尝试设置一个shell脚本,它将接受一个ID作为参数,然后使用该ID运行PHP脚本,并接受PHP脚本的HTML输出,作为cURL post to DocRaptor生成PDF的一部分 示例shell脚本如下所示,我希望文档内容是我生成的HTML myHTML = usr/bin/php mytablemaker.php?id=$1 curl -H "Content-Type:application/json" -d'{"user_credentials"
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,那么类似的操作应该可以:
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,请参阅。或者在角色上做一个测试
另见:
如果这是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,请参阅。或者在角色上做一个测试
另见:
最好的方法是修改mytablemaker.php以考虑命令行用例。 e、 g.像这样:
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'
最好的方法是修改mytablemaker.php以考虑命令行用例。 e、 g.像这样:
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'
提供的示例没有提到document_url参数,但是DocRaptor的错误消息提到了 使用我从和中学到的知识工作代码
提供的示例没有提到document_url参数,但是DocRaptor的错误消息提到了 使用我从和中学到的知识工作代码
谢谢你,哈克雷!DocRaptor中的示例没有对HTML AFAIC进行编码。下面是他们的示例sh:是的,看看我说的json字符串是如何工作的:-如果PHP脚本输出的HTML包含一个示例,并且没有转义,移除服务会认为文档内容字符串到此结束-如果不是整个json都无效并且完全拒绝操作的话!。嘿,这生成了一个包含以下内容的PDF:usr/bin/php reports\u scorecard\u blank\u PDFMAKER.php?id=$1我将尝试不引用是的引用是错误的。如果在PHP文件中使用json_encode,也不需要HTML的外部引号,因为它们是PHP文件的一部分。这样调用PHP解释器肯定会导致以下错误:无法打开输入文件:mytablemaker.PHP?id=1无法将GET变量传递给命令行PHP解释器,除非你使用CGI版本。谢谢你!DocRaptor中的示例没有对HTML AFAIC进行编码。下面是他们的示例sh:是的,看看我说的json字符串是如何工作的:-如果PHP脚本输出的HTML包含一个示例,并且没有转义,移除服务会认为文档内容字符串到此结束-如果不是整个json都无效并且完全拒绝操作的话!。嘿,这生成了一个包含以下内容的PDF:usr/bin/php reports\u scorecard\u blank\u PDFMAKER.php?id=$1我将尝试不引用是的引用是错误的。如果在PHP文件中使用json_encode,也不需要HTML的外部引号,因为它们是PHP文件的一部分。这样调用PHP解释器肯定会导致以下错误:无法打开输入文件:mytablemaker.PHP?id=1无法将GET变量传递给命令行PHP解释器,除非你使用CGI版本。不知道你说的浓缩是什么意思?我正在尝试您的方法,无论是否使用PHP DocRaptor中的JSON编码,都会报告得到一个空字符串。您是否编辑PHP脚本以考虑命令行用例?如果您将echo$myHTML作为第二个命令添加到脚本中,该怎么办?错误消息帮助了我!它们还接受示例中未显示的文档url参数!现在就让它工作吧。谢谢@jerrygarciuh:如果与现有答案不同,请提供工作代码作为答案。然后选择一个你甚至可以自己选择的答案。谢谢你帮助这个网站变得更好。不知道你说的浓缩是什么意思?我正在尝试您的方法,无论是否使用PHP DocRaptor中的JSON编码,都会报告得到一个空字符串。您是否编辑PHP脚本以考虑命令行用例?如果您将echo$myHTML作为第二个命令添加到脚本中,该怎么办?错误消息帮助了我!它们还接受示例中未显示的文档url参数!现在就让它工作吧。谢谢@jerrygarciuh:如果与现有答案不同,请提供工作代码作为答案。然后选择一个你甚至可以自己选择的答案。谢谢你帮助这个网站变得更好。现在我很困惑。如果删除以myHTML=开头的行。。。剧本还能用吗?我想会的,你已经为自己省下了一些记忆:你是对的。。。我刚开始工作,老板就让我离开了。他决定用纱帽
服务和交付JPEG而不是PDF。我没有好好注意。将从答案中删除。但现在我感到困惑。如果删除以myHTML=开头的行。。。剧本还能用吗?我想会的,你已经为自己省下了一些记忆:你是对的。。。我刚开始工作,老板就让我离开了。他决定使用screencap服务,交付JPEG而不是PDF。我没有好好注意。将从答案中删除。