我使用php-facebook sdk在PHP中编写了一个facebook应用程序,这在我的Windows 7上工作得非常好,wamp。
但是,现在我在linux上运行的网站空间上实现了它,并且我收到了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
?>
答案 0 :(得分: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>
答案 1 :(得分:0)
可能您的服务器需要打开一些端口,但远程服务器更有可能只是具有与本地开发设置不同的错误报告设置。如果Facebook API生成错误,则会回显该页面并抢占任何标头,包括cookie。您可以通过在Facebook方法调用前添加@ -symbols来测试这一点,如下所示:
$facebook = new Facebook($config);
$user_id = @$facebook->getUser();
一个更强大,更永久的解决方案是Shawn E. Carter建议的try {} catch (){}
块。这是我的理论,Facebook每次都丢失了一个错误,由于你的本地配置,你没有注意到。确定此错误的原因应该是您的首要任务。
答案 2 :(得分:0)
虽然我没有得到它,但在打开php标签之前删除以下代码行和额外的空行解决了这个问题。
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
答案 3 :(得分: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>