PDA

View Full Version : مشکل در captcha



DelDard
جمعه 04 مهر 1393, 18:26 عصر
سلام دوستان
من تا حالا از کپچا استفاده نکردم و الان هم ارور میده بم و نمیدونم منظروش چیه دقیقا و چرا تو سشن مشکل دراه؟
منون میشم راهنماییم کنید
این ارور ها:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\s\form.php:355) in C:\xampp\htdocs\s\includes\class\captcha.php on line 2

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\s\form.php:355) in C:\xampp\htdocs\s\includes\class\captcha.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\s\form.php:355) in C:\xampp\htdocs\s\includes\class\captcha.php on line 41

این هم کد جایی که کپچا رو میزارم:

<p><span class="blue-heading">کد امنیتی را وارد کنید</span><br/><span class="error"><?php if(isset($caperr)){ echo $caperr;}?></span>
<input name="captcha" type="text" class="text-input" style="width:300px;text-align:left;" />
<?php require_once ROOT.'/includes/class/captcha.php'; ?>
</p>

این هم کد کپچا:

<?php
session_start();

function convertrgb( $color )
{
$color = eregi_replace( "[^0-9a-f]", "", $color );
return array( hexdec( substr( $color, 0, 2 ) ), hexdec( substr( $color, 2, 2 ) ), hexdec( substr( $color, 4, 2 ) ) );
}

function createimage( $text, $width, $height, $font = 5 )
{
global $fontColor;
global $bgColor;
global $lineColor;
if ( $img = @imagecreate( $width, $height ) )
{
list( $R, $G, $B ) = convertrgb( $fontColor );
$fontColor = imagecolorallocate( $img, $R, $G, $B );
list( $R, $G, $B ) = convertrgb( $bgColor );
$bgColor = imagecolorallocate( $img, $R, $G, $B );
list( $R, $G, $B ) = convertrgb( $lineColor );
$lineColor = imagecolorallocate( $img, $R, $G, $B );
imagefill( $img, 0, 0, $bgColor );
$i = 0;
for ( ; $i <= $width; $i += 5 )
{
@imageline( $img, $i, 0, $i, $height, $lineColor );
}
$i = 0;
for ( ; $i <= $height; $i += 5 )
{
@imageline( $img, 0, $i, $width, $i, $lineColor );
}
$hcenter = $width / 2;
$vcenter = $height / 2;
$x = round( $hcenter - imagefontwidth( $font ) * strlen( $text ) / 2 );
$y = round( $vcenter - imagefontheight( $font ) / 2 );
imagestring( $img, $font, $x, $y, $text, $fontColor );
if ( function_exists( "ImagePNG" ) )
{
header( "Content-Type: image/png" );
@imagepng( $img );
}
else if ( function_exists( "ImageGIF" ) )
{
header( "Content-Type: image/gif" );
@imagegif( $img );
}
else if ( function_exists( "ImageJPEG" ) )
{
header( "Content-Type: image/jpeg" );
@imagejpeg( $img );
}
imagedestroy( $img );
}
}

error_reporting( E_WARNING );
if ( function_exists( "session_start" ) )
{
session_start( );
}
$fontSize = 5;
$fontColor = "000000";
$bgColor = "FFFFFF";
$lineColor = "B0B0B0";
$secCode = "";
for ( $i = 0; $i < 5; ++$i )
{
$secCode .= rand( 1, 9 );
}
$_SESSION['rash_secimg'] = $secCode;
createimage( $secCode, 90, 30, $fontSize );
?>


حیلی خیلی ممنون میشم اگه راهنماییم کنید.

seyed.mehdi
جمعه 04 مهر 1393, 18:49 عصر
فک کنم چون هم توی فایل فرمت از session_start(); هم توی فایل کپچا ازش استفاده کردی ارور داده

DelDard
جمعه 04 مهر 1393, 19:06 عصر
منم اول همین فکر رو کردم ولی چک کردم و هیچ سشنی تو فرم نبود
اگه کسی میدونه بگه لطفا

البته اگه درست نشد فرقی نداره اگه احیانا یه کد کپچا دیگه دارید بهم لینک بدید ممنون میشم

seyed.mehdi
جمعه 04 مهر 1393, 19:23 عصر
من خودم از این استفاده میکنم
http://www.freescript.ir/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D8%B3%D9%88%D8%B1%D8%B3-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%A9%D8%AF-%DA%A9%D9%BE%DA%86%D8%A7-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%D8%A7%D9%85%D9%86%DB%8C%D8%AA%DB%8C/

alireza.stack
جمعه 04 مهر 1393, 19:58 عصر
منم اول همین فکر رو کردم ولی چک کردم و هیچ سشنی تو فرم نبود
اگه کسی میدونه بگه لطفا

