Rodger1956630
7.03.2014 - 19:49
Всем привет! У меня такая проблема:
Функция move_uploaded_file, при перемещении файла с временного хранилища сервера на новое место, которое указывается вторым параметром - move_uploaded_file ( string $filename , string $destination ), сохраняет файлы изображений с такими именами: СЊРіР°Рвановна.JPG! Причём, изначально имя было таким: Ольга Ивановна.JPG
Видимо, это связанно с кодировкой. Но вот в чём проблема: внутри кода php, если попытаться вывести эту строку с помощью функции "echo", то строка правильно отображается. Более того, если проверить как закодированы эти символы с помощью функции mb_detect_encoding, то в ответ получаю кодировку UTF-8. Но на диске я вижу совершенно другие имена: СЊРіР°Рвановна.JPG
Буду благодарен за помощь! Заранее благодарю.)
Winston
7.03.2014 - 19:55
Перекодировать имя файла при перемещении, примерно так
$filename = iconv('cp1251', 'utf-8', $_FILES['filename']['name']);
Rodger1956630
7.03.2014 - 20:16
Спасибо! Я уже пробовал этой функцией вернуть файл в нормальное состояние, но пока нет результата. Если получиться, то я отпишусь.
Winston
7.03.2014 - 20:26
А как именно ты ее пробовал?
Rodger1956630
7.03.2014 - 21:13
Да видимо не совсем правильно. Вот код функции "move_uploaded_file":
@move_uploaded_file($_FILES[$image_fieldname]['tmp_name'], $upload_filename)
or handle_error("возникла проблема сохранения вашего изобразения " .
"в его постоянном месте.",
"ошибка, связанная с правами доступа при перемещении " .
"файла в {$upload_filename}");
Rodger1956630
7.03.2014 - 21:15
Я пробовал разными способами, но внедрить непосредственно в "move_uploaded_file", я не смог. Пытался по отдельности применить к переменным: $image_fieldname, $upload_filename. Резултата не было.
Rodger1956630
7.03.2014 - 21:18
Вот так ещё пробовал:
@move_uploaded_file(iconv('cp1251', 'utf-8', $_FILES[$image_fieldname]['tmp_name']), $upload_filename)
or handle_error("возникла проблема сохранения вашего изобразения " .
"в его постоянном месте.",
"ошибка, связанная с правами доступа при перемещении " .
"файла в {$upload_filename}");
Winston
7.03.2014 - 21:21
Перекодировать нужно
Цитата (Rodger1956630 @ 7.03.2014 - 19:18) |
$upload_filename |
а не временное имя файла.
Rodger1956630
7.03.2014 - 21:41
Вот в таком синтаксисе не получается, если вставить этот кусок кода, после функции "move_uploaded_file":
$upload_filename = iconv('cp1251', 'utf-8', $_FILES[$upload_filename]['name']);
Или тут ошибку я допустил?
Rodger1956630
7.03.2014 - 21:44
Кстати, если в переменной $upload_filename будут храниться только английские символы, то всё нормально отображается. Ну это я к слову...
Winston
7.03.2014 - 21:44
Цитата (Rodger1956630 @ 7.03.2014 - 19:41) |
не получается, если вставить этот кусок кода, после функции "move_uploaded_file":
|
Нужно вставить не ПОСЛЕ, а ДО функции.
Rodger1956630
7.03.2014 - 21:47
В таком варианте, вообще не работает, выдаёт ошибку и не создаёт никакого файла на диске:
$upload_filename = iconv('cp1251', 'utf-8', $_FILES[$upload_filename]['name']);
@move_uploaded_file($_FILES[$image_fieldname]['tmp_name'], $upload_filename)
or handle_error("возникла проблема сохранения вашего изобразения " .
"в его постоянном месте.",
"ошибка, связанная с правами доступа при перемещении " .
"файла в {$upload_filename}");
Rodger1956630
7.03.2014 - 21:48
Возможно, с именами проблема. Я сам не пойму в чём дело.
Rodger1956630
7.03.2014 - 21:54
Возможно, второй параметр не верно задан. То что я зелёным выделил:
$upload_filename = iconv('cp1251', 'utf-8', $_FILES[$upload_filename]['name']);
Rodger1956630
7.03.2014 - 22:00
Есть! Решил!)
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.