🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۷ سید سروش ساری زاده
مشکل نمایش کد کپچا
جامعه پی اچ پی ایجاد شده در ۲۸ شهریور ۱۳۹۹

سلام و خسته نباشید

من یک پروژه mvc ایجاد کردم

 

یک مشکل پیدا کردم که نتونستم حلش کنم

 

فایل تولید کد کپچا نوشتم و در فایل لاگین در بخش تصویر وارد کردم

<img src='chaptcha.php' alt>

اصل مشکل اینجاست که اگر فایل رو بدون ادرس مجازی و با پسوند php باز کنم تصویر کپچا نمایش داده میشه

 

اما زمانی که از طریق ادرس مجازی که url‌های بازنویسی شده رو اجرا میکنه ، صفحه لاگین رو باز میکنم

دیگه تصویر  کپچا نمایش داده نمیشه . 

روش‌های خیلی زیادی رو امتحان کردم ، ادرس فایل کپچا رو هم بصورت مطلق و نسبی دادم بازم کار نکرد

 

تنها چیزی که کامل متوجه شدم اگر بدون بازنویسی url‌ها و ادرس مجازی و با پسوند کامل صفحه لاگین رو باز کنم کد کپچا نمایش داده میشه . 

 

http://localhost/login :: تصویر کپچا نمایش داده نمیشه

http://localhost/khabarche.dv/views/login.php :: تصویر کپچا نمایش داده میشه

سلام و احترام 

الان شما فایل هاتون مستقیم داخل پوشه htdocs ( داخل زمپ و یا www داخل ومپ هستش ) و یا پوشه ای دارین ؟ 

ضمن اینکه khabarche.dv دامین مجازی هست ؟ 

اگر بله دیگه نباید localhost  رو قرار بدید 

میتونین تنها khabarche.dv  رو استفاده کنید 

اگر نه پوشه هستش و میخواید از فایل htaccess استفاده کنید فایل htaccess رو در مسیری که فایل index قرار داره بسازید

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

من احتمال میدم از آدرس دهی مسیر عکس باشه در هر صورت تا کد‌ها نباشه نمیتونم به قطعیت بگم مشکل از کجاست 

در ضمن لطفا کد هاتون رو در بلاک کد قرار بدید.

 

میثم ۲۸ شهریور ۱۳۹۹، ۲۲:۵۱

فایل‌های داخل پوشه htdocs (xampp) قرار داره و از دامین مجازی استفاده میکنم

ضمن اینکه با ادرس localhost یا khabarche.dv  فرقی نداره در کل فایل captcha.php رو نمیشناسه

ممنون از کمک تون

include 'C:\xampp\htdocs\khabarche.dv\views\sections\header.php';
include 'C:\xampp\htdocs\khabarche.dv\public\captcha.php';
if(isset($_GET['error']) && !empty($_GET['error']))
{
	echo
	"<div class='alert alert-danger' role='alert'>
	!! خطایی رخ داده است ، لطفا مجدد تلاش کنید !!
	</div>";
}
?>
</head>
<body dir="rtl">
  <div class="container-fluid" style="padding:3% 25%">
	<div class="card mt-5">
	   <div class="card-header text-center">
		  <h3>ورود به سایت</h3>
	   </div>
		<div class="card-body">
		<div class="sign-in-htm">
			<form action="/login/loginOne" method="post">
				<div class="form-group">
					<label for="email" class="label"></label>
					<input id="email" name="email" type="email" class="form-control" >
				</div>
					<div class="form-group">
					   <label for="password" class="label"></label>
					   <input id="password" name="password" type="password" class="form-control">
					</div>
					<div class="form-group" style='width:100px;height:100px;'>
						<img src='captcha.php' alt='not found'>
					</div>
					<div class="form-group text-center">
						<input type="submit" class="btn btn-primary w-100" value="ورود">
					</div>
					</form>
				</div>
			</div>
		</div>
	</div>
</body>
<script src='/assets/js/showPassword.js'></script>
<?php include_once  'C:\xampp\htdocs\khabarche.dv\views\sections\header.php' ?>

 

سید سروش ساری زاده ۲۹ شهریور ۱۳۹۹، ۱۳:۴۸

