【问题标题】:PHP code not working on FacebookPHP 代码无法在 Facebook 上运行
【发布时间】:2011-12-19 08:33:29
【问题描述】:

我正在使用此代码将文本与图像合并,它工作正常。但是当我将此代码与 Facebook 应用程序一起使用时,它不会显示任何输出。谁能帮我解决问题?据我所知,问题出在这一行:

header("Content-Type: image/jpeg"); 

当我删除它时,它会显示一些混乱的输出。

<?php 
header("Content-Type: image/jpeg"); 
$im = ImageCreateFrompng("jump_empty.png");  
$black = ImageColorAllocate($im, 255, 255, 255);
$start_x = 10; 
$start_y = 20; 
Imagettftext($im, 12, 0, $start_x, $start_y, $black, 'ambient.ttf', "hellooo"); 
Imagejpeg($im, '', 100); 
ImageDestroy($im); 
?>

这是我用于 Facebook 应用的代码:

<?php
include_once 'facebook.php';
include_once 'config.php';

$facebook = new Facebook(array(
    'appId' => FACEBOOK_APP_ID,
    'secret' => FACEBOOK_SECRET_KEY,
    'cookie' => true,
    'domain' => '_____'
));
header("Content-Type: image/jpeg");
$session = $facebook->getSession();
if (!$session) {
    $url = $facebook->getLoginUrl(array(
        'canvas' => 1,
        'fbconnect' => 0,
        'req_perms' => 'read_stream,publish_stream'
    ));
    echo "<script type='text/javascript'>top.location.href = '$url';</script>";
} else {
    try {
        $uid = $facebook->getUser();
        $me  = $facebook->api('/me');
        echo "Hey " . $me['name'] . "!<br />";
        $im      = ImageCreateFrompng("jump_empty.png");
        $black   = ImageColorAllocate($im, 255, 255, 255);
        $start_x = 10;
        $start_y = 20;
        Imagettftext($im, 12, 0, $start_x, $start_y, $black, 'ambient.ttf', 'hello');
        Imagejpeg($im, '', 100);
        ImageDestroy($im);
    }
    catch (FacebookApiException $e) {
        echo "Error:" . print_r($e, true);
    }
}
?>

【问题讨论】:

    标签: php facebook-graph-api facebook-apps image.createimage


    【解决方案1】:

    问题是您试图在一个页面中提供两种不同的内容类型。您不能发送 image/jpeg 标头,告诉浏览器期待图像,然后发送 js 和/或 html。为此,您应该使用两个 php 脚本。一个发送图像/jpeg 标头并像您在第一个代码块中一样生成图像,第二个带有普通标头,其中包含第一个作为图像标签的 src。如果你希望你的图像是动态的,你可以像任何 php 页面一样将参数传递给图像脚本。

    您的第一个脚本可以称之为 image.php:

    <?php 
    
    header("Content-Type: image/jpeg"); 
    
    $im = ImageCreateFrompng("jump_empty.png");  
    
    $black = ImageColorAllocate($im, 255, 255, 255); 
    
    $start_x = 10; 
    $start_y = 20; 
    
    Imagettftext($im, 12, 0, $start_x, $start_y, $black, 'ambient.ttf', "hellooo"); 
    
    Imagejpeg($im, '', 100); 
    
    ImageDestroy($im); 
    
    ?>
    

    就像你拥有它一样。你的第二个脚本是:

    <?php
    
    include_once 'facebook.php';
    include_once 'config.php';
    
    $facebook = new Facebook(array(
    'appId'  => FACEBOOK_APP_ID,
    'secret' => FACEBOOK_SECRET_KEY,
    'cookie' => true,
    'domain' => '_____'
    ));
    
    $session = $facebook->getSession();
    
    if (!$session) {
    
    $url = $facebook->getLoginUrl(array(
            'canvas' => 1,
            'fbconnect' => 0,
            'req_perms' => 'read_stream,publish_stream',
    
    ));
    
    echo "<script type='text/javascript'>top.location.href = '$url';</script>";
    
    } else
    
     {
    
    try {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me');
    echo "Hey " . $me['name'] . "!<br />";
    echo '<img src="image.php">';
    }
    catch (FacebookApiException $e) {
     echo "Error:" . print_r($e, true);
    }
    }
    ?>
    

    希望这会有所帮助。

    【讨论】:

    • 但我需要你的一点帮助。如果我要使用的文本来自 facebook 而不是 hello。例如,我有一个 facebook 应用程序,它在图像上写入 fb 用户名。
    • 我实际上很想扩展我的示例来做到这一点,但我不想混淆原始问题。由于“图像”实际上是一个 php 脚本,因此它可以像任何其他脚本一样接受查询参数。图像标签行类似于: echo '';然后 image.php 脚本将使用 $_REQUEST['name'] 生成文本。我们在 FB 游戏中使用了类似的东西在这里生成地图:liquidfyre.com/petdragonstwo/…
    猜你喜欢
    • 2019-01-16
    • 2019-12-31
    • 2021-08-29
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多