Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не отображается капча
 
 автор: gipper   (18.03.2008 в 12:24)   письмо автору
 
 

Здравствуйте всем. Проблема такая. Надо было добавить в форму капчу. Добавил тэг так:

<img src="/captcha.php" class="captcha">

Файл captcha.php, генерирующий изображение капчи выглядит так:

<?php
if (!isset($_SESSION)) session_start();
$random_string = mt_rand(1000,9999);
$_SESSION['random_string'] = $random_string;
$font =2; //imageloadfont('Arial.gdf'); // подставьте сюда имя шрифта который вы будете использовать
if (!$font) $random_string = "FONT NOT FOUND";
$fontWidth = imagefontwidth($font);
$fontHeight = imagefontheight($font);
$width = strlen($random_string) * $fontWidth;
$height = $fontHeight;
$img = @ImageCreate ($width, $height) or die ("Cannot Initialize new GD image stream");
$background_color = @imagecolorallocate($img, 255, 255, 255);
$text_color = @imagecolorallocate($img, 0, 0, 0);
@imagestring($img, $font, 0, 0, $random_string, $text_color);
$img2 = @ImageCreate ($width, $height) or die ("Cannot Initialize new GD image stream");
$x=1;
$i=0;
// собственно сам алгоритм:
while ($x<$width) { // идем по X-су и копируем кусочки
$xx = mt_rand(1,2); // c этим промежутком можно поиграть
$yy = mt_rand(5,10); // c этим промежутком можно поиграть
$i=$i+($xx/10); // шаг для Sin-уса
$y = ceil(sin($i)*$yy);// смещение по Y-ку
@imagecopy ($img2, $img, $x, $y, $x, 0, 1, $height); // копирование кусочка
$x++;
}
// отправляем заголовки для предотвращения кэширования
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header ("Content-type: image/png");
ImagePng ($img2);
@imagedestroy($img2);
@imagedestroy($img);
?>

Но изображение не выводиться в браузер. Сам скрипт пробовал открывать напрямую на сервере. Изображение генерирует. Но в тэге не выводит нихрена. Пути проверял. В той же директории графическое изображение без проблем.

   
 
 автор: Fighter   (18.03.2008 в 12:41)   письмо автору
 
   для: gipper   (18.03.2008 в 12:24)
 

отправка заголовков


header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header ("Content-type: image/png");


должна происходить в начале файла до первого вывода в броузер чего либо.

>Сам скрипт пробовал открывать напрямую на сервере. Изображение генерирует.

Привильно потому что в файле сначала идет обработка РНР кода, затем отправляются зоголовки т.е. вывода в браузер никокого нет.

   
 
 автор: gipper   (18.03.2008 в 12:56)   письмо автору
 
   для: Fighter   (18.03.2008 в 12:41)
 

А как же это сделать в середине формы? Или имеется в виду в самом скрипте? Но там вроде нет вывода в браузер.

   
 
 автор: Fighter   (18.03.2008 в 13:00)   письмо автору
 
   для: gipper   (18.03.2008 в 12:56)
 

Ну так на вскидку, файл можешь подключить в самом начале страницы
только в конце написать не

ImagePng ($img2);

а,

imagePNG($image,"foto/pictures.png");

т.е. сохранить фотку в папке foto с названием pictures, а в форме уже сделать просто
<img src="foto/pictures.png">

   
 
 автор: gipper   (18.03.2008 в 13:06)   письмо автору
 
   для: Fighter   (18.03.2008 в 13:00)
 

Ну вобщем да... Но это такой обходной маневр... Но делают же так напрямую...

   
 
 автор: gipper   (18.03.2008 в 14:12)   письмо автору
 
   для: Fighter   (18.03.2008 в 13:00)
 

Сделал как было написано и должно работать, но...... не работает. Некорректно выполняется команда imagePng. Если указать второй параметр имя файла, то эта команда должна сохранять изображение в файл. Но этого не происходит, она возвращает false. В браузер все выводила нормально, а тут не работает. Про пути файла не напоминайте, а то чего доброго комп полетит в окно...(шутка), но если честно достало!

   
 
 автор: Fighter   (18.03.2008 в 14:22)   письмо автору
 
   для: gipper   (18.03.2008 в 14:12)
 

ImagePng ($img2,"pictures.png");

В той же папке где лежит скрипт должен появиться файл pictures.png

а возвращаеть false наверное потому что там я писал ImagePng ($img2,"foto/pictures.png");
а папки foto у Вас не было.

   
 
 автор: gipper   (18.03.2008 в 14:37)   письмо автору
 
   для: Fighter   (18.03.2008 в 14:22)
 

Пути я испробовал вдоль и поперек (комп уже в полете за окном). Команда тупо не выполняется. Где ошибка не понимаю!

   
 
 автор: Fighter   (18.03.2008 в 14:47)   письмо автору
 
   для: gipper   (18.03.2008 в 14:37)
 

Дай полный скрипт попробую у себя

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования