Задать вопрос
@yazhog

Как заменить CURLFile на CURLOPT_POSTFIELDS?

Пишу бота для телеграма, Использую библиотеку: https://github.com/mgp25/Telegram-Bot-API

Проблема в ошибке:
Fatal error: Class 'CurlFile' not found in /var/www/БЛАБЛАБЛА/src/Telegram.php on line 471
Хостер отказался обновлять версию PHP.

Вот функция с ошибкой:
private function uploadFile($method, $data)
  {
    $key = array(
      'sendPhoto'    => 'photo',
      'sendAudio'    => 'audio',
      'sendDocument' => 'document',
      'sendSticker'  => 'sticker',
      'sendVideo'    => 'video',
      'setWebhook'   => 'certificate'
    );

    if (filter_var($data[$key[$method]], FILTER_VALIDATE_URL))
    {
      $file = __DIR__ . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . mt_rand(0, 9999);

      $url = true;
      file_put_contents($file, file_get_contents($data[$key[$method]]));
      $finfo = finfo_open(FILEINFO_MIME_TYPE);
      $mime_type = finfo_file($finfo, $file);

      $extensions = array(
        'image/jpeg'  => '.jpg',
        'image/png'   =>  '.png',
        'image/gif'   =>  '.gif',
        'image/bmp'   =>  '.bmp',
        'image/tiff'  =>  '.tif',
        'audio/ogg'   =>  '.ogg',
        'video/mp4'   =>  '.mp4',
        'image/webp'  =>  '.webp'
      );

      if ($method != 'sendDocument')
      {
        if (!array_key_exists($mime_type, $extensions))
        {
          unlink($file);
          throw new TelegramException('Bad file type/extension');
        }
      }

      $newFile = $file . $extensions[$mime_type];
      rename($file, $newFile);
      $data[$key[$method]] = new CurlFile($newFile, $mime_type, $newFile);
    }
    else
    {
      $finfo = finfo_open(FILEINFO_MIME_TYPE);
      $mime_type = finfo_file($finfo, $data[$key[$method]]);
      $data[$key[$method]] = new CurlFile($data[$key[$method]], $mime_type, $data[$key[$method]]);
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $this->baseURL . $method);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

    $response = json_decode(curl_exec($ch), true);

    if ($url)
      unlink($newFile);

    return $response;
  }


Вот в этих строках проблемы:

$data[$key[$method]] = new CurlFile($newFile, $mime_type, $newFile);
/////////
$data[$key[$method]] = new CurlFile($data[$key[$method]], $mime_type, $data[$key[$method]]);
  • Вопрос задан
  • 2506 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Nc_Soft
if (class_exists('\CURLFile')) {
            curl_setopt($ch, CURLOPT_POSTFIELDS, ['file1' => new \CURLFile($path)]);
        } else {
            curl_setopt($ch, CURLOPT_POSTFIELDS, ['file1' => "@$path"]);
        }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы