回声和打印在php的“live”版本中不起作用吗?

时间:2017-02-23 21:13:37

标签: php json printing echo messenger

所以我对编程很陌生,而且我没有其他任何东西来描述它,而是一个实时脚本,所以请用官方术语来纠正我。无论如何,不​​久前,我在php中制作了这个机器人,并在我的浏览器中使用xampp在我的Mac上运行它。我可以很容易地使用echo和print_r来打印数组和网页上的任何内容。只有当我重新加载页面时,脚本才会运行,所以这就是我所说的“不活”。现在我已经开始尝试用PHP创建一个messenger bot,我正在使用cloud9。我也在浏览器中看到脚本,但在这里,我只能看到echo和print的产品,如果它们是我输入的简单字符串,例如:

print_r("stack overflow is life");

这将在我的浏览器中按预期打印。然而,这就是我谈论“实时”脚本运行的地方。它不是重新加载页面,而是实时运行。信使机器人将始终在服务器上处于活动状态,并立即回复发送给它的消息。我使用这段代码:

/* receive and send messages */ 
$input = json_decode(file_get_contents('php://input'), true);
file_put_contents("fb.txt", file_get_contents('php://input'));
echo ("<pre>");    print_r($input);
echo ("</pre>");

现在,在这种情况下,不打印$input。我什么也没看见。现在我不知道这是与现场服务器响应有关,还是什么,但我需要知道如何看到这是浏览器。我已经测试过是否确实有一个成功转换的JSON到数组,因为我能够使用$input中的信息来回复我的facebook消息并且机器人工作。我也可以将JSON输出到txt文件,并在那里看到它,但是没有<pre>标签,因此很难读取,我希望在浏览器中看到漂亮的干净数组。所有代码都围绕着这个,所以它非常重要。

1 个答案:

答案 0 :(得分:0)

因此,您正在将原始输入写入文件,json将其单独解码。所以很可能你实际上没有得到有效的json。

如果确实传递了无效的json,json_decode会返回NULL,这就是为什么当你var_dump时看到这一点 - 所以你必须致电json_last_error以确保它有效

来自文档:

  

http://php.net/manual/en/function.json-decode.php

     

以适当的PHP类型返回json中编码的值。值true,false和null分别返回为TRUE,FALSE和NULL。如果无法解码json或编码数据深于递归限制,则返回NULL。

您应该检查json_decode是否有效,这是一个示例:

<?php
$badjson = '{bad:"json"}';
$decoded = json_decode($badjson);
if(json_last_error()!==JSON_ERROR_NONE){
    echo "Json Decode Failed: ".json_last_error_msg();
}else{
    var_dump($decoded);
}

echo "\n---\n";

$goodjson = '{"property":"value"}';
$decoded = json_decode($goodjson);
if(json_last_error()!==JSON_ERROR_NONE){
    echo "Json Decode Failed: ".json_last_error_msg();
}else{
    var_dump($decoded);
}

在此处查看此行动:http://sandbox.onlinephpfunctions.com/code/3a07e57f4cd01bd63d2945d5e367bbb0a6158195

请参阅PHP文档:http://php.net/manual/en/function.json-last-error.php

您可以使用语法检查程序查找json的问题,例如http://jsonlint.com/

如果手动创建json,则常见问题是无法用双引号括起属性,例如<{1}}有效时{property:"value"}无效。

请注意您必须检查{"property":"value"}的原因,并且不能依赖json_last_error意味着失败是因为NULL会返回json_decode('NULL');并且这是正确的。