البته اگه درست نشد فرقی نداره اگه احیانا یه کد کپچا دیگه دارید بهم لینک بدید ممنون میشم

لطفا فایل رو با نوت پد باز کنید (اگر ویندوزی هستید ;-) و اگر لینوکسی با vim باز کنید) و ببینید که کاراکترهای پنهان اول فایل موجود نباشد.

این مسئله هیچ چیز نیست جز ارسال یک کاراکتر (Space و یا کاراکتر پنهان) که موجب خطا می شود. بجای تغییر رویه و استفاده از چیزی دیگر مشکلتان را حل کنید.

Cheers

MMSHFE
جمعه 04 مهر 1393, 23:44 عصر
فایلتون رو با کدگذاری UTF-8 without BOM ذخیره کنید.

DelDard
شنبه 05 مهر 1393, 09:43 صبح
ممنون اقای علی رضا
چند تا سوال: من با نوتپد ++ فایل رو باز کردم و چیز خاصی اولش نبود. سوال این که منظورتون از کاراکتر های پنهان چیه و چطور باید پیداشون کرد و چطور باید پاکشون کرد؟
سوال دیگه این اول فایل form.php منظورتون هست یا captcha.php یا هر دو؟؟

ممنون اقای شهرکی
هر دو فایل از اول هم روی UTF-8 without BOM بودند. به نظرتون مشکل از چی دیگه میتونه باشه؟

ممنون از شما دوستان که وقت میزارید برای حل مشکلات بقیه

MMSHFE
شنبه 05 مهر 1393, 11:24 صبح
اول اسکریپتتون ob_start(); و آخرش ob_end_flush(); اضافه کنید.

2undercover
شنبه 05 مهر 1393, 13:31 عصر
روشی که شما تصویر Captcha رو در نهایت به انتهای فرم اضافه کردید اشتباه هست. شما باید اون فایل PHP رو به عنوان یک عکس اجرا بکنید نه این که اون رو ضمیمه بکنید:



<input name="captcha" type="text" class="text-input" style="width:300px;text-align:left;" /><img src="path/to/captcha.php" />

alireza.stack
شنبه 05 مهر 1393, 13:57 عصر
ممنون اقای علی رضا
چند تا سوال: من با نوتپد ++ فایل رو باز کردم و چیز خاصی اولش نبود. سوال این که منظورتون از کاراکتر های پنهان چیه و چطور باید پیداشون کرد و چطور باید پاکشون کرد؟
سوال دیگه این اول فایل form.php منظورتون هست یا captcha.php یا هر دو؟؟

ممنون اقای شهرکی
هر دو فایل از اول هم روی UTF-8 without BOM بودند. به نظرتون مشکل از چی دیگه میتونه باشه؟

ممنون از شما دوستان که وقت میزارید برای حل مشکلات بقیه

NotePad++ باز مثه مابقی ویرایشگرها ابتدای فایل رو نمیتونه نشون بده اگر کاراکتر پنهان داشته باشه. حتما با notepad باز کنید که تو هر ویندوزی هم پیدا میشه. کاراکترهای پنهان کاراکتری هست که زمانیکه شما فایل رو بصورت utf-8 ذخیره میکنید ابتدای فایل اضافه میشه. شما لطف کن با notepad بازش کن و ایتدای فایل رو چک کن.

DelDard
شنبه 05 مهر 1393, 14:12 عصر
ممنون اقای شهرکی این نکته ای که گفتید رو راجبش سرچ کردم و مفید بود
تشکر جناب اندر کاور این روشی که شما گفتید درست بود و کلا مشکل حل شد :) اشتباه خنده داری کرده بودم. فکر نمیکردم مشکل یه همچین چیزی باشه
جناب علی رضا ضمن تشکر, این نکته ایی که گفتید رو نمیدونستم و تو دفتر چه نکاتم نوشتم. ممنون بابتش

2undercover
شنبه 05 مهر 1393, 14:15 عصر
NotePad++ باز مثه مابقی ویرایشگرها ابتدای فایل رو نمیتونه نشون بده اگر کاراکتر پنهان داشته باشه. حتما با notepad باز کنید که تو هر ویندوزی هم پیدا میشه. کاراکترهای پنهان کاراکتری هست که زمانیکه شما فایل رو بصورت utf-8 ذخیره میکنید ابتدای فایل اضافه میشه. شما لطف کن با notepad بازش کن و ایتدای فایل رو چک کن.

مشکل ایشون کلا یک چیز دیگه است. اگر کد های HTML اول رو بررسی کنید می بینید که ایشون فایل captcha.php رو ضمیمه صفحه کردند (با استفاده از require_once) که خوب اشتباه هست و چون قبلا توی صفحه محتویات دیگه ای هم قبل از ضمیمه کردن بوده این پیام رو میده.