2014-07-27 3 views
0

Я загрузил мой скрипт для входа в facebook, основанный на facebook PHP API 4.0, на веб-хостинг, который поддерживает PHP 5.4, но я получаюFacebook апи: «ограничение open_basedir в действие»

Предупреждение : is_readable(): действие open_basedir. Файл (/ dev/urandom) не находится в пределах допустимых путей: (/ home/myuserid:/usr/lib/php:/tmp) в /home/myuserid/public_html/Facebook/FacebookRedirectLoginHelper.php on линия 244

Вот строка 244 файла и некоторые из следующих

if (is_readable('/dev/urandom')) { 
    $fp = fopen('/dev/urandom', 'rb'); 
    if ($fp !== FALSE) { 
    $buf = fread($fp, $bytes); 
    fclose($fp); 
    if($buf !== FALSE) { 
     return bin2hex($buf); 
    } 
    } 
} 

Если это может быть полезно, здесь является основным Войти сценарий:

<?php 
session_start(); 
require_once('Facebook/Entities/AccessToken.php'); 
require_once('Facebook/FacebookSession.php'); 
require_once('Facebook/FacebookRedirectLoginHelper.php'); 
require_once('Facebook/HttpClients/FacebookHttpable.php'); 
require_once('Facebook/HttpClients/FacebookCurl.php'); 
require_once('Facebook/HttpClients/FacebookCurlHttpClient.php'); 
require_once('Facebook/FacebookRequest.php'); 
require_once('Facebook/FacebookResponse.php'); 
require_once('Facebook/FacebookSDKException.php'); 
require_once('Facebook/FacebookRequestException.php'); 
require_once('Facebook/FacebookAuthorizationException.php'); 
require_once('Facebook/GraphObject.php'); 

use Facebook\FacebookSession; 
use Facebook\FacebookRedirectLoginHelper; 
use Facebook\FacebookRequest; 
use Facebook\FacebookResponse; 
use Facebook\FacebookSDKException; 
use Facebook\FacebookRequestException; 
use Facebook\FacebookAuthorizationException; 
use Facebook\GraphObject; 

// init app with app id (APPID) and secret (SECRET) 
FacebookSession::setDefaultApplication('',''); 

// login helper with redirect_uri 
$helper = new FacebookRedirectLoginHelper('http://mysite/fb.php'); 

try { 
    $session = $helper->getSessionFromRedirect(); 
} catch(FacebookRequestException $ex) { 
    // When Facebook returns an error 
} catch(Exception $ex) { 
    // When validation fails or other local issues 
} 

// see if we have a session 
if (isset($session)) { 
    // graph api request for user data 
    $request = new FacebookRequest($session, 'GET', '/me'); 
    $response = $request->execute(); 
    // get response 
    $graphObject = $response->getGraphObject(); 

//[...] uses data to login 
} else { 
    // show login url 
    echo '<a href="' . $helper->getLoginUrl() . '">Login</a>'; 
} 
?> 

Примечание: локально с easyPHP сценарий отлично работает

ответ

1

Большинство хостинг-провайдеров активно ограничивают пользователей доступом к содержимому и системным ресурсам других пользователей.

В этом случае они использовали параметр open_basedir из php.ini, который позволяет PHP открывать файлы по указанным путям и отказывает в доступе.

Чтобы решить эту проблему, вы можете попросить их предоставить вам доступ к /dev/urandom, что они, вероятно, не будет делать, или заменить код следующим образом:

if (function_exists('openssl_random_pseudo_bytes')) { 
    return bin2hex(openssl_random_pseudo_bytes($bytes)); 
} 

openssl_random_pseudo_bytes функция делает почти точно такой же и доступен на PHP 5.3.0 или новее.

+0

Спасибо большое, что сработало! –

0

Это предупреждение было вызвано ошибкой в ​​SDK, которая была исправлена ​​в версии 4.0.10. Если вы не можете изменить свою серверную среду, как предлагал @Pierto, вы можете загрузить последнюю стабильную версию 4.0 SDK.

+0

Спасибо за ваш ответ, я буду помнить об этом :) –

Смежные вопросы