10282


はじめまして！

現在、以下のFacebook公式サイトを参考にしながらFacebook認証の開発を進めている者です。  
<https://developers.facebook.com/docs/php/gettingstarted/4.0.0>

[code]

    <?php
    
    define('FACEBOOK_SDK_V4_SRC_DIR', '/fb-php-sdk-v4/src/Facebook/');
    require __DIR__ . '/fb-php-sdk-v4/autoload.php';
    
    
    // Make sure to load the Facebook SDK for PHP via composer or manually
    
    use Facebook\FacebookSession;
    
    FacebookSession::setDefaultApplication('略', '略');
    
[/code]

上記のようなシンプルなコードを実行した際、

> Fatal error: Class 'Facebook\FacebookSession' not found in  
>  /ドメイン名/index.php on line 15

と表示されてしまいます。

ちなみに、SDKはComposerではなくGithubからダウンロードし、ルートディレクトリに配置したので、  
公式サイトにある

[code]

    define('FACEBOOK_SDK_V4_SRC_DIR', '/path/to/fb-php-sdk-v4/src/Facebook/');
    require __DIR__ . '/path/to/facebook-php-sdk-v4/autoload.php';
    
[/code]

の/path/to/は意図的に削除しました。

このような場合、どのような処置をとればよいでしょうか?

よろしくお願い申し上げます。


CC BY-SA 3.0
2015-05-17T02:46:08.803
10273
2015-05-17T07:53:32.317
9722
question
php facebook-php-sdk
Facebook SDK forPHPのクラスが読み取れない。


autoload.php には次のように書かれています。

[code]

    // base directory for the namespace prefix
    $base_dir = defined('FACEBOOK_SDK_V4_SRC_DIR') ? FACEBOOK_SDK_V4_SRC_DIR : __DIR__ . '/src/Facebook/';
    
    ...
    
    // replace the namespace prefix with the base directory, replace namespace
    // separators with directory separators in the relative class name, append
    // with .php
    $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
    
    // if the file exists, require it
    if (file_exists($file)) {
      require $file;
    }
    
[/code]

どうやら、 `FACEBOOK_SDK_V4_SRC_DIR` はそのまま require できるパスを指定する必要があるようです。

具体的な対処としては次のどちらかになるかと思います。

  * `FACEBOOK_SDK_V4_SRC_DIR` にも `__DIR__` を付加する
  * いっそ defineを 省略する→ autoload.php の場所から見た `./src/Facebook/` が使われる

ドキュメントでは require の方にだけ `__DIR__` が使われていて紛らわしいですね・・・。


CC BY-SA 3.0
2015-05-17T07:53:32.317
10282
2015-05-17T07:53:32.317
8000
10273
answer