我有一个开发环境设置WAMP,Wordpress,和PHPEdit IDE。我在侧边栏中使用Facebook、Twitter和YouTube API。我使用Facebook的PHP来显示信息(没有登录或管理功能)。由于FB和WP使用session_start(),我收到以下警告:
C:\wamp\www\dfi\wp-content\themes\DFI\header.php:12)警告: session_start() function.session-start:无法发送会话缓存限制器-标题已经发送(输出从第36行的C:\wamp\www\dfi\wp-content\themes\DFI\api\facebook.php中的
开始
我试图通过使用警告输出来解决这个问题,但这无助于考虑以下几点。我知道如何在<?php ?>前后清除空格和字符,并将session_start()放在任何http输出之前。我使用unix行类型和UTF8编码而不使用BOM。我的主机服务器不是为output_buffering设置的。
header.php第11至13行
11 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
12 <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes();?>>
13 <head>看起来,警告来自内联php代码。我不知道我能做些什么来修复这条线。
facebook.php第34至37行
34 public function __construct($config) {
35 if (!session_id()) {
36 session_start();
37 }我认为我无法阻止FB或WP调用session_start()而不破坏所有内容。我如何让Wordpress和Facebook在一起玩的很好没有这个错误?
编辑:为了阻止警告显示,我把@放在session_start()前面。
public function __construct($config) {
if (!session_id()) {
@session_start();
}这是唯一的解决办法,我仍然想找到问题的根源。
发布于 2012-06-02 01:25:05
正如您在注释中所发现的,问题不在于包含PHP文件,而在于定义类的位置。在wp钩子中可以安全地创建Facebook类的实例(据我所知,它对我有用)。这将允许您在任何HTML输出之前定义类的实例,然后可以在类中的任何地方使用该变量。
但是,您确实希望确保只包含类一次,但是可以根据需要实例化类的次数。
下面是一个让您开始的基本示例:
if( !class_exists( 'Facebook' ) ) {
require_once 'facebook.php';
}
if( !class_exists( 'YourClass' ) ) {
class YourClass {
public $facebook = null;
public function __construct() {
add_action( 'wp', array( $this, 'define_facebook' ) );
add_action( 'any_hook_after_wp', array( $this, 'example_usage' ) );
}
public function define_facebook() {
global $post;
// Assuming you are using post meta for the app ID and secret, you can use other methods though
$app_id = get_post_meta( $post->ID, 'appId', true );
$app_secret = get_post_meta( $post->ID, 'appSecret', true );
$this->facebook = new Facebook( array( 'appId' => $app_id, 'secret' => $app_secret ) );
}
public function example_usage() {
if( !is_null( $this->facebook ) ) {
// Lets see what we have here..
echo "<pre>";
print_r( $this->facebook );
echo "</pre>";
exit;
}
}
}
}https://stackoverflow.com/questions/10825763
复制相似问题