دوست عزیز آدرس دهی هات رو چرا اینجوری دادی ؟ بهتر از آدرس دهی‌های داینامیک استفاده کنید (جهت اطلاع هدر رو یکبار بالا و یکبار پایین فراخوانی کریدن)

برای مثال : 
برای بدست آوردن آدرس captcha به این شکا عمل کن : 
 

include dirname(__DIR__).DIRECTORY_SEPARATOR."public".DIRECTORY_SEPARATOR."captcha.php";

آدرس دهی‌های فایل هات رو به این شکل اصلاح کن ببین مشکلت حل میشه 

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

داخل فایل bootstarp یک ثبت بسازید و آدرس root پروژه رو داخل اون ثابت قرار بدید و هر کجا که خواستید آدرس دهی کنید از اون ثابت استفاده کنید تا مشکلی برای آردس دهی هاتون پیش نیاد 

 

میثم ۲۹ شهریور ۱۳۹۹، ۱۵:۱۴

سلام و احترام

لطفا نکات آدرس دهی‌های ذکر شده توسط آقای نصرتی رو رعایت کنید و نتیجه رو اعلام کنید تا بتونیم کمکتون کنیم.

امیر صالحی ۲۹ شهریور ۱۳۹۹، ۱۷:۰۷

الان بعد از اینکه صفحه لاگین رو باز میکنم کل صفحه سیاه میشه و فرم نمایش داده نمیشه ، تصویر از مرورگر رو هم ضمیمه کردم . کد‌های html رو نمیخونه مرورگر و بعد از مشمول کردن فایل کپچا تداخل پیش میاد

کد صفحه لاگین :

<?php
include dirname(__DIR__).DIRECTORY_SEPARATOR."views".DIRECTORY_SEPARATOR."sections" .DIRECTORY_SEPARATOR."header.php";
include dirname(__DIR__).DIRECTORY_SEPARATOR."public".DIRECTORY_SEPARATOR."captcha.php";
if(isset($_GET['error']) && !empty($_GET['error']))
{
	echo
	"<div class='alert alert-danger' role='alert'>
	!! خطایی رخ داده است ، لطفا مجدد تلاش کنید !!
	</div>";
}
?>
</head>
<body dir="rtl">
 <div class="container-fluid" style="padding:3% 25%">
  <div class="card mt-5">
   <div class="card-header text-center">
	<h3>ورود به سایت</h3>
   </div>
   <div class="card-body">
	<div class="sign-in-htm">
	 <form action="/login/loginOne" method="post">
	   <div class="form-group">
		 <label for="email" class="label"></label>
		 <input id="email" name="email" type="email" class="form-control" placeholder="ایمیل">
	   </div>
	   <div class="form-group">
		<label for="password" class="label"></label>
		<input id="password" name="password" type="password" class="form-control">
	   </div>
	   <div class="form-group" style='width:100px;height:100px;'>
		<img src="captcha.php" alt='not found'>
	   </div>
	   <div class="form-group text-center">
		<input type="submit" class="btn btn-primary w-100" value="ورود">
	   </div>
	 </form>
    </div>
   </div>
  </div>
 </div>
</body>
<script src="<?php dirname(__DIR__) ?>/assets/js/showPassword.js"></script>
<?php include dirname(__DIR__).DIRECTORY_SEPARATOR."views".DIRECTORY_SEPARATOR."sections" .DIRECTORY_SEPARATOR."footer.php";?>

کد صفحه captcha : 

$captcha_num = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz';
$captcha_num = substr(str_shuffle($captcha_num), 0, 6);
$_SESSION["code"] = $captcha_num;
$font_size = 30;
$img_width = 70;
$img_height = 40;
header('Content-type: image/jpeg');
$image = imagecreate($img_width, $img_height); // create background image with dimensions
imagecolorallocate($image, 255, 255, 255); // set background color
$text_color = imagecolorallocate($image, 0, 0, 0); // set captcha text color
imagettftext($image, $font_size, 0, 15, 30, $text_color, 'arial.ttf', $captcha_num);
imagejpeg($image);

 

سید سروش ساری زاده ۲۹ شهریور ۱۳۹۹، ۲۰:۰۱

دوست عزیز از الگوی زیر استفاده کن، من تست کردم و جواب گرفتم

فرم توی صفحت:

<?php session_start();
include 'captcha.php';
?> 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>کد کپچا</title>
</head>
<body>
<?php
    create_image();
    display();
    function display()
    {
?>
       <div style="text-align:center;">
            <div style="display:block;margin-bottom:20px;margin-top:20px;">
                <img src="captcha_image.png">
            </div>
            <form action=" <?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
                <input type="submit" value="refresh captcha">
            </form>
            <form action="#" method="POST"/ >
                <input type="text" name="input"/>
                <input type="hidden" name="flag" value="1"/>
                <input type="submit" value="ارسال" name="submit"/>
            </form>
        </div>      
<? } ?>
</body>
</html>

 

فایل captcha.php که توش کد کپچا ایجاد میکنه:

<?php
    function  create_image()
    {
        $image = imagecreatetruecolor(200, 50);       
        $background_color = imagecolorallocate($image, 255, 255, 255);  
        imagefilledrectangle($image,0,0,200,50,$background_color); 
        $line_color = imagecolorallocate($image, 64,64,64);
        $number_of_lines=rand(3,7);
        for($i=0;$i<$number_of_lines;$i++)
        {
            imageline($image,0,rand()%50,250,rand()%50,$line_color);
        }
        $pixel = imagecolorallocate($image, 0,0,255);
        for($i=0;$i<500;$i++)
        {
            imagesetpixel($image,rand()%200,rand()%50,$pixel);
        }  
        $allowed_letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        $length = strlen($allowed_letters);
        $letter = $allowed_letters[rand(0, $length-1)];
        $word='';
        $text_color = imagecolorallocate($image, 0,0,0);
        $cap_length=6;// No. of character in image
        for ($i = 0; $i< $cap_length;$i++)
        {
            $letter = $allowed_letters[rand(0, $length-1)];
            imagestring($image, 5,  5+($i*30), 20, $letter, $text_color);
            $word.=$letter;
        }
        $_SESSION['captcha_string'] = $word;
        imagepng($image, "captcha_image.png");
    }
?>

 

باز اگه مشکلی بود درمیون بزار

امیر صالحی ۳۰ شهریور ۱۳۹۹، ۰۵:۵۷

با تشکر از کمک تون ، مشکل حل شد 

فکر میکنم موضوع این بود که کد تولید کد کپچا رو تو function قرار دادیم و حل شد

اگر توضیحاتی دارین ، ممنون میشم ذکر کنید . 

من کد شما رو به شکل زیر استفاده کردم و جواب گرفتم

<?php
include dirname(__DIR__).DIRECTORY_SEPARATOR."views".DIRECTORY_SEPARATOR."sections" .DIRECTORY_SEPARATOR."header.php";
include dirname(__DIR__).DIRECTORY_SEPARATOR."views".DIRECTORY_SEPARATOR."captcha.php";
if(isset($_GET['error']) && !empty($_GET['error']))
{
	echo
	"<div class='alert alert-danger' role='alert'>
	!! خطایی رخ داده است ، لطفا مجدد تلاش کنید !!
	</div>";
}
create_image();
?>
</head>
<body dir="rtl">
 <div class="container-fluid" style="padding:3% 25%">
  <div class="card mt-5">
   <div class="card-header text-center">
	<h3>ورود به سایت</h3>
	 </div>
	 <div class="card-body">
	 <div class="sign-in-htm">
	   <form action="/login/loginOne" method="post">
	   <div class="form-group">
		 <label for="email" class="label"></label>
		 <input id="email" name="email" type="email" class="form-control">
	   </div>
	   <div class="form-group">
		 <label for="password" class="label"></label>
		 <input id="password" name="password" type="password" class="form-control">
	   </div>
		 <div class="form-group" style='width:100px;height:100px;'>
	     <img src='captcha_image.png'>
	   </div>
	   <div class="form-group text-center">
	     <input type="submit" class="btn btn-primary w-100" value="ورود">
	   </div>
	  </form>
	 </div>
    </div>
   </div>
  </div>
</body>
<script src="<?php dirname(__DIR__) ?>/assets/js/showPassword.js"></script>
<?php include dirname(__DIR__).DIRECTORY_SEPARATOR."views".DIRECTORY_SEPARATOR."sections" .DIRECTORY_SEPARATOR."footer.php";?>

 

سید سروش ساری زاده ۳۰ شهریور ۱۳۹۹، ۰۸:۱۰