Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 电报机器人API错误400照片具有不支持的扩展名_Php_Api_Telegram Bot - Fatal编程技术网

Php 电报机器人API错误400照片具有不支持的扩展名

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文件的对话框,它在我的计算机上可以正常打开): 有没有办法绕过这

我试图通过我的一个电报机器人使用“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!';