@Kerm

На сервер приходит пустой массив с файлом, если название файла содержит русские буквы, в пути к файлу указанному в CURLFile объекте?

Есть древний скрипт для выгрузки в интернет магазин, там такой код для загрузки изображений на сервер:

foreach($a as $k=>$r) {
      $path = str_replace("/","\\", $r['path']);
      $pict_at = '\\\\images4\\'.$path;

      if (file_exists($pict_at)) {
        echo '^'.$r['path']."\r\n";
        $pd = array();
        $pd['ta'] = 'up_pict';
        $pd['path'] = $r['path'];

        if (function_exists('curl_file_create')) { // php 5.5+
          $cFile = curl_file_create($pict_at);
        } else { // 
          $cFile = '@' . realpath($pict_at);
        }
          
        $pd['file'] = $cFile;
        sync_ta($pd);
        echo "\t".' +'."\r\n";
      } else {
        $s.= $r['path']."\r\n";
        echo "\t".'#'.$r['path']."\r\n";
      }
    }

function sync_ta($pd) {
  global $host;

  $pd['skey'] = ''; // сертификат-пароль

  echo date('H:i:s')." post to ".$host."\r\n";

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'http://'.$host.':80/sync/index.php');
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $pd);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_TIMEOUT, 180);

  $s = curl_exec($ch);
  $i = curl_getinfo($ch);

  curl_close($ch);

  return ($i['http_code']==200) ? $s : false;
}


В $cFile получается следующий массив:

class CURLFile#3 (3) {
  public $name =>
  string(72) "\\images4\w20230134_красный_add01_29.jpg"
  public $mime =>
  string(0) ""
  public $postname =>
  string(0) ""
}


На сервер при этом прилетает пустой массив $_FILES, но если в названии цвета указаны на английском, как в других товарах, все выгружается нормально.

Поменять название цветов нельзя в новой коллекции, подскажите может кто сталкивался? У меня нагуглить не получилось, с подобной проблемой сталкиваюсь впервые. Выгрузка идет с Windows на Linux, везде utf8.

Я же правильно понимаю что curl при отправке берет указанный в ссылке файл и отправляет его на сервер удаленный как файл, но не понимаю почему ему русские буквы не нравятся в названии файла.
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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