2017-02-23 59 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,這將是正確的。