2017-02-23 60 views
-1

所以我对编程还很陌生,除了活脚本外我没有其他描述,所以请用正式的术语纠正我。无论如何,前一阵子,我用php在php中制作了这个机器人,并在我的浏览器中使用xampp在我的Mac上本地运行它。我可以很容易地使用echo和print_r来打印数组和任何网页。脚本只会在我重新加载页面时运行,所以这就是我所说的“不活跃”。现在我已经开始尝试在PHP中制作messenger bot,并且我正在使用cloud9。我也看到了脚本的浏览器,但在这里,我只能看到回声的产品和打印,如果他们是我已经进入简单的字符串,例如:回声和打印不工作在'活'版本的PHP?

print_r("stack overflow is life"); 

这将打印按预期在我的浏览器。然而,这就是我谈论'活'脚本运行的地方。它不是重新加载页面,而是直播。 messenger bot将始终在服务器上处于活动状态,并立即回复发送给它的消息。我用这个代码:

/* 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>标签,所以很难阅读,我希望在浏览器中看到很干净的数组。所有的代码都围绕着这个,所以它非常重要。

+2

无论调用这个文件需要显示从这个文件返回的内容,AJAX可能是什么? – AbraCadaver

+0

一个好口头禅:“什么改变了?” 至于'活'/'不活'......我们可以称之为'环境'吗?即开发/分期/生产?当然,在本地和网上做所有事情都有一些区别。老实说,这可能更多地与5.6左右的输入流更改有关。最后,与Theo一致认为,网络套接字是最近这样做的正确途径。 – ficuscr

+1

@ficuscr我认为生活意味着它不是在刷新后看到它,而是希望立即看到它而不是“我的项目上线”更多“实况电视” – nerdlyist

回答

-1

不确定什么是cloud9。

对于调试,您可以尝试var_dump()函数。它将打印到您的浏览器数据类型和数据值,因为可能有不同类型的“无”。这不是一个更好的调试方式,而是一个天真的方法。为了更好:检查这个cloud9中的调试和断点可能性。

var_dump()可以根据需要随意多吃参数,因此可以方便地使用php输入来转储所有内容,以检查是否会出现以及如何更改。

+0

是的,我已经尝试var_dump(),它只打印出/home/ubuntu/workspace/index.php:22: NULL –

+0

我不认为这是数据类型这就是问题,我已经打印出'非活'数组在PHP之前就好了 –

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,常见问题是未能用双引号将特性包装,例如{property:"value"}无效,{"property":"value"}有效。

注意你的理由要检查json_last_error,而不能依靠NULL这意味着它失败是因为json_decode('NULL');将返回NULL,这将是正确的。