PHP-код не работает на Facebook - PullRequest
       29

PHP-код не работает на Facebook

0 голосов
/ 19 декабря 2011

Я использую этот код для слияния текста с изображением, и он работает нормально. Но когда я использую этот код с приложением 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);
    }
}
?>

1 Ответ

5 голосов
/ 19 декабря 2011

Проблема в том, что вы пытаетесь доставить два разных типа контента на одну страницу. Вы не можете отправить заголовок image / jpeg, указав браузеру ожидать изображение, а затем отправить js и / или html. Для этого вам нужно использовать два php-скрипта. Один, который отправляет заголовок image / jpeg и генерирует изображение, как у вас в вашем первом блоке кода, а второй - с обычными заголовками, которые включают первый в качестве источника тега изображения. Если вы хотите, чтобы ваше изображение было динамичным, вы можете передать параметры в скрипт изображения, как на любой 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);
}
}
?>

Надеюсь, это поможет.

...