簡體   English   中英

Facebook php SDK v4.0 Codeigniter

[英]Facebook php SDK v4.0 codeigniter

我在codeigniter中集成了Facebook php v4.0。 在本地主機中,頁面加載良好,我也可以獲取重定向URL。 但是當我將網站轉到在線時。 網站打開空白,沒有任何錯誤。 然后,我從控制器上卸載了Facebook庫,頁面正確加載了。 我認為它與Facebook庫有關。 下面是我的facebook庫:

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); if ( session_status() == PHP_SESSION_NONE ) { session_start(); } // Autoload the required files require_once( APPPATH . 'libraries/facebook/vendor/autoload.php' ); require_once( APPPATH . 'libraries/Facebook/HttpClients/FacebookHttpable.php' ); require_once( APPPATH . 'libraries/Facebook/HttpClients/FacebookCurl.php' ); require_once( APPPATH . 'libraries/Facebook/HttpClients/FacebookCurlHttpClient.php' ); require_once( APPPATH . 'libraries/Facebook/Entities/AccessToken.php' ); require_once( APPPATH . 'libraries/Facebook/Entities/SignedRequest.php' ); require_once( APPPATH . 'libraries/Facebook/FacebookSession.php' ); require_once( APPPATH . 'libraries/Facebook/FacebookRedirectLoginHelper.php' ); require_once( APPPATH . 'libraries/Facebook/FacebookSignedRequestFromInputHelper.php' ); require_once( APPPATH . 'libraries/Facebook/FacebookJavaScriptLoginHelper.php' ); require_once( APPPATH . 'libraries/Facebook/FacebookRequest.php' ); require_once( APPPATH . 'libraries/Facebook/FacebookResponse.php' ); require_once( APPPATH . 'libraries/Facebook/FacebookSDKException.php' ); require_once( APPPATH . 'libraries/Facebook/FacebookRequestException.php' ); require_once( APPPATH . 'libraries/Facebook/FacebookOtherException.php' ); require_once( APPPATH . 'libraries/Facebook/FacebookAuthorizationException.php' ); require_once( APPPATH . 'libraries/Facebook/GraphObject.php' ); require_once( APPPATH . 'libraries/Facebook/GraphSessionInfo.php' ); use Facebook\\FacebookRedirectLoginHelper; use Facebook\\FacebookSession; use Facebook\\FacebookRequest; class Facebook { var $ci; var $helper; var $session; var $permissions; public function __construct() { $this->ci =& get_instance(); $this->permissions = $this->ci->config->item('permissions', 'facebook'); // Initialize the SDK FacebookSession::setDefaultApplication( $this->ci->config->item('api_id', 'facebook'), $this->ci->config->item('app_secret', 'facebook') ); // Create the login helper and replace REDIRECT_URI with your URL // Use the same domain you set for the apps 'App Domains' // eg $helper = new FacebookRedirectLoginHelper( 'http://example.com/redirect' ); $this->helper = new FacebookRedirectLoginHelper( $this->ci->config->item('redirect_url', 'facebook') ); if ( $this->ci->session->userdata('fb_token') ) { $this->session = new FacebookSession( $this->ci->session->userdata('fb_token') ); // Validate the access_token to make sure it's still valid try { if ( ! $this->session->validate() ) { $this->session = null; } } catch ( Exception $e ) { // Catch any exceptions $this->session = null; } } else { // No session exists try { $this->session = $this->helper->getSessionFromRedirect(); } catch( FacebookRequestException $ex ) { // When Facebook returns an error } catch( Exception $ex ) { // When validation fails or other local issues } } if ( $this->session ) { $this->ci->session->set_userdata( 'fb_token', $this->session->getToken() ); $this->session = new FacebookSession( $this->session->getToken() ); } } /** * Returns the login URL. */ public function login_url() { return $this->helper->getLoginUrl( $this->permissions ); } /** * Returns the current user's info as an array. */ public function get_user() { if ( $this->session ) { /** * Retrieve User's Profile Information */ // Graph API to request user data $request = ( new FacebookRequest( $this->session, 'GET', '/me' ) )->execute(); // Get response as an array $user = $request->getGraphObject()->asArray(); return $user; } return false; } } 

檢查您的index.php文件,並確保將環境設置為“開發”,這很可能是將本地服務器配置為顯示php錯誤,但您的Web服務器卻沒有。

index.php文件位於應用程序的根目錄,並且應具有一個名為“ APPLICATION ENVIRONMENT”的注釋塊,您可以在其中定義環境。 在下面,您將看到以下行:

define(ENVIRONMENT,'development'); //or 'testing' or 'production'

確保這是在使用“開發”。 另外,在下面檢查名為“ ERROR REPORTING”的塊,該塊的下面帶有switch語句。 我將其設置為如下所示,這意味着如果將環境設置為“開發”或“測試”,則將顯示所有錯誤。

switch (ENVIRONMENT)
{
    case 'development':
    case 'testing':
        ini_set('display_errors',true);
        error_reporting(E_ALL);
    break;
    case 'production':
        ini_set('display_errors',false);
        error_reporting(0);
    break;

    default:
        exit('The application environment is not set correctly.');
}

請確保您的服務器上的php版本為5.4或更高。

Facebook SDK使用curl。 因此,請確保已安裝並啟用curl擴展。 您可以通過回顯phpinfo()進行檢查。 如果您的服務器是linux,則可以像這樣安裝它。

sudo apt-get install php5-curl
sudo service apache2 restart

要檢查錯誤消息,請將這些行添加到index.php的頂部。

ini_set('display_errors',1);
error_reporting(E_ALL);

希望對您有用。

我同意以上關於將您的環境設置為在配置中進行開發的答案,以及檢查服務器設置並暫時允許php錯誤以確保,但是,最可能的問題之一將來自您的路徑。

即APPPATH。 'libraries / facebook / vendor / autoload.php'

確保APPPATH對您的服務器是正確的,即,如果您的服務器在LAMP發行版中運行,並且您的本地主機在運行WAMP / XAMPP等,則APPPATH可能設置為C:\\ wamp \\ www \\ yoursiteroot \\,而您的根文件夾可能是/ var / www,您會發現它們之間必然有很大不同

您是否在應用程序配置頁面上添加了新的客戶端重定向URL。

index.php更改:

define(ENVIRONMENT,'testing');

如前所述,在Mike Miller的回答下,您的index.php中包含以下代碼:

switch (ENVIRONMENT)
{
    case 'development':
    case 'testing':
        ini_set('display_errors',true);
        error_reporting(E_ALL);
    break;
    case 'production':
        ini_set('display_errors',false);
        error_reporting(0);
    break;

    default:
        exit('The application environment is not set correctly.');
}

對? 並且您將環境常量設置為開發狀態 如果將其設置為testing ,那將設置

ini_set('display_errors',true);
error_reporting(E_ALL);

服務器將顯示錯誤,使您的頁面崩潰。 您說網站打開時沒有任何錯誤 那可能是由於未顯示的錯誤所致。 因此,將您的CodeIgniter ENVIRONMENT設置為測試不會解決錯誤,但會使它們可見,因此您將知道發生了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM