Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Загрузка и сохранение русскоИмённых ф-ов как на правильном хостинге
Форумы портала PHP.SU » » Кодировки и все смежное » Загрузка и сохранение русскоИмённых ф-ов как на правильном хостинге

Страниц (1): [1]
 

1. alejandro - 27 Июня, 2014 - 19:21:56 - перейти к сообщению
Уважаемые ФОРУМЧАНЕ!

Помогите в настройке сервера. Работаю над проектом одного сайта под управлением популярной CMS.

На хостинге интернете php-скрипты прекрасно работают с файлами (проблема картинками).
Загружаются и сохраняются с оригинальными русскими именами.



Когда переношу на домашнюю машину, всё прекрасно работает и выполняется...
НО. стоит запустить файловый менеджер и тут же проблема.
Все файлы загружаются и в меню файл-менеджера (php-программы) и отображаются с кириллицей, тогда как в папке они уже лежат с "кракозяблами".jpg.

Если закинуть файл самому (само собой все папки в Windows) с русскими символами в имени, то ф-менеджер выдаёт ошибку, - в Joomla, MODx, везде по разному.


Интересные симптомы:
Если сделать простой скрипт загрузки и обернуть указатель на файл


в функцию iconv:
PHP:
скопировать код в буфер обмена
  1. iconv('UTF-8',"windows-1251", $_FILES["myfile"]["name"])

то файл попадёт на сервер со своим оригинальным названием на русском.


Установки в httpd.conf директивы "AddDefaultCharset" ни как не сказываются, хоть UTF-8, хоть windows-1251.


В нете пишуть про расширение mbstring для PHP, которое подключается в php.ini
На хостинге в phpinfo()
mbstring.http_output_conv_mimety pes
для колонки Local Value ^(text/|application/xhtml\+xml)
для колонки Maser Value ^(text/|application/xhtml\+xml)

на локальной машине параметра такого в phpinfo() не выводится. Вот так вот Растерялся

Возможно необходимо создать в php.ini данную строчку, но там n-ой не присутствует не в комментах ни как бы то нибыло... вообще мало, что по этому поводу можно найти.
2. Viper - 28 Июня, 2014 - 02:06:39 - перейти к сообщению
extension=php_mbstring.dll есть такое?

PS! Windows версия? xp и версии старше по разному работают с кодировками имен файлов.
PS1! Используя в именах файлов символы отличные от латиницы, вы автоматически наживаете себе геморой на всю жизнь.
3. alejandro - 28 Июня, 2014 - 17:52:21 - перейти к сообщению
;Есть такая строка
extension=php_mbstring.dll
;расскоментирована в php.ini


Поэксперементировал с разными параметрами за блоком [mbstring] - брал у умельцев из нета.
..полагаю если бы она влияла на процесс, то в разных вариантах, файл бы передавался, как то так
Їрщы.jpg или ╤Д╨░╨╣╨╗.jpg или так файл.jpg (соответственно для каждой установки)

Вообще сам файл внутри целый, даже если текстовой кидать, проблема только с именами.

Геморно то оно конечно да, только ТРАНСЛИТ ЭТО АРХАИЗМ.
Были ещё временна когда на CD болванки нельзя была файлы с русскими именами писать,
... что тоже надо было программы для Транслита изобретать, или всё таки как весь белый мир, родными буквами пишем. Это просто вредная привычка..

С другой стороны, вот задача — надо плагин поставить и сайт протестить,
чтобы не завалить. Кидаете себе, потом обратно, а потом - ОПА! А кто-то
из web-users закачивал файлы с русскими буквами. Сидите и думаете:
"почему файл менеджер накрылся". Вот и весь "гемор"

Есть ещё такой блок
[ICONV]
;iconv.input_encoding = UTF-8
;iconv.internal_encoding = UTF-8
;iconv.output_encoding = UTF-8

тоже ноль реакции. Кстати для остальных блоков, что идут в квадратных скобках есть своё расширение в формате .dll, а типа extension=php_iconv.dll нету Однако

на хостинге есть демо файл php.ini, там конечно unix-подобная система, но там вот как:
extension=xml.so
extension=sockets.so
extension=gd.so
extension=iconv.so ; <= вот это расширение
extension=mysql.so
extension=mysqli.so
extension=mbstring.so
extension=zlib.so
extension=ctype.so
extension=json.so
extension=session.so
extension=simplexml.so
4. Мелкий - 28 Июня, 2014 - 18:25:25 - перейти к сообщению
alejandro пишет:
только ТРАНСЛИТ ЭТО АРХАИЗМ.

А брать в качестве имени файла $_FILES["myfile"]["name"] - это глупость. И что?
5. alejandro - 28 Июня, 2014 - 19:49:54 - перейти к сообщению
тогда, ваши предложения по данному вопросу....
6. Мелкий - 28 Июня, 2014 - 20:42:51 - перейти к сообщению
Зависит от целей загрузки файла.
Для тикетов и прочих сообщений имеет смысл писать в СУБД таблицу: id_файла, id_сообщения, оригинальное имя файла. Для самого файла вместо имени использовать id_файла.
Для других целей могут быть другие подходы.
7. alejandro - 29 Июня, 2014 - 11:17:32 - перейти к сообщению
Не очень Вас понимаю. Вы говорите о чистописание: как лучше было бы писать программный код.
Лучше всё таки думаю, так - если можно перехватывать команду с инструкцией записи на диск,
чтобы обернуть её в конструкцию типа iconv( ... , ... . . ). Это бы очень помогло, добавляем путь к такому скрипту в php.ini с помощью:
auto_append_file = "путь/к/файлу.php"
... готово.

Примерно такой способ используют, чтобы настроить заглушку "sendmail",
когда письма отправленные функцией mail() перехватываются из "потока" и
складывать в папку на локальном сервере.

Пока, вижу путь только как разобраться в настройках сервера, или Windows.
Кто знает, делитесь соображениями.
8. Viper - 29 Июня, 2014 - 21:22:48 - перейти к сообщению
alejandro вы пытаетесь лечить зубы через жопу. Уж извините за чистоту.

Правильный путь это, как уже сказал Мелкий, хранить имена в БД, а файлы именовать по id. Вывести вместо id полное имя файла даже школьник сможет.
В этом случае вы избавитесь от множества проблем.

PS! Собственно решать вам. Сделать 1 раз как нужно, или подпирать инвалидную коляску костылями, подклеив их скотчем.
9. alejandro - 29 Июня, 2014 - 21:58:52 - перейти к сообщению
Очень умно!!

ВЫРУБИТЕ ПОЛОВИНУ СТРОК из php.ini или httpd.conf , посмотрим через что зубы вырастут. Какой смысл что-то писать если сервер, всё в то место и засовывает (как вы выразились)

Сайтов много. Движков несколько видов, это что для каждого делать. Вообще суть проблемы улавливаете?!


ТРЕБУЕТСЯ ПОДСТРОЙКА СЕРВЕРА!!! А СКРИПТ С ФУНКЦИЕЙ ДЛЯ ПРИМЕРА!


P.S. на UNIX-ах такая проблема тоже встречается и она решаема вот:
http://unixforum[dot]org/index.php?s[dot][dot][dot]ost&p=548518

Только на Windows модули Апач в бинарных файлах вида "mod_autoindex.so", а не conf!

 

Powered by ExBB FM 1.0 RC1