نقل قول: مشکل در ساخت captcha
احتمالا کتاب خانه GD شما غیر فعال هستش و باید فعالش بکنین!
توی فایل php.ini می تونید این کارو انجام بدید!
با برداشتن کاراکتر ";" از اول این عبارت توی php.ini:
extension=php_gd2.dll
نقل قول: مشکل در ساخت captcha
بعلاوه چون مستقیماً تصویر ساخته شده با GD رو میفرستین، باید فایلهاتون رو با کدگذاری UTF-8 without BOM ذخیره کنید و اولشون ob_start و آخرشون هم ob_end_flush رو صدا بزنید تا BOM برای مرورگر ارسال نشه. برای اطمینان، یکبار دستور header رو حذف کنید ببینید مرورگر چی نشون میده و خطای تولیدشده چیه و بعد از اطمینان از اینکه خطایی وجود نداره (یه مشت کارکتر عجیب و غریب باید ببینید)، اونوقت header رو بگذارین تا خروجی رو تبدیل به فرمت تصویر کنه.
نقل قول: مشکل در ساخت captcha
ببینید ما دو فایل داریم یکی 1.php یکی هم 2.htm
حالا باید فایل 2 رو کد گذاری کنم با UTF-8 without BOM و
فایل 1 رو در ابتدا و انتهای برنامه اون دو تابع رو فراخوانی کنم؟
البته این رو هم بگم که قبل از این موضوع من وقتی header('Content-type: image/png'); رو دستکاری میکردم گاهی خروجی به شکل زیر میشد
�PNG IHDR�9$�W �IDATx����O]��܇N�)��* BX��"�[�Ę`\�p��'.��\�/�e�D�I ^"BR���tڹ�����I��y|z�i w>�=�������e��y����[@��IM��� %5A HM�R���)�+�}��q����çO ��-�Cv�O�^��(*CI����������� �µk׆-��ё DQ�� �a����`��d�(J�mQ�a� a���I��e �P���ak9�t�0c۶aAd��s��%-�+L�4M3C�4���L��Jp��U�a<�SUu?iM�r rr���GGGE��3I����E���h 4�����{{{�jU�e������ I:��/_�,�0@&�IRRwH�dY�pbbb���z���팽 �aP�a������/^LNV����0�q$I��߿�4��j �����^��H����r9�4��u ����du����ׯ_u]�ԍF���V�uxx������3`1 ]ڸP(pGӴ뺍F#!M]E��84Mx^˲��qܶmM������� ���e�B�`~~�V��8~xxxpp�j�._ ����N�`rr��l��� y��)`kkK�4���i��, �X�- ��3ݙp����/_�;w�� ���!�fS�$]�s�ܰR�KKK�r�,�2I�4M�����/�b�ݖ$)���E�$A��N �={��s����u�d2�ߏ��� ����ׯEbrr���(�<�s]ײ,��ǩ�j�癦�l6UU�}?��Q�� �J��iB�8���A�X�WS���� ����Pј�����(�P���~6 %�u]]�!��Zmff�O+��h��,� �)\�u��h��˲lE����9L}��� ���ܜ��E��j�v���d2�,s7 11����������� I� �.\�}�v���UU+����>��ɓ' ��[677 �@�4M[�Ų���$���������q%�E ۶��H�$�b|������A9oo,//������� p]�$IY��}�FӴ���bq��D�&X\\4M� q��\íV��FCUU� r�� ���������/_��r9�0\ץ(���z��l6)����J �wE�0LQ����Ñ����� z��ŋ��q��=�S�aY�wvv��� ��G�e����j��y�PQ��,h( OEA�MT������r9�u]�mE��F�������$ї $I�i��qi�=�,��yQoݺ5�I� ����nE�m���iZB��FGG� o�9��q��>|���˗X4��$ѡzXI $X^^�{�����Ӓ$��0���[[[�z=��{�����ܻw���0�a� a}o*�����aA�t�WA���� ��m;C��� ���$I������������� w� �m'��4�4� x�_YYIh��3>>>33���.�"�0��X ��8���O�י��L�0�0�FrU�z��j��`Yv�e����ٳ ��-UU����.]���� meevddDӴX���Z�vtt�y^&��y�fB� Q,--���p�����g�R������ I\�ijnܸ���.�r�������# ����j&����i��Lfww��n� �̔J%�a��z�P�f���A`�6I�� �������<��<�(J��R�� }��<�Cvvv&''Y�-�J�㜞���͡?A`�f6������ �|���~���04�$Ia���a��c��L�8�4M��� H��j5�0DQt]�ѣG��j5Ƒ��j�ZE�ŝ?kyyu����8� �4�V���,K�e� C�Hd�eQ����n۶�#S���,�2���4M��pF�$:��x][]]-�J� @���Q!�O�\ nܸ���k˲,�B�|6��ed�i�Qq�U �u���i۶Qח�y�\NT�����V+ Q��Qmş贋>���f�Y�� ��B���(�A@�p�iZ&�)�J�v� X,BQ�-vЪ���!|��q��i� �z틒$����k�'�mg�Y�4��h� \�"��`��.]�,?x��A\C�l���E˲L��<��� ��߉Z�T�}���x�X�6��Z�� �����ׯAP��1�$���t�;�FQ�;S�%���Y]]eY5���mll�3I�4M�x��:��v ����iUU]�u��7O�4Y�Q�E\�R~&),..��2M� w���g(��EQ�,+���H��XnE� L��9����_9�l��TŶ�J�2l-'g����ð�j�Z�ak�;�������3��$M j���)� R@j��� �&H� R�����g�IEND�B`�
نقل قول: مشکل در ساخت captcha
فایل 2 که داره عکس رو نشون میده بهش کاری نداریم. فایل 1 باید هم UTF-8 without BOM باشه و هم ob_start در ابتدا و ob_end_flush در انتهاش صدا زده بشه.
موفق باشید.
1 ضمیمه
نقل قول: مشکل در ساخت captcha
مشکل حل نشد
فکر کنم کار من اشتباه باشه
ببینید من اومدم تو فایل 1.php کد زیر رو نوشتم
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8 without BOM" />
<title>Untitled Document</title>
</head>
<body>
<?php
ob_start();
Header('Content-type: image/png');
$im=ImageCreateFromPNG('capcha.png');
ImagePng($im);
ob_end_flush();
?>
</body>
</html>
تو فایل اول هم در تگ img ادرس عکس رو فایل 1.php قرار دادم
خروجی با دستکاری header با به شکل همون حروف نا مشخص میشه یا مثل عکسی که نمیتونه لود بشه به شکل زیر
ضمیمه 100680
یه سوال دیگه اینکه ایا عکس باید با اجرای 1.php هم اجرا بشه یا اینکه از فایل 2.html استفاده بشه
من در کد بالا فقط عکس رو که قبلا داشتم لود کردم و خواستم اون نمایش داده بشه بدون هیچ دستکاری
نقل قول: مشکل در ساخت captcha
1. ob_start رو در ابتدای صفحه قبل از اینکه حتی تگ html رو باز کرده باشید فراخوانی کنید!
2. توی فایل PHP تون نباید کد html داشته باشید! پس همه ی اون کد های html رو از صفحه ی 1.php پاک کنید!
:چشمک:
نقل قول: مشکل در ساخت captcha
خب وقتی تگ های html رو پاک کنم اون تابع ob_start خود به خود در خط اول قرار میگیره نکته بعد اینکه پس این charset=UTF-8 without BOM" رو کجا پیاده سازی کنم؟
نقل قول: مشکل در ساخت captcha
نقل قول:
نوشته شده توسط
one hacker alone
مشکل حل نشد
فکر کنم کار من اشتباه باشه
ببینید من اومدم تو فایل 1.php کد زیر رو نوشتم
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8 without BOM" />
<title>Untitled Document</title>
</head>
<body>
<?php
ob_start();
Header('Content-type: image/png');
$im=ImageCreateFromPNG('capcha.png');
ImagePng($im);
ob_end_flush();
?>
</body>
</html>
تو فایل اول هم در تگ img ادرس عکس رو فایل 1.php قرار دادم
خروجی با دستکاری header با به شکل همون حروف نا مشخص میشه یا مثل عکسی که نمیتونه لود بشه به شکل زیر
ضمیمه 100680
یه سوال دیگه اینکه ایا عکس باید با اجرای 1.php هم اجرا بشه یا اینکه از فایل 2.html استفاده بشه
من در کد بالا فقط عکس رو که قبلا داشتم لود کردم و خواستم اون نمایش داده بشه بدون هیچ دستکاری
نمیدونم چرا ایجا دارید اجیاد فایل میکنید !
برای نشون دادن فایل عکس باید از تگ img استفاده کنید :
<img src="file_img.php" />
نقل قول: مشکل در ساخت captcha
نقل قول:
نوشته شده توسط
one hacker alone
خب وقتی تگ های html رو پاک کنم اون تابع ob_start خود به خود در خط اول قرار میگیره نکته بعد اینکه پس این charset=UTF-8 without BOM" رو کجا پیاده سازی کنم؟
سلام ، به نظرم نظر مهندش شهرکی عزیز این بود که شما فایل php رو با یه ادیتور مناسب مثل notepad++ باز کنید و از منوی charset گزینه utf8 without bom رو انتخاب کنید
اگر جواب نداد ، برگردونید به حالت اول، محتوای فایل رو کات کنید ، charset رو روی utf8 without bom تنظیم کنید و محتوای فایل رو paste کنید
نقل قول: مشکل در ساخت captcha
اقا فایلم رو به شکلی که گفتین utf8 without bom کردم و از این لحاظ مطمئن هستم
اما باز جواب نمیده
الان تمام حرف ما سر این فایل php ِ یه دیگه؟ خوب یکی ازدوستان که که میدونه تو سیستمش این کد جواب میده فایلشو اینجا بزاره اگه از اون باشه باید رو سیستم من جواب بده دیگه بعد من خودم میشینم تکلیفشو روشن میکنم اگه از اونم کار نکرد دیگه وقتمو رو این فایل نزارم چوون من الان موندم مشکل از کجاس
کتابخانه gd2 هم فعال هست
نقل قول: مشکل در ساخت captcha
دوستان کسی نیست کمک کنه تکلیف این رو روشن کنیم؟
نقل قول: مشکل در ساخت captcha
سلام این کد خودتون درست؟
<?php
session_start();
error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
header('Content-type: image/png');
$md5 = md5(microtime() * time() );
$string = substr($md5, -5);
$captcha = imagecreatefrompng("./captcha.png");
$black = imagecolorallocate($captcha, 0, 0, 0);
$line = imagecolorallocate($captcha,233,239,239);
imagestring($captcha, 5, 20, 10, $string, $black);
$_SESSION['key'] = md5($string);
imagepng($captcha);
imagedestroy($captcha);
?>
اما شما باید یه عکس به نام captcha.png که پیش زمینه کپچا هست رو در کنار عکس داشته باشید.
الان من تست کردم درست شد.
نقل قول: مشکل در ساخت captcha
فایل 2 که کار تولید CAPTCHA رو انجام میده، نباید هیچ کد HTML توش باشه. فقط خروجی ImagePNG باید توی فایل باشه. کدی که آقا امین گذاشتن رو بینید. بعد توی فایل 1 که قراره تصویر تولیدشده توسط فایل 2 رو نشون بده اینطوری عمل کنید:
کد HTML:
<img src="2.php"/>
1 ضمیمه
نقل قول: مشکل در ساخت captcha
فایل کامل رو از زیر دانلود کنید.
ضمیمه 100709
نقل قول: مشکل در ساخت captcha
مشکل حل شد
بابا من فکر میکردم این شکل ادرس دهی ./captcha.php میره از روت میخونه برا همین مثل ادرس دهی های دیگه captcha.php مینوشتم برا همین جواب نمیداد
ممنون از همه گی
در ضمن باید با اجرای هر دو فایل php ,html عکس لود بشه که برای من شد
برنامه بدون اون دو تابع که در ابتدا و انتها باید نوشته میشد کار کرد اما میخوام بدونم کاربردشون چیه؟
و این ادرس دهی چرا به این شکله؟
و اگه من بخوام حروفم کج بشن چکار باید بکنم الان حروفم کنار هم و منظم هست
نقل قول: مشکل در ساخت captcha
میتونید از راههای زیادی استفاده کنید !
اما بهترین راه و راحتتری راهش اینه که از فونت های کج و ناخوانا استفاده کنید ! اینطوری خیلی بهتره و راحتتر هست :)
1 ضمیمه
نقل قول: مشکل در ساخت captcha
کد نمونه که من گذاشتم رو ببینید. حروف رو بهم میریزه.
نقل قول: مشکل در ساخت captcha
کدتون رو دیدم اما کپتچای شما ترکیبی از حروف و عدد بود نه کج بودن یا سرو ته بودن کاراکتر ها
1 ضمیمه
نقل قول: مشکل در ساخت captcha
شرمنده نسخه قدیمی رو گذاشته بودم. این جدیده رو چک کنید. نمونه اجراش رو توی این لینک میتونید ببینید.