Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2012, 14:00   #1
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
Вопрос Опять про антиспам=(

Есть 3 файла
reg.php
antispam.php
code.txt

antispam.php-файл в котором генерируется случайный код, записывается в файл code.txt
reg.php-файл в котором на экран выводится картинка антиспама (выводится с помощью img который запскает скрипт antispam.php)
и после вывода картинки открывает измененый файл code.txt и выводит на экран строку записанную в этом файле

Так как изменение в файле code.txt происходит после того как php загрузит/обработает скрипт При выводе на экран $code На экран выводится предыдущее значение кода Например если сейчас на картинке написано 22222 а предыдущая картинка была 11111 то будет выведенно 11111 Подскажите что нужно сделать чтобы выводилось текущее значение code.txt

reg.php:
PHP код:
<img src="antispam.php"><br>
<?php
$fp 
fopen('code.txt''r');
$code fread($fp5);
fclose($fp);
echo 
$code;
$fp fopen('code.txt''w');
fclose($fp);
?>
antispam.php:
PHP код:
<?php
$im 
= @imagecreate(10025)    or die("Cannot Initialize new GD image stream");
$background_color imagecolorallocate($im000);
$text_color imagecolorallocate($im2331491);
$texts=mt_rand(020);
$arr = array('a''b''c''d''e''f',
'g''h''i''j''k''l''m''n''o''p''r''s',
't''u''v''x''y''z''A''B''C''D''E''F',
'G''H''I''J''K''L''M''N''O''P''R''S',
'T''U''V''X''Y''Z''1''2''3''4''5''6',
'7''8''9''0');
// Генерируем пароль
$texts="";
$number=5;
$counts=count($arr)-1;
$fp fopen('code.txt''w');
fclose($fp);
$fp fopen('code.txt''a');
$code="";
for(
$i 0$i $number$i++)
{
// Вычисляем случайный индекс массива
$index=rand(0$counts);
$texts.= $arr[$index];
fwrite($fp$arr[$index]);
}
fclose($fp);
imagestring($im5205$texts$text_color);
imagepng($im);
imagedestroy($im);
?>

Последний раз редактировалось gunsoy; 04.01.2012 в 14:03.
gunsoy вне форума Ответить с цитированием
Старый 04.01.2012, 16:48   #2
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Вашу секретную строку нужно писать в сессию, а не в файл ... представьте что будет если одновременно 2 человека откроют вашу капчу.
Cronos20 вне форума Ответить с цитированием
Старый 04.01.2012, 17:55   #3
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

Спасибо за совет
Я это представлял Просто взял этот способ с какого-то сайта и кое-что переделал чтобы максимум что могло случится так это пришлось бы заново обновлять страницу
Попробую с сессией тогда
gunsoy вне форума Ответить с цитированием
Старый 05.01.2012, 14:04   #4
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

С сессией выходит тоже самое (сессия содержит предыдущее значение картинки)
Можно ли как-нибудь обновить значение сессии сразу после загрузки изображения?
gunsoy вне форума Ответить с цитированием
Старый 05.01.2012, 14:16   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от gunsoy Посмотреть сообщение
С сессией выходит тоже самое (сессия содержит предыдущее значение картинки)
Проблема на пустом месте - зачем выводить код в тот же момент, что и каптчу?
Вы проверяйте, корректно ли работает вариант с сессиями при обработке отправленной формы - т.е. совпадают ли значения в обработчике формы, а не прямо тут же на странице.
Это от непонимания принципа работы web - в какой последовательности и где происходит обработка скрипта и вызов/загрузка изображения...
Andkorol вне форума Ответить с цитированием
Старый 05.01.2012, 14:49   #6
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

Да понял что вы имеете в виду Я просто хотел сохранить значение сессии как в предыдущем варианте в скрытом теге input в форме и даже не подумал как работает сессия Запарился с антиспамом этим
Спасибо за ответ
gunsoy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опять про печать. СтаниславАВ Microsoft Office Excel 3 07.04.2011 07:41
И опять про вставку картинок Even Microsoft Office Excel 8 27.10.2010 11:47
Опять про каптчу kardinal94 Работа с сетью в Delphi 11 20.09.2010 20:20
Опять про кризис vasek123 Свободное общение 32 13.03.2009 16:56
Опять про гистограммму artemavd Общие вопросы Delphi 10 15.07.2008 11:44