2011-10-09 77 views
0

我相信這是一個PHP錯誤,但我不是100%確定的。基本上,我正在爲我的webzine構建一個應用程序,並且已經通過了靜態內容,這很好。然後我轉換爲PHP並試圖包含PHP Facebook SDK。我使用了正確的App ID和Secret。Facebook應用程序不顯示任何內容(PHP錯誤)

這是我在我的index.php文件開始時使用的代碼。

<?php 
    require 'fb/facebook.php'; 

    $fbconfig['appUrl'] = "http://apps.facebook.com/dailydischord/"; 

    // create instance of the Facebook application 
    $facebook = new Facebook(array(
     'appId' => '<appid>', 
     'secret' => '<appsecret>', 
     'cookies' => 'true', 
    )); 

    // get the id of the user using the app 
    $user = $facebook->getUser(); 

    if($user) { 
     try { 
      //if user is authentic, proceed 
      $user_profile = $facebook->api('/me'); 
     } 
     catch(FacebookApiException $e) { 
      error_log($e); 
      $user = null; 
     } 
    } 

    // if user is authentic, generate logout URL 
    if($user) { 
     $logoutUrl = $facebook->getLogoutUrl(); 
?> 
<!DOCTYPE HTML> 
<html>.... 

然後我在內容完成後繼續這樣做。

<?php 
    } else { 
     $loginUrl = $facebook->getLoginUrl(); 
    } 
?> 

我確實收到了一個錯誤,我不再得到,這很奇怪。這是這樣的。

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started... 

該應用的URL是在這裏:http://apps.facebook.com/dailydischord/

任何幫助將不勝感激。如果我錯過了任何東西,請提問,我會盡量提供更多見解。

回答

0

我設法自己解決了這個問題。看起來代碼的最後一點是問題(「else」語句)。這是我使用的代碼。

<?php 
    } else { 
     $loginUrl = $facebook->getLoginUrl(array('redirect_uri' => $fbconfig['appUrl'])); 
     print "<script type='text/javascript'>top.location.href = '$loginUrl';</script>"; 
    } 
?> 
1

您正在嘗試發送(會話)標題,但它們已發送。

可能在<?php之前有一個換行符。如果沒有,請嘗試將session_start()放在代碼的開頭(<?php之後的第一行)。如果這不起作用,請將ob_start()放在代碼的開頭(它很髒,但它會起作用)。

+0

添加到代碼的開始,仍然沒有。 –

0

由於您的輸出完全是空白的,這意味着語法錯誤或失敗require。你有訪問Web服務器錯誤日誌嗎?它可能會告訴你確切的問題。對於快速檢查,您可以將require更改爲include以查看您是否獲得任何輸出(即使它只是屏幕上的錯誤消息)。

+0

沒有顯示錯誤!我無法訪問我的服務器錯誤日誌。 –

+0

在輸出任何內容之前,它看起來像是一個致命的PHP錯誤。嘗試在'require'行之前添加'echo'步驟1';'在'require'行之前添加'echo'步驟2';'在它後面添加'echo',並查看輸出結果。如果您看到兩個輸出,請嘗試添加更多輸出以進一步縮小輸出。 –

1

您正試圖輸出標題,在這種情況下會話。頭部是瀏覽器處理的第一件事。如果您在輸出HTML之後想要更改它,它會給你這個錯誤。

最好是太不改變頭已經輸出了信息之後,你也可以使用下面的行,並把它和你的代碼的頂部:

ob_start(); 

要注意的是使用這個,是不是一個適當的修正,但它會打開輸出緩衝(允許您在放置HTML代碼時更改標題)。

以下是可選的,但是正確的,使用ob_start()函數,並且完全在輸出結束時必須關閉緩衝並輸出緩衝區中的內容。

ob_end_flush(); 

欲瞭解更多信息,我會告訴你去PHP documentation頁面。

+0

不幸的是,這一切都沒有奏效。當你說輸出數據後我改變標題時,我不明白你的意思。 –

相關問題