2016-02-27 90 views
0

我想通过使用“sendPhoto”方法通过我的一个电报机器人发送一个动态创建的png图像(用于生成png文件的php脚本,[code below]))。电报机器人API错误400照片有不受支持的扩展

当我链接物理PNG文件(在多场参数)它工作正常,但是当我尝试使用PHP文件,我收到以下错误,从电报:

照片具有不支持扩展。使用.JPG,.JPEG,.GIF .PNG之一,.TIF或.BMP

的PHP代码是很简单的,效果很好,当我打开我的浏览器中的文件(我看到一个对话框,下载PNG文件并打开罚款我的电脑上):

header("Content-type: image/png"); 
header('Content-Disposition: attachment; filename="moo.png"'); 
$image = imagecreatetruecolor(50, 50); 
imagesavealpha($image, true); 
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127); 
imagefill($image, 0, 0, $transparent); 
ob_start(); 
imagepng($image); 
ob_end_flush(); 
imagedestroy($image); 

有没有一种方法,我可以绕过这个扩展检查,并在我的电报请求发送我的动态图像的脚本(带有扩展名.php文件)?

+0

你可以做您的服务器将“解释”.png文件为php。 (现在可能是错误的条款,但我想你知道我在做什么) – Jeff

+0

谢谢。是的,我可以使用网络服务器的重写规则..希望有一个更优雅的解决方案,但乞丐不能被选择器:) –

+0

没关系,设法解决问题,它的工作很好。我的错误与bot API无关。我做错了什么是发送php文件,当我真的想在PHP文件内发送脚本的输出。长话短说,将代码输出刷新到tmpfile中,并发送它而不是php文件。 –

回答

0

事实证明bot API与它无关。 我错误地附着的脚本文件,当我真的应该需要附加脚本输出(废话!):/ 所以,刷新输出缓冲区为TMPFILE,然后将其发送的伎俩

function pngCraft($width = 100, $height = 100, $asBase64 = FALSE) 
    { 
     $image = imagecreatetruecolor($width, $height); 
     imagesavealpha($image, true); 
     $transparent = imagecolorallocatealpha($image, 0, 0, 0, 127); 
     imagefill($image, 0, 0, $transparent); 
     ob_start(); 
     imagepng($image); 
     $image_data = ob_get_contents(); 
     ob_end_clean(); 
     $out = ($asBase64) ? base64_encode($image_data) : $image_data; 
     imagedestroy($image); 
     return $out; 
    } 

    $file = tmpfile(); 
    fwrite($file, pngCraft()); 
    fseek($file,0); 
    $a = stream_get_meta_data($file); 
    $uri = $a['uri']; 
    rename($uri, $uri.='.png'); 
    $fields[TG_METHOD_SENDPHOTO_PHOTO] = '@'.$uri; 
    $fields[TG_METHOD_SENDPHOTO_CAPTION] = 'Yay!';