За последние 24 часа нас посетил 70321 программист и 5687 роботов. Сейчас ищут 1167 программистов ...

Файлы формы уходят в телеграм с Open Server, с хостинга ошибка 400

Тема в разделе "PHP для новичков", создана пользователем Ivan707, 17 окт 2023.

  1. Ivan707

    Ivan707 Активный пользователь

    С нами с:
    15 ноя 2014
    Сообщения:
    8
    Симпатии:
    0
    Всем добрый вечер!

    Подскажите пожалуйста бестолковому новичку.
    Отправляю содержимое формы обратной связи в группу Телеграмм. На локальном сервере Open Server все отлично работает, все уходит без пробоем.
    Перенес файлы на сервер, проверяю, сообщения уходят, а прикрепленные картинки нет.
    И еще, curl_error($ch) почему то не сообщает, какая произошла ошибка.
    Подскажите пожалуйста, что не так с кодом.

    Поле формы с выбором файлов
    HTML:
    1.  
    2. <div class="form-group">
    3.   <div class="form-attach__label">Файлы</div>
    4.   <div class="form-attach__wrapper">
    5.   <input type="file" name="attach[]" multiple required>
    6.   <div class="form-attach__description">
    7.   <div>Нажмите для загрузки файлов или перетащите их</div>
    8.   </div>
    9.   <div class="form-attach__items"></div>
    10.   </div>
    11. </div>
    12.  
    Валидация и отправка.
    PHP:
    1. const MIME_TYPES = ['image/jpeg', 'image/gif', 'image/png'];
    2. const MAX_SIZE = 1024 * 1024;
    3. define('UPLOAD_PATH', dirname(__FILE__) . '/uploads/');
    4.  
    5. $data = [
    6.   'errors' => [],
    7.   'form' => [],
    8.   'logs' => [],
    9.   'result' => 'success',
    10.   'telegramm' => 'success'
    11. ];
    12.  
    13. $attachs = [];
    14.  
    15. // валидация прикреплённых файлов
    16. if (empty($_FILES['attach'])) {
    17.   foreach ($_FILES['attach']['error'] as $key => $error) {
    18.   if ($error == UPLOAD_ERR_OK) {
    19.   $name = basename($_FILES['attach']['name'][$key]);
    20.   $size = $_FILES['attach']['size'][$key];
    21.   $mtype = mime_content_type($_FILES['attach']['tmp_name'][$key]);
    22.   if (!in_array($mtype, MIME_TYPES)) {
    23.   $data['result'] = 'error';
    24.   } else if ($size > MAX_SIZE) {
    25.   $data['result'] = 'error';
    26.   }
    27.   }
    28.   }
    29.   if ($data['result'] === 'success') {
    30.   foreach ($_FILES['attach']['name'] as $key => $attach) {
    31.   $ext = mb_strtolower(pathinfo($_FILES['attach']['name'][$key], PATHINFO_EXTENSION));
    32.   $name = basename($_FILES['attach']['name'][$key], $ext);
    33.   $tmp = $_FILES['attach']['tmp_name'][$key];
    34.   $newName = rtrim($name, '.') . '_' . uniqid() . '.' . $ext;
    35.   if (!move_uploaded_file($tmp, UPLOAD_PATH . $newName)) {
    36.   $data['result'] = 'error';
    37.   $data['errors']['attach'][$key] = 'Ошибка при загрузке файла.';
    38.   } else {
    39.   $attachs[] = UPLOAD_PATH . $newName;
    40.   }
    41.   }
    42.   }
    43. }
    44.  
    45. /*************** Отправляю Сообщение Работает *****************/
    46. $token = "токен";
    47. $chat_id = "chat_id";
    48.  
    49. function parser($url, &$data){
    50.   $curl = curl_init();
    51.   curl_setopt($curl, CURLOPT_URL, $url);
    52.   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    53.   $result = curl_exec($curl);
    54.   $info = curl_getinfo($curl);
    55.     if (curl_errno($curl) || substr($info['http_code'],0,1) !== '2') {
    56.     itc_log('Ошибка при отправке в Телеграмм : ' . curl_error($curl));
    57.   return  false;
    58.   }
    59.   else{
    60.       itc_log('Уведомление успешно отправлено в Телеграмм.');
    61.   return true;
    62.   }
    63.    curl_close($curl);
    64. }
    65.  
    66. $message = '';
    67. $message .= "<b>Новое сообщение из формы</b>\n";
    68. $message .= "<b>Телефон: </b>" .$data['form']['phone'] ."\n";
    69. $message .= "<b>Сообщения: </b>" .$data['form']['message'] ."\n";
    70.  
    71. $message = urlencode($message);
    72.  
    73. parser("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$message}", $data);
    74.  
    75. /*********** Отправляю картинки НЕ РАБОТАЕТ **********************/
    76. foreach ( $attachs as $attach ) {
    77.    $url = "https://api.telegram.org/bot" . $token . "/sendDocument";
    78.    $href = str_replace($_SERVER['DOCUMENT_ROOT'], '', $attach);
    79.    $name = basename($href);
    80.    $document = new CURLFile($href, 'image/jpeg',$name);
    81.    
    82.    $ch = curl_init();
    83.   curl_setopt($ch, CURLOPT_URL, $url);
    84.   curl_setopt($ch, CURLOPT_POST, 1);
    85.   curl_setopt($ch, CURLOPT_POSTFIELDS, ["chat_id" => $chat_id, "document" => $document]);
    86.    curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type:multipart/form-data"]);
    87.   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    88.   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    89.    
    90.   $result = curl_exec($ch);
    91.   $info = curl_getinfo($ch);
    92.  
    93.    if (curl_errno($ch) || substr($info['http_code'],0,1) !== '2') {
    94.      itc_log('Ошибка при отправке в Телеграмм картинки : ' . curl_error($ch));
    95.   } else {
    96.      itc_log('Уведомление успешно отправлено в Телеграмм картинки.');
    97.   }
    98.    curl_close($ch);
    99.    unlink($href);
    100. }
    Заранее всем спасибо
     
  2. Babka_Gadalka

    Babka_Gadalka Активный пользователь

    С нами с:
    16 фев 2019
    Сообщения:
    162
    Симпатии:
    23
    Адрес:
    Москва, Пушкина, Избушкина, 2й этаж душечка.
    Убедись для начала что на сервер картинки "заливаешь", а потом можно погадать на кофейной гуще.
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    А вот это зачем? Ты же с сервера отправляешь