Php 电报机器人API错误400照片具有不支持的扩展名
我试图通过我的一个电报机器人使用“sendPhoto”方法发送一个动态创建的png图像(生成png文件的php脚本,[下面的代码]) 当我链接一个物理png文件(在multipart字段参数中)时,它工作正常,但当我尝试使用php文件时,我从电报中收到以下错误: 照片具有不支持的扩展名。使用.jpg、.jpeg、.gif、.png、.tif或.bmp中的一种 PHP代码非常简单,在我的浏览器中打开文件时效果很好(显示了一个下载png文件的对话框,它在我的计算机上可以正常打开):Php 电报机器人API错误400照片具有不支持的扩展名,php,api,telegram-bot,Php,Api,Telegram Bot,我试图通过我的一个电报机器人使用“sendPhoto”方法发送一个动态创建的png图像(生成png文件的php脚本,[下面的代码]) 当我链接一个物理png文件(在multipart字段参数中)时,它工作正常,但当我尝试使用php文件时,我从电报中收到以下错误: 照片具有不支持的扩展名。使用.jpg、.jpeg、.gif、.png、.tif或.bmp中的一种 PHP代码非常简单,在我的浏览器中打开文件时效果很好(显示了一个下载png文件的对话框,它在我的计算机上可以正常打开): 有没有办法绕过这
有没有办法绕过这个扩展名检查,在电报请求中发送我的动态图像脚本(扩展名为.php的文件)?结果证明bot-API与此无关。 当我真的需要附加脚本输出时,我错误地附加了脚本文件(duh!):/ 因此,将输出缓冲区刷新到一个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!';
您可以让服务器将.png文件“解释为php”。(现在可能是错误的术语,但我想你知道我遇到了什么)谢谢。是的,我可以在web服务器上使用重写规则。。希望有一个更优雅的解决方案,但乞丐不能挑三拣四:)好吧,设法解决了问题,效果很好。我的错误与botapi无关。我所做的错误是发送php文件,而实际上我想在php文件中发送脚本的输出。长话短说,将代码的输出刷新到一个tmpfile中,并将其发送到php文件,这样做就成功了。
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!';