【问题标题】:Use HTML output of PHP in shell script在 shell 脚本中使用 PHP 的 HTML 输出
【发布时间】:2012-06-29 10:43:56
【问题描述】:

我有一个创建大型复杂表的 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

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

【问题讨论】:

    标签: php bash curl


    【解决方案1】:

    提供的示例未提及 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
    

    【讨论】:

    • 现在我很困惑。如果删除以 myHTML=... 开头的行,脚本是否仍然有效?我想它会的,你已经为自己节省了一些记忆:)
    • 你是对的......老板在我开始工作后就把我从这件事上拿了下来。他决定使用屏幕截图服务并提供 JPEG 而不是 PDF。我没有好好注意。将从答案中删除。
    【解决方案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'
    

    【讨论】:

    • 不确定您对串联的含义是什么?我正在尝试您的方式,并且在 PHP DocRaptor 中使用或不使用 JSON 编码报告得到一个空字符串。
    • 您是否编辑了 PHP 脚本以考虑命令行用例?如果将 echo "$myHTML" 作为第二个命令添加到脚本中会怎样。
    • 错误信息帮助了我!他们还接受示例中未显示的 document_url 参数!现在让它工作。谢谢!
    • @jerrygarciuh:如果工作代码与现有答案不同,请提供工作代码作为答案。然后选择一个答案(您甚至可以选择自己的答案)。感谢您帮助使本网站变得更好。
    【解决方案3】:

    如果那是 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, '"')

    参见:

    【讨论】:

    • 谢谢哈克雷!来自 DocRaptor 的示例不编码 HTML AFAICS。他们的示例 sh 在这里:raw.github.com/gist/1045686/…
    • 他们这样做了,看看我的意思,看看 json 中的字符串是如何工作的:json.org - 如果 PHP 脚本输出的 HTML 包含例如 " 并且没有转义,则删除服务会认为 document_content 字符串在那里结束 - 如果甚至整个 json 都无效并且它完全拒绝操作(!)。
    • 嘿,生成的 PDF 包含以下内容:usr/bin/php reports_scorecard_blank_PDFMAKER.php?id=$1 我会尝试不带引号
    • 是的,引号是错误的。如果你在 PHP 文件中使用 json_encode,你也不需要 HTML 的外部引号,因为它们是其中的一部分。
    • 像这样调用 PHP 解释器肯定会导致以下错误: 无法打开输入文件:mytablemaker.php?id=1 您不能将 GET 变量传递给命令行 PHP 解释器,除非您使用的是 CGI 版本。
    猜你喜欢
    • 2021-04-18
    • 2015-12-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多