Captcha не работает даже после удаления BOM

Автор Jerry, 20 апреля 2008, 13:51:24

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

0 Пользователи и 1 гость просматривают эту тему.

Jerry

Я редактировал языковые файлы и файлы templates в блокноте.
При сохранении файла в UTF-8 блокнот добавляет в начало BOM (byte order marker) сигнатуру FFFE (или "яю"). Captcha естественно не работала.

Но потом я в FAR Manager пооткрывал все эти файлы и поудалял яю перед <?php.
(FAR без плагинов и НЕ поддерживает UTF8, а потому показывает каждый байт и не знает про BOM, но показывает, по этому их легко удалить).
BOM оказалась только в тех, файлах, которые я как раз изменял в блокноте. Я удалил сигнатуру в языковых файлах.
Но CAPTCHA всеравно НЕ работает, ни стандартная, ни из модов. В чем дело?
На каптчу влияют не только языковые файлы? (из почти всех измененных templates я тоже убрал BOM). Какие еще файлы нужно почистить от сигнатуры, какие могут повлиять? Вроде только файлы Registration и Index..

Для выявления файлов, содержащих BOM (в указанных папках) есть такой хороший скрипт:
<?
xdir('.',0);
xdir('./директория',1);
xdir('./еще_директория',1);

function xdir($path,$recurs) {
global $find;
if ($dir = @opendir($path)) {
while($file = readdir($dir)) {
if ($file == '.' or $file == '..') continue;
$file = $path.'/'.$file;
if (is_dir($file) && $recurs)  {
xdir($file,1);
}
if (is_file($file) && strstr($file,'.php')) {
$f = fopen($file,'r');
$t = fread($f, 3);
if ($t == "\xEF\xBB\xBF") {
$find = 1;
echo "$file<br>\n";
}
fclose ($f);
}

closedir($dir);
}
}
if ($find == 0) echo "All clear";
?>

С помощью него я узнал ВСЕ файлы с BOM и почистил. Всё чисто, а CAPTCHA НЕ работает!

Jerry

После стольких месяцев нашлась причина:
в index.template.php был дописан кусок html кода ВНЕ тега "<?php" (т.е. выводился не через echo внутри php, а вне php).
Когда я его оттуда убрал (поместил внутрь php с echo-выводом), шрифт стал меньше (был увеличенным), а паптча заработала!

Не только BOM может стать причиной проблемы!

Mavn

у меня счетчики работают по такому принципу и проблем не вижу у себя.
<?php
код шаблона
?>
код счетчика
<?php
код шаблона
?>
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

Jerry

Странно...

У меня в первой строке (до первого "<?php") было <link rel="SHORTCUT ICON" href="...">.
Наверное, еще зависит от того, какой код. А вообще, проблемы совсем не должно быть, потому что парсер просто выводит всё, что находится вне "<?php".

Jerry

Я сегодня выяснил: проблема возникает из-за любого вывода в файлах директории Sources, либо в самом начале шаблона (как в моем примере - вывод до открывающего php-тега).
Т.е. при выводе чего-либо до начала загрузки шаблона!

Проблему вообще неверно описывать как следствие наличия сигнатуры BOM: эта сигнатура - только частный случай, просто она выводится до загрузки шаблона. Она ведь занимает 3 байта и находится в самом начале (это легко увидеть FAR Manager'ом с однобайтовыми кодировками DOS / cp1251 или любым другим редактором, который не поддерживает UTF-8 или не переключается на неё автоматически) и выводится в начало как текст.
php выводит всё, будь это BOM сигнатура или нет. И не важно, что это именно. Если у этой сигнатуры стереть два байта, оставив, один, или вообще заменить на свой текст, проблема с увеличенным шрифтом и нерабочей каптчей будет.

Mr. Anviss


Jerry

Да, GD 2. Но я говорил: проблема была не в этом (библиотека есть).
Все проблемы (каптча, увеличенный шрифт, может еще чего там...), которые связывают с bom, на самом деле появляются из-за вывода чего угодно до шаблона (просто обычно это трехбайтная bom, которая как раз в начале и находится).

Я пробовал по-разному добавлять вывод в начало, заменять эту сигнатуру на свой текст - проблема есть. Когда убираю всё это - проблема исчезает.

Mr. Anviss

Каптча - это код визуального подтверждения и я не пойму какое отношение она имеет к Вашим увеличеным шрифтам?

Mavn

Цитата: anviss от 31 января 2009, 11:06:23
Каптча - это код визуального подтверждения и я не пойму какое отношение она имеет к Вашим увеличеным шрифтам?

вся проблема в том что при попытке вывести что либо вне функции шаблона будет приводит к увеличению шрифта на форуме и неработоспособности каптчи и как раз речь идет о том что в случае если любой файл сохраняется с сигнатурой бом то она(эта сигнатура) подгружается в самое начало файла минуя все функции шаблона или делать вставку какого либо кода вне функции шаблона то результатом будет то о чем написал выше. Увеличение шрифта и неработоспособность каптчи.
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

Mr. Anviss

А, ну теперь понял. Стоит только нормально объяснить.

Mavn

SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

Jerry

В общем, да: уже несколько раз нормально объяснили. Можно прикрыть тему.