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

Как отправить файл в Телеграм через OpenServer 6.5.0?

Если отправлять через хостинг, то всё работает.
Но если через OpenServer, то получаю ошибку:
Array(
            [ok] => 
            [error_code] => 400
            [description] => Bad Request: there is no document in the request
)

$FILE = $_SERVER['DOCUMENT_ROOT'].'/img.jpg';
$ch = curl_init();
curl_setopt_array($ch,array(
	CURLOPT_URL 			=>'https://api.telegram.org/bot'.$TOKEN.'/sendDocument',
	CURLOPT_POST 			=> true,
	CURLOPT_RETURNTRANSFER 		=> true,
	CURLOPT_SSL_VERIFYHOST 		=> false,
	CURLOPT_SSL_VERIFYPEER 		=> false,
	CURLOPT_TIMEOUT 		=> 10,
	CURLOPT_POSTFIELDS 		=> json_encode(array(
		'chat_id' => $CHAT_ID,
		'document' => new \CURLFile($FILE)
	)),
));
echo curl_exec($ch);
curl_close($ch);
  • Вопрос задан
  • 198 просмотров
Подписаться 1 Простой 4 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Skillbox
    Профессия PHP-разработчик с нуля до PRO
    7 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
Решения вопроса 1
ProjectSoft
@ProjectSoft
Front-end && Back-end разработчик
Я не заметил при копировании кода, что ты сам установил лимит времени CURLOPT_TIMEOUT. Установи его в ноль и всё пройдет как надо. Так же стоит установить лимит на время выполнения скрипта. Именно в функции выполнения запроса cUrl set_time_limit(0); если требуется отправка файла большего размера (например в 100МБ).

Ты в локальной сети и имеешь определённые ограничения по скорости, от этого, практически, никуда не деться.
На внешнем сервере всё зависит от его мощностей и настроек.

Далее. По настройкам отправки самого файла.
Ты не передаёшь его тип и его имя. Это можно сделать при инициализации CURLFile
curl_setopt_array($ch,array(
	CURLOPT_URL                 =>'https://api.telegram.org/bot' . $TOKEN . '/sendDocument',
	CURLOPT_POST                => true,
	CURLOPT_RETURNTRANSFER      => true,
	CURLOPT_SSL_VERIFYHOST      => false,
	CURLOPT_SSL_VERIFYPEER      => false,
	CURLOPT_TIMEOUT             => 0,
	CURLOPT_POSTFIELDS          => array(
		'chat_id' => $CHAT_ID,
		'document' => new \CURLFile($_FILES["document"]['tmp_name'], $_FILES["document"]['type'], $_FILES["document"]['name'])
	),
));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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