2013-05-02 26 views
3

我有以下文件:
utils.php中其中arrayForJSON定義
getLikes.php的var_dump似乎導致循環/試驗,直到超時

include '../utils.php'; 
    if($user_id) { 
      try { 
      if(is_null($likes)) 
      $likes = idx($facebook->api('/me/likes'), 'data', array()); 
      if ($likes) { 
       $arrayForJSON['likes']=$likes; 
      } 
     } 
     catch(FacebookApiException $e){ 
      echo error_log($e); 
     } 
     var_dump($arrayForJSON); 
    } 
    else 
     echo "User not logged in"; 

導致顯示內容$arrayForJSON
我現在有一個具有以下內容的另一個文件: learning_globals.php

<?php 
include 'utils.php'; 
var_dump($GLOBALS['arrayForJSON']); 
?> 

現在,如果我運行這個文件,運行getLikes,它運行直至超時。如果我運行它之前,則返回。如果我按相反順序運行文件,結果相同。

我應該怎麼做..?我目前正在學習PHP,並且有點卡住了。


編輯:不是dupicate -
建議的答案是不適合的,並於question-似乎問題並不有什麼做與Facebook的API是不是一個很好的答案。另一方面,這裏的區別在於,即使我先打電話learning_globals.php它顯示null和調用getLikes.php結果再次嘗試,直到超時。

我現在希望一切都清楚了


utils.php中

require_once('sdk/src/facebook.php'); 
require_once("AppInfo.php"); 
/** 
* @return the value at $index in $array or $default if $index is not set. 
*/ 
function idx(array $array, $key, $default = null) { 
    return array_key_exists($key, $array) ? $array[$key] : $default; 
} 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
function he($str) { 
    return htmlentities($str, ENT_QUOTES, "UTF-8"); 
} 
$facebook = new Facebook(array(
'appId' => AppInfo::appID(), 
'secret' => AppInfo::appSecret(), 
'sharedSession' => true, 
'trustForwarded' => true, 
'file_upload' =>true 
)); 
$user_id = $facebook->getUser(); 
$app_info = $facebook->api('/'. AppInfo::appID()); 
$app_name = idx($app_info, 'name', ''); 
if($user_id) 
{ 
    $logoutUrl =$facebook->getLogoutUrl(); 
} 
    else 
    { 
     $loginUrl=$facebook->getLoginUrl(); 
    } 
if ($user_id) { 
try { 
    $permissions = $facebook->api('/me/permissions'); 
    $user_profile = $facebook->api('/me'); 
} catch (FacebookApiException $e) { 
    // If the call fails we check if we still have a user. The user will be 
    // cleared if the error is because of an invalid accesstoken 
    if (!$facebook->getUser()) { 
    header('Location: '. AppInfo::getUrl($_SERVER['REQUEST_URI'])); 
    exit(); 
    } 
} 
} 
$token=$facebook->getAccessToken(); 
$arrayForJSON = array(); 
function getUpdatedTime() 
{ 
    global $facebook,$user_id,$arrayForJSON; 
    if($user_id) { 
      try { 

    $updated_time= idx($facebook->api('me/updated_time'), 'data', array()); 
    if($updated_time) { 
     $arrayForJSON['updated_time']=$updated_time; 
    } 
    } 
    catch(FacebookApiException $e){ 
      error_log($e); 
     } 
    } 
} 
+0

的可能重複的[PHP功能進入在一定條件下的無限循環(http://stackoverflow.com/questions/16225700/php-function-goes-into-an-infinite-loop-under-certain-conditions ) – pilsetnieks 2013-05-02 17:56:39

+0

@pilsetnieks正如你所看到的,這也是我的問題,沒有一個合適的答案。這裏的區別在於,如果我在writeJSON之後調用getLikes,它就起作用了。在這裏,它不起作用。 – 2013-05-02 18:01:29

+0

我不知道var_dump可以使用喜歡,我雖然var_dump wa主要用於調試。 – Viscocent 2013-05-03 13:37:27

回答

1

我傾向於從var_dump();遠離和而使用PRE標籤來轉儲和對象到屏幕上。我也發現它是一種打印出對象的較慢方法。請嘗試使用以下代碼片斷,希望它能夠解決您的問題。

echo('<pre>'); 
print_r($arrayForJSON); 
echo('</pre>'); 

我希望有幫助!

+0

謝謝!當var_dump反覆無常時,這是一個很好的解決方法 – TrtG 2014-04-04 09:02:30