سلام و خسته نباشید
من یک پروژه 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";?>