Здравствуйте профессионалы. Сталкнулся с такой проблемой делаю каптчу для сайта и в ней не стартует сессия код скрипта PHP: <?php session_start(); $tl=rand(5,10); $light=$tl*35+10; $height=50; # Рисуем новое изображение $im = @imagecreatetruecolor($light+20, $height+35); $color = imagecolorallocate($im, rand(0,126), rand(0,126),rand(0,126)); imagefilledrectangle($im, 0, 0, $light+20, $height, $color); # Mассив символов $text_array=array("Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "A", "S", "D", "F", "G", "H", "J", "K", "L", "Z", "X", "C", "V", "B", "N", "M",); #$text_array=array("Й","Ц","У","К","Е","Н","Г","Щ","З","Х","Ъ","Ф","Ы","В","А","П","Р","О","Л","Д","Ж","Э","Я","Ч","С","М","И","Т","Ь","Б","Ю"); #$text_array.=array(1,2,3,4,5,6,7,8,9,0); $cap=""; # Задаем количество линий на фоне за текстом $lines=rand(1,5); # Рисуем линии на фоне за текстом for($i=0;$i<$lines;$i++) { # Случайные координаты каждой линии $x1=rand(0, $light/2); $x2=rand($light/2, $light); $y1=rand(0, $height/2); $y2=rand($height/2, $height); # Задаем случайный цвет каждой линии $color=imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)); # Прорисовываем каждую линию на случайных координатах imageline ( $im, $x1, $y1, $x2, $y2, $color); } # Задаем количество точек на фоне за текстом $pixel=rand($height, $light); # Рисуем точки на фоне за текстом for($i=0;$i<$pixel;$i++) { # Задаем случайный цвет каждой точке $color_pixel=imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)); # Прорисовываем каждую точку на случайных координатах imagesetpixel($im, rand(0,$light), rand(0, $height), $color_pixel); } # Рисуем символы на изображении for ($i=0;$i<$tl;$i++) { # Задаем случайный цвет каждму символу $tc = imagecolorallocate($im, rand(150,255), rand(150,255), rand(150,255)); # Выбераем один случайный символ $text=imap_utf8($text_array[array_rand($text_array, 1)]); if ($i==0){$x=30;} else {$x=$x+30+5;} # $size=rand(12,20); # $y=rand($size+10, $height-$size-10); # $dir="fonts/"; $tx=scandir($dir); $count_font=count($tx); $f=rand(2,$count_font-1); $font=$dir.$tx[$f]; imagettftext($im, $size, rand(0,360), $x, $y, $tc, $font, $text); $cap.=$text; } # Задаем количество линий на текстe $lines=rand(1,5); # Рисуем линии на текстe for($i=0;$i<$lines;$i++) { # Случайные координаты каждой линии $x1=rand(0, $light/2); $x2=rand($light/2, $light); $y1=rand(0, $height/2); $y2=rand($height/2, $height); # Задаем случайный цвет каждой линии $color=imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)); # Прорисовываем каждую линию на случайных координатах imageline ( $im, $x1, $y1, $x2, $y2, $color); } # Задаем количество точек на текстe $pixel=rand($height, $light); # Рисуем точки на текстe for($i=0;$i<$pixel;$i++) { # Задаем случайный цвет каждой точке $color_pixel=imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)); # Прорисовываем каждую точку на случайных координатах imagesetpixel($im, rand(0,$light), rand(0, $height), $color_pixel); } $c1=$light/2-($light/100*20); imagettftext($im, 10, 0, $c1, $height+10, imagecolorallocate($im, 255, 255, 255), "fonts/9988.otf", "Использовать только"); imagettftext($im, 10, 0, $c1-25, $height+20, imagecolorallocate($im, 255, 255, 255), "fonts/9988.otf", "заглавные английские буквы"); imagettftext($im, 10, 0, $c1, $height+30, imagecolorallocate($im, 255, 255, 255), "fonts/9988.otf", "читать с лева на право"); $_SESSION["cap"]=md5($cap); # Отправляем заголовки header("Content-Type: image/png"); # Выводим изображение на экран imagepng($im); imagedestroy($im); ?> Вызываю данный скрипт следующим образом HTML: <img src=\"core/components/anti_bot/them/anti_bot.php\" id=\"img\" border=\"0\" alt=\"\"/> <input type=\"button\"onclick=\"document.getElementById('img').src='core/components/anti_bot/them/anti_bot.php?id='+Math.round(Math.random()*9999)\" value=\"обновить\"><br /> но при проверке данных выдает следующую ощибку Notice: Undefined index: cap in ...какой-то фаил в чем проблема??? подскажите пожалуйсто уже неделю бьюсь ни чего не выходит
Вот в чём проблема, но нету подробностей, нужен весь текст ошибки. То что есть говорит о отсутствии ключа cap в массиве
Это и я понял. вопрос в том что сессия как я понял в данном скрипте не стартует и данные в переменную сессии с ключем cap не вносятся. ПОЧЕМУ??? Все же верно скрипт рабочий ошибок нет и не выдает
@zorinalexey59292 кинь весь текст ошибки. --- Добавлено --- а ты при вызове этой сессии в другом месте. Пишешь session_start() ??? --- Добавлено --- @zorinalexey59292 ошибка то вызвана явно не в этом скрипте. Хотя тут в массиве есть одна лишняя запятая. --- Добавлено --- $text_array - в этом
Да ssession_start(); в другом скрипте тоже пишу но при сравнении $_POST['cap'] и $_SESSION['cap'] он пропадает кудато и выдает данную ошибку При том если не передовать header("Content-Type: image/png") то ключь массива сар не пропадает
@zorinalexey59292 http://forum.codenet.ru/q66380/header(Location+)+и+СЕССИЯ++сессия+пуста+? --- Добавлено --- http://secure.php.net/manual/ru/function.header.php
не Не совсем то. Там о редиректах написано , а у меня всего лишь на всего заголовок говорит что это картинка
Пробывал уже так. И SID передавал. Уже по моему все что можно перепробывал. Может PHP глючный??? у меня 7 версия на лине
@zorinalexey59292 нет не глючный просто ты что - то не так делаешь. --- Добавлено --- @zorinalexey59292 Попробуй сессию после хедера.
PHP: header("Content-Type: image/png"); session_start(); $_SESSION["cap"]=md5($cap); Вот так пробовал?
Да именно так и пробывал у меня почему-то не передается $_SESSION["cap"] она существует только в фаиле которая создает картинку , а при вызове этого фаила за пределы его не проходит как-будто это локальная переменная и доступна только в этом фаиле примерно так же как локальная переменная в функциях
@zorinalexey59292 а я бы вот попробовал использовать константу sid. Всё равно ты отправляешь заголовок. А сессия у тебя так до браузера и не дошла. Вот она и пустая. А ты не можешь в том документе где ты принимаешь эту сессию использовать хедер контент/тайп?
Как использовать эту константу? там идет простое сравнение переменных примерно так PHP: if ($_SESSION["cap"]==$_post['cap']) { echo "верно"; } и хедер контент/тайп там не нужен впринципи --- Добавлено --- и как довести сессию до браузера???
@zorinalexey59292 жесть какая то при формировании документа. Сервер отдаст браузеру. id сессии в куку. А хедер отправляется до формирования документа.
id сессии во всех скриптах одна и та же она передается нормально а вот $_SESSION['cap'] ни как не хочет передаваться из этого скрипта я сам не могу понять почему так сравнивал var_damp($_SESSION); во всех скриптах своего сайта и только в одном фаиле появляется $_SESSION['cap'] но дальше его не уходит . Складывается такое впечатление что эту переменную где-то , что-то убивает. А что понять не могу.
То есть если передавать эту переменную после хедера то должно работать ? Я так делал ни чего не работает.
Нахрена тебе вообще там хедер? с content/type . Ты не можешь его в формируемом документе засунуть свой контент тайп в html ? HTML: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="image/png; charset=utf-8"> <title>картинка</title> </head> <body> </body> </html> --- Добавлено --- Либо же в формируемом документе и отправить header заголовок на php А вообще я чувствую себя вангой. Я устал уже тут гадать почему не работает ты либо кинешь наконец весь свой код. Либо я спать.
Без этого отображается только бит код изображения а если его вызывать как изображение то отображается не изображение а замещающая картинка как в случае не загруженного изображения. Без хедера там ни как не обойтись --- Добавлено --- Я весь код скинул