2017-02-23 8 views
-1

저는 프로그래밍에 익숙하지 않고 스크립트에 대해 설명 할 것이 없으므로 공식적인 용어로 수정하십시오. 어쨌든, 얼마 전, 나는이 봇을 PHP로 만들었고 내 Mac에서 xampp을 사용하여 브라우저에서 로컬로 실행했습니다. echo와 print_r을 사용하여 배열을 인쇄하고 웹 페이지에 무엇이든 사용할 수 있습니다. 이 스크립트는 페이지를 새로 고침 한 경우에만 실행되므로 '라이브가 아닌'것으로 이야기하고 있습니다. 이제는 PHP로 메신저 봇을 만들기 시작했으며 cloud9를 사용하고 있습니다. 또한 브라우저에서 스크립트를 볼 수 있지만 여기에, 나는 단지 에코의 제품을 볼 수 있고 내가 입력 한 단순한 문자열이있는 경우, 예를 들어, 인쇄 : 브라우저에서 예상대로PHP의 '라이브'버전에서는 에코와 프린트가 작동하지 않습니까?

print_r("stack overflow is life"); 

이 인쇄됩니다. 그러나 이것이 내가 '라이브'스크립트 실행에 대해 말하는 곳입니다. 페이지를 다시로드하는 대신 실제로 실행됩니다. 메신저 봇은 서버에서 항상 활성화되어 원하는대로 즉시 전송 된 메시지에 응답합니다. 이 코드를 사용합니다 :

이제이 경우 $input이 인쇄되지 않습니다. 나는 아무것도 볼 수 없다. 지금 이것이 라이브 서버 응답과 관련이 있는지 여부는 알 수 없지만 브라우저를 보는 방법을 알아야합니다. 그리고 내가 실제로 $input에있는 정보를 사용하여 내 facebook에 메시지를 보내고 로봇이 작동 할 수 있기 때문에 실제로 배열로 변환 된 JSON이 있는지 테스트했습니다. 또한 txt 파일에 JSON을 출력하고 거기에서 볼 수 있지만 읽을 수 없으므로 <pre> 태그가 없으므로 멋진 깨끗한 배열을 브라우저에 표시하고 싶습니다. 모든 코드가이를 중심으로 진행되므로 매우 중요합니다.

+2

이 파일에서 무엇을 반환해야이 파일에서 반환되는 내용을 표시해야합니까? AJAX는 아마도? – AbraCadaver

+0

좋은 만트라 : "무엇이 바뀌 었습니까?" '라이브'/ '라이브'는 ... '환경'이라고 부를 수 있습니까? 즉 dev/staging/production? 물론 localhost와 net 사이에서 모든 것을하는 것과는 약간의 차이가 있습니다. 솔직히 이것은 5.6 주변의 입력 스트림 변경과 관련이있을 수 있습니다. 마지막으로 Theo에 동의하십시오. 웹 소켓은 요즘에는 * 올바른 * 방법입니다. – ficuscr

+1

@ficuscr 나는 라이브라고 생각한다. 새로 고침을 한 후 즉시보고 싶다. "내 프로젝트가 라이브가되었다"가 아니라 "라이브 TV"가 더 많다. – nerdlyist

답변

-1

cloud9가 무엇인지 확실하지 않습니다.

디버깅을 위해 var_dump() 함수를 사용해보십시오. 다른 유형의 "nothing"이있을 수 있으므로 브라우저 데이터 유형 및 데이터 값에 인쇄합니다. 그것은 디버깅을위한 더 좋은 방법이 아니라 순진한 방법입니다. 더 나은 방법 :이 cloud9에서 디버그 및 중단 점 가능성을 확인하십시오.

var_dump()는 원하는만큼 많은 인자를 사용할 수 있으므로, PHP 입력으로 모든 것을 덤프하고 무엇이 어떻게 변했는지 확인하는 것이 좋습니다.

+0

예, var_dump()를 시도했습니다. /home/ubuntu/workspace/index.php:22 만 인쇄합니다. NULL –

+0

데이터 유형이 문제라고 생각하지 않습니다. '배열 전에 PHP에서 잘 –

0

그래서 원시 입력을 파일에 쓰고 json이이를 별도로 디코딩합니다. 따라서 실제로 유효한 json을 얻지 못했을 가능성이 큽니다. 그래서 당신이이 일을 확인하기 위해 json_last_error 전화 - 당신 var_dump 때 볼 이유

당신이 잘못된 JSON을 통과 할 경우, json_decode 반환 NULL. 문서에서

:

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

적절한 PHP 유형에 JSON으로 인코딩 된 값을 돌려줍니다. true, false 및 null 값은 각각 TRUE, FALSE 및 NULL로 반환됩니다. json을 디코딩 할 수 없거나 인코딩 된 데이터가 재귀 제한보다 클 경우 NULL이 반환됩니다.http://sandbox.onlinephpfunctions.com/code/3a07e57f4cd01bd63d2945d5e367bbb0a6158195

참조 PHP 문서 : http://php.net/manual/en/function.json-last-error.php

당신이 할 수있는

<?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); 
} 

여기에 직접보기 :

당신은 정말 경우 json_decode 작품을 확인해야합니다, 여기에 입증하는 예이다 구문 검사기를 사용하여 json의 문제를 찾으십시오. http://jsonlint.com/

json을 수동으로 생성하면 일반적인 문제가 속성을 큰 따옴표로 묶지 못하는 것입니다. {"property":"value"}은 유효하지만 {property:"value"}은 유효하지 않습니다.

json_last_error을 확인해야하는 이유에 유의하십시오. 은 NULL을 반환 할 것이므로 정확하다는 의미이므로 NULL에 의지 할 수 없습니다.