Контактная форма запись файла вложения

Автор sus, 19 апреля 2016, 20:08:27

« назад - далее »

sus

На форме контакта есть поле для прикрепления файла.
Файл записывается в папку  upload
Но вот имя файла записывается со знаком ? в конце.
Например  5716600328f58?.jpg
Вопрос такой... Где устанавливается имя файла при записи, и как сделать имя без знака вопроса в конце.
Спасибо.

Adik

#1
Имя файла меняется при загрузке в /classes/Tools.php function fileAttachment.
Знака "?" в имени быть не должно, только латинские буквы и цифры

sus

Спасибо за ответ. Все это так, но на локале правельно, так и есть, а на провайдере этот-же файл прикрепляю и получаю
57150cf494992?.jpg
Что делать?

sus

Заметил такую штуку... Если файл прикреплен имя например Узкий.jpg то записывает с ? в конце, если цифры или латынские например uzkii.jpg то запись нормальная.

sus

#4
Как сделать так что-бы в строке
$fileAttachment['name'] = $_FILES[$input]['name'];
в Tools.php в имени файла была замена если есть знак ? например заменить на _ или вообще убрать
Примерно как-то так
$fileAttachment['name'] = (bool)preg_match('?', $_FILES[$input]['name']);

Миколас

Установи на сайте кодировку UTF8 проблем не будет.
Знак '?' пояаляется когда не определен символ.

sus


Миколас


sus

какие файлы имеете в виду? Прикрепляю для передачи файл с диска Узкий.jpg
В базе кодировка UTF8

Mr.Sen

То что такая кодировка в базе не играет никакой роли. При обрезании разрешения файла отрезается один символ от имени.
Можно изменить в fileAttachment
$file_attachment['rename'] = uniqid().Tools::strtolower(substr($_FILES[$input]['name'], -5));
на
$file_attachment['rename'] = uniqid().Tools::strtolower(substr($_FILES[$input]['name'], -4));
Или запретить названия файла на русском, только латиницей.

sus

Вы правы, заменил на
$file_attachment['rename'] = uniqid().Tools::strtolower(substr($_FILES[$input]['name'], -4));
И все, записан файл нормально.
Но это с этим именем файла
Узкий.jpg
Но может и сдругими такое быть...
Тогда такой вопрос.. Как запретить название файла на русском.. И где это сравнение поставить.
Спасибо.

Adik

$file_name = strstr($_FILES[$input]['name'], '.');
$file_attachment['rename'] = uniqid().Tools::strtolower($file_name);

Замените код и проблем с русскими названиями не будет.

sus

#12
Как это интересно  работает..
$file_name = strstr($_FILES[$input]['name'], '.');
$file_attachment['rename'] = uniqid().Tools::strtolower($file_name);


Если разложить то получиться пустое имя файла.
1.Возвращает подстроку строки
$_FILES[$input]['name']
начиная с первого вхождения '.' до конца строки.
2.Ворой присваивает уникальный код.
А чему присваевать если $file_name пустой FALSE.
В принципе если бы FILES[$input]['name'] то-есть имя файла было-бы например 'USER@EXAMPLE.com' то
1.Возврат подстроки com
2.Уникальный код присвоить com

Вставлял в Tools.php не работает и файл приложения вообще не записываит.



Mr.Sen

При имени файла "Узкий.jpg" должно вернуть ".jpg".
Если возвращает пустое значение (false), значит в переменной
$_FILES[$input]['name']
нет знака  точки.

Mr.Sen

Имя у файла должно быть не пустое
<?php
$fn
= "Узкий.jpg";
$file_name = strstr($fn, '.');
$file_attachment = uniqid() . $file_name;
echo
'File_attachment : ' . $file_attachment;
?>