Капча и кодировка файлов

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
marksv
Сообщения: 6
Зарегистрирован: 2012.11.13, 10:06

Капча и кодировка файлов

Сообщение marksv »

Добрый вечер!

На днях подключил капчу стандартными средствами Yii, на локалке все гуд, но при деплое на рабочий сервер появилась проблема в том, что изображение не может быть отображено из-за присутствия ошибок. Как выяснилось, проблема была в кодировке файлов. В общем, один раз решил проблему, перегнав все файлы в utf-8 без bom, но после очередной работы с проектом снова увидел, что капча не работает.
По всей видимости, мой редактор сохраняет файлы в не подходящей кодировке для виджета капчи. Для очередного фикса капчи мне нужно было отыскать файл, который сохранен был не в той кодировке, что надо и поковыряться в настройках редактора, чтобы тот сохранял файлы как надо. Но, подумал я и решил, что может лучше допилить сам виджет капчи, чтобы он меньше вредничал. Так я и сделал.

Файл CCaptchaAction.php
Вот как выглядит старый код, стр.263:

Код: Выделить всё

        header('Pragma: public');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Content-Transfer-Encoding: binary');
        header("Content-type: image/png");
        imagepng($image);
        imagedestroy($image);
 
Вот, как я его обновил:

Код: Выделить всё

        header('Pragma: public');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Content-Transfer-Encoding: binary');
        header("Content-type: image/png");

        ob_start();
        ob_clean();
        imagepng($image);
        imagedestroy($image);
        ob_end_flush();
 
Собственно, теперь никакие невидимые символы из-за "неправильной" кодировки не смогут помешать рендерингу изображения.

До этого искал решение проблемы, и в общем-то четкого ответа я не нашел, кроме как все файлы перекодировать в utf-8 without bom.
Хорошо бы внести эту поправку в последующую версию yii, одной проблемой, как говорится, да поубавится :)
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: Капча и кодировка файлов

Сообщение Nafania »

Вместо того, чтобы настроить редактор, вы предлагаете "исправить" фреймворк - класс.
Это называется костыль.
marksv
Сообщения: 6
Зарегистрирован: 2012.11.13, 10:06

Re: Капча и кодировка файлов

Сообщение marksv »

аха, давай вообще на все баги глаза закроем, будем довольствоваться тем, что есть.
Это допиливание скрипта для более стабильной работы в различных условиях.
Не надо говорить, что это костыль..
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: Капча и кодировка файлов

Сообщение Nafania »

Где здесь баг-то? Вы знаете чем utf-8 без bom отличается от utf-8 c bom?
Хорошо, что у вас только лишь капча перестала работать.
marksv
Сообщения: 6
Зарегистрирован: 2012.11.13, 10:06

Re: Капча и кодировка файлов

Сообщение marksv »

Кстати, я не уверен в том, что у меня были файлы именно в utf-8 bom.
Часть файлов были в ANSI. И возможно, спец.символы, которые мешали генерации капчи крылись не в bom.
Мой код за счет использования буфера повышает стабильность работы капчи, что я увидел на своей практике.

Nafania, если вы относитесь к разработчикам, то скажу сразу, я не пытаюсь навязать эту идею по обновлению CCaptchaAction в последующих выпусках. Мне все равно. Хотел немного помочь. А считаете эту идею х*рней, так и напишите, и закрывайте тему.
Аватара пользователя
Koduc
Сообщения: 140
Зарегистрирован: 2011.02.15, 18:56

Re: Капча и кодировка файлов

Сообщение Koduc »

marksv писал(а):Кстати, я не уверен в том, что у меня были файлы именно в utf-8 bom.
Часть файлов были в ANSI.
Передача на сервер - всегда только бинарная должна быть, в редакторе - утф8 без bom, без исключений! (проект видимо простой, поэтому только каптча сломалось).
Чем везде костыли вставлять ненужные - настройте нормально свою рабочую среду. Иначе дальше будет только хуже - переводы, скрипты, json, sql для базы - много чего может ломаться из-за bom/ansi, сил не хватит везде костыли втыкать.
Разработка на Yii: monoray.ru
Открытое бесплатное решение для создания сайтов по аренде/продаже недвижимости: Open Real Estate
Аватара пользователя
Koduc
Сообщения: 140
Зарегистрирован: 2011.02.15, 18:56

Re: Капча и кодировка файлов

Сообщение Koduc »

Да, и еще: https://github.com/yiisoft/yii/wiki/Cor ... code-style
- Files MUST use only UTF-8 without BOM for PHP code.
Разработка на Yii: monoray.ru
Открытое бесплатное решение для создания сайтов по аренде/продаже недвижимости: Open Real Estate
marksv
Сообщения: 6
Зарегистрирован: 2012.11.13, 10:06

Re: Капча и кодировка файлов

Сообщение marksv »

Koduc писал(а):
marksv писал(а):Кстати, я не уверен в том, что у меня были файлы именно в utf-8 bom.
Часть файлов были в ANSI.
Передача на сервер - всегда только бинарная должна быть, в редакторе - утф8 без bom, без исключений! (проект видимо простой, поэтому только каптча сломалось).
Чем везде костыли вставлять ненужные - настройте нормально свою рабочую среду. Иначе дальше будет только хуже - переводы, скрипты, json, sql для базы - много чего может ломаться из-за bom/ansi, сил не хватит везде костыли втыкать.
Прислушался я к вашему ответу, стал разбираться с рабочей средой. Не могу только понять, почему изначально файлы фреймворка Yii идут в кодировке ANSI?
Или я что-то не понимаю, но вот прям сейчас скачал последнюю версию yii, и открывая любой файл, notepad++ показывает, что файл в ANSI.
Обновляя библиотеку, мне нужно значит самому каждый раз прогонять все файлы в UTF-8 without BOM?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Капча и кодировка файлов

Сообщение anton44eg »

пожет проблема notepad++? Yii 1.1.13 - Utf-8
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Капча и кодировка файлов

Сообщение yiijeka »

ОФФТОПИК: notepad++ в опции-настройки-новыйдокумент: В "кодировка" поставьте маркер в UTF-8, и галочку преобразовывать ANSI в UTF8 без DOM при открытии файлов.
Аватара пользователя
Koduc
Сообщения: 140
Зарегистрирован: 2011.02.15, 18:56

Re: Капча и кодировка файлов

Сообщение Koduc »

marksv писал(а):Не могу только понять, почему изначально файлы фреймворка Yii идут в кодировке ANSI?
Если в файле нет специфичных для UTF-8 символов - то ANSI в этом случае не отличается от UTF-8 ничем, редактор просто не понимает что перед ним за файл и использует кодировку по умолчанию. Поэтому в редакторе необходимо ставить кодировку по умолчанию, чтобы все файлы открывались и создавались в UTF-8.
Разработка на Yii: monoray.ru
Открытое бесплатное решение для создания сайтов по аренде/продаже недвижимости: Open Real Estate
marksv
Сообщения: 6
Зарегистрирован: 2012.11.13, 10:06

Re: Капча и кодировка файлов

Сообщение marksv »

Спасибо всем ответившим, что помогли разобраться с моей ситуацией. Часто не получается заходить на форум, поэтому затянул с ответом.
Notepad++ настроил как надо, но он у меня, как вспомогательный инструмент, а в основном работаю в sublime text, в котором также отстроил кодировки по умолчанию, как положено. Так что все гуд :)
neorfey
Сообщения: 2
Зарегистрирован: 2018.02.06, 14:55

Re: Капча и кодировка файлов

Сообщение neorfey »

Прошу сильно не пинать, "я не волшебник я только учусь"
Проблема такая, не отображается капча
На хосте все работает норм
Изображение
Этот же модуль в локалке тестирую
Изображение
Не отображается =(
Может кто подскажет, может чего доустановить надо
debian 9, apache2, php 7.0, php-gd и imagemagick установлены

UPD. Вопрос решен. Кодировка файла /protected/main.php UTF-8 была, проглядел, поменял на UTF-8 без BOM все заработало.

Появилась другая проблема

Код: Выделить всё

Не определено свойство "Users.session".
Изображение

Не подскажете куда копнуть?
sam
Сообщения: 31
Зарегистрирован: 2017.12.14, 18:23

Re: Капча и кодировка файлов

Сообщение sam »

neorfey писал(а): 2018.02.06, 15:48 Проблема такая, не отображается капча
у меня сейчас похожая проблема. на локалке капча работает, все ок., на сервер залил проект, капча перестала отображаться
(выяснил через phpinfo() что на сервере gd не установлен) кто знает как правильно устаналвивается? (sudo apt-get install gd не помогло)
chesar
Сообщения: 514
Зарегистрирован: 2013.04.10, 17:49

Re: Капча и кодировка файлов

Сообщение chesar »

sudo apt-get install php5-gd
sam
Сообщения: 31
Зарегистрирован: 2017.12.14, 18:23

Re: Капча и кодировка файлов

Сообщение sam »

У меня NGINX, сделал следующее и помогло:
sudo bash
apt install php5-gd
apt install freetype*
sudo service php5-fpm stop
sudo service php5-fpm start
Ответить