2011-12-19 61 views
0

我正在使用此代碼合併文本與圖像,它工作正常。但是當我用Facebook應用程序使用此代碼時,它不顯示任何輸出。任何人都可以幫我解決問題嗎?據我所知,問題是這條線:PHP代碼不在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); 
    } 
} 
?> 

回答

5

的問題是,你正試圖在一個頁面中提供兩種不同的內容類型。您無法發送圖像/ 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); 
} 
} 
?> 

希望這會有所幫助。

+0

非常感謝brian – Anurag 2011-12-19 14:17:56

+0

但我需要你的幫助。如果我要使用的文本是來自Facebook而不是你好。例如,我有一個Facebook應用程序,它在圖像上寫入fb用戶的名字。 – Anurag 2011-12-19 14:26:20

+1

我確實想要擴展我的例子,但我不想混淆原始問題。由於「圖像」實際上是一個PHP腳本,它可以像其他任何腳本一樣接受查詢參數。圖片標記行可能類似於: echo''; 然後image.php腳本會使用$ _REQUEST ['name']來生成文本。 我們在FB遊戲中使用了類似的東西來生成地圖: https://liquidfyre.com/petdragonstwo/mapmarker.php?scale=16&markers[]=0,3462,1682&markers[]=0,6475,922 – Ravenex 2011-12-20 02:39:19