-1

我使用 php-facebook sdk 在 PHP 中编写了一个 facebook 应用程序,它在我的 Windows 7 wamp 上运行得非常好。

但是,现在我在 linux 上运行的 webspace 上实现了它,我得到了 session_start() cookie 错误。

Warning: session_start() [function.session-start]: Cannot send session cookie - 
headers already sent by (output started at /mydirectory/index.php:5) in 
/mydirectory/src/facebook.php on line 37

我不明白为什么会遇到此错误。

下面是我的代码

<!DOCTYPE html PUBLIC  
"-//W3C//DTD XHTML 1.0 Transitional//EN"  
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<?php
    require_once('src/facebook.php');
    $app_id = "MY_APP_ID";
    $app_secret = "MY_APP_SECRET";

    $config = array(
    'appId' => $app_id,
    'secret' => $app_secret,
    'fileUpload' => true,  
    'cookie' => true
    );
    $facebook = new Facebook($config);
    $user_id = $facebook->getUser();

 // other content

 ?>
4

4 回答 4

4

您不能在发送标头之前打印 HTML,正确的方法是

例子:

<?php
session_start();
//
require 'src/facebook.php';
$facebook = new Facebook(array(
  'appId'  => '135669679827333',
  'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxx',
  'cookie' => true, // enable optional cookie support
  ));
  try { $user = $facebook->getUser(); } catch (FacebookApiException $e) {  }
?>
<!DOCTYPE html>
<html>
<head><title></title>
<meta />
</head>
<body>
<content here>
</body>
</html>
于 2012-08-20T23:41:17.373 回答
0

您的服务器可能需要打开一些端口,但您的远程服务器很可能只是具有与本地开发设置不同的错误报告设置。如果 Facebook API 生成错误,则会将其回显到页面并抢占任何标头,包括 cookie。您可以通过在 Facebook 方法调用前添加 @-symbols 来测试这一点,如下所示:

$facebook = new Facebook($config);
$user_id = @$facebook->getUser();

一个更强大、更持久的解决方案是try {} catch (){}Shawn E. Carter 建议的块。我的理论是 Facebook 每次都会抛出一个错误,并且由于您的本地配置,您没有注意到。解决此错误的原因应该是您的首要任务。

于 2012-08-21T17:25:58.983 回答
0

虽然我没有得到它,但在打开 php 标签之前删除以下代码行和额外的空白行解决了这个问题。

<!DOCTYPE html PUBLIC  
 "-//W3C//DTD XHTML 1.0 Transitional//EN"  
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
于 2012-08-21T20:56:22.487 回答
0

另一种方法是这样的:

<?php
    ob_start();

?>

<!DOCTYPE html>
<html>
<head>
 <title></title>
<meta></meta>
</head>
<body>

<?php
require 'src/facebook.php';
//YOUR FACEBOOK methods here

?>


</body>
</html>
于 2014-07-04T15:28:22.627 回答