-1

我面临一个我现在几个小时都无法修复的错误。本地主机上的一切看起来都很好。但是在我的实时域上,我收到了会话错误。这里有一些信息可以帮助你给我关于错误的任何想法。

  • 我正在使用 Facebook PHP SDK
  • 我在本地主机和实时域上都使用 WordPress 最新版本
  • 我在本地主机和实时域上使用相同的文件,应用程序的精确副本
  • 在 localhost 上,不返回任何错误。
  • 在实时域上,我收到该错误:

    警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送(输出开始于 /home/vantaget/public_html/wordpress/sofashare/wp-content/themes/sofashare/header.php:6 ) 在第 37 行的 /home/vantaget/public_html/wordpress/sofashare/wp-content/themes/sofashare/lib/facebook/facebook.php

这是我实现 facebook sdk 的方式。

首先我把它放在我的functions.php文件中以检索错误:

error_reporting(E_ALL ^ E_NOTICE);

我包括图书馆:

require_once TEMPLATEPATH.'/lib/facebook/facebook.php';

在函数文件中,这是函数:

function sofa_include($lib) {
    global $sofa, $user;
    if ($lib == 'facebook') {

    // new facebook call
    $facebook = new Facebook(array(
        'appId'  => $sofa['fbappid'],
        'secret' => $sofa['fbappsecret'],
    ));

    // get facebook user
    $user = $facebook->getUser();

    // get user profile
    if ($user) {
      try {
        $user_profile = $facebook->api('/me');
      } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
      }
    }

?>

<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
    FB.init({
    appId: '<?php echo $facebook->getAppID() ?>',
            cookie: true,
            xfbml: true,
            oauth: true
    });
    FB.Event.subscribe('auth.login', function(response) {

    });
    FB.Event.subscribe('auth.logout', function(response) {

    });
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>

<?php
    }
}

现在在我的 header.php 文件中,我这样做是为了包含 facebook sdk

<?php sofa_include('facebook'); ?>

在 localhost 上一切正常,错误报告设置为 ALL。但是在我的实时域上,我总是收到 session_start 标头发送错误。有什么问题?

4

1 回答 1

0

您可能会在会话开始之前输出该 facebook javascript 代码,这会导致您的问题。也许您的本地服务器默认启用了输出缓冲或其他东西,而生产没有

于 2012-05-26T10:37:09.530 回答