Я не заметил при копировании кода, что ты сам установил лимит времени
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'])
),
));