درخواست های ارتباط
جستجو
لیست دوستان من
صندوق پیام
همه را دیدم
  • در حال دریافت لیست پیام ها
صندوق پیام
رویدادها
همه را دیدم
  • در حال دریافت لیست رویدادها
همه رویدادهای من

دوره آموزشی برنامه نویسی MVC در PHP قسمت سوم

7 نظرات
185 بازدیدها
سلام به همه دوستان گلم در ITPro ابتدا قبل از شروع این قسمت یه عذر خواهی کنم بایت وقفه طولانی که ایجاد شد بین قسمت قبلی و این قسمت ، خوب توی قسمت قبلی درباره ErrorDocument ، Redirects و password protection توضیح دادم و توی این قسمت توضیحات تکمیلی .htaccess براتون میگم بهمراه کد نویسی MVC . نکته مهم : قبل از اینکه فایل .htaccess بسازید و توش کد بنویسید، برید توی فایل httpd.conf (اگه از wamp استفاده میکنید برید توی منوی wamp توی قسمت apache) و این خطی که در زیر انتخابش کردم پیدا کنید و اگه اول خط، کاراکتر # داشت ، کاراکتر # از اول خط پاک کنید و فایل ذخیره کرده و wamp ریستارت کنید .
Image

4) Deny visitors by IP address : میتونیم جلوگیری کنیم از بازدید بعضی بازدیدکنندگان از وب سایتمون یا اجازه بدیم فقط کاربران با یه رنج آی پی خاص بتونن از وب سایتمون بازدید کنن .مثلاً فقط به ادمین سایت اجازه بدیم که بتونه صفحات حساس وب سایت ببینه و بقیه کاربران قادر نباشن .
order allow,deny
deny from 123.45.6.
allow from all
کد بالا به همه اجازه میده بتونن وب سایتو ببینن ولی کاربرانی که سه اکتد آی پی شون این 123.45.6 هست اجازه بازدید از سایت ندارن .
order allow,deny
allow from 162.1.1.1
deny from all
کد بالایی هم فقط به کاربری با آی پی 162.1.1.1 اجازه میده از وب سایت بازدید کنه و اگه کاربری توی محدوده آی پی تعریف نشده باشه و بخواد وارد سایت بشه با خطای Forbidden مواجه میشه .
Image


5) DirectoryIndex : بصورت پیشفرض Apache بدنبال فایل index.php میگرده تا وب سایت با اون صفحه بیاره بالا (یعنی نشون بده) ، ولی میشه این پیشفرضو تغییر داد ،
من یه صفحه index.php توی آموزش قبلی ساختم که موقعی که نمایش داده میشد بصورت زیر بود
Image

و حالا نمیخوام موقعی که وب سایتمو کسی باز میکنه صفحه index.php بصورت پیشفرض براش باز بشه میخوام index.html باز بشه .
کد index.html : فقط یه welcome توش نوشتم :-)
<!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" />
<title>Untitled Document</title>
</head>
<body>
welcome
</body>
</html>
و حالا این کد توی .htaccess مینویسم .
DirectoryIndex index.html
و بعدش دوباره وب سایتمو باز میکنم میبینید که پیشفرضش تغییر کرد و صفحه که میخواستم باز شد .
Image

خوب حالا اگه کدمونو به این صورت نوشته بودیم
 DirectoryIndex index.html index.cgi index.php
Apache ابتدا به دنبال صفحه index.html میگرده تا نمایشش بده و اگه وجود نداشت میره سراغ index.cgi و در نهایت اگه این صفحه هم وجود نداشت index.php نمایش میده .

6) Disable directory listings : با استفاده از این قابلیت میتونیم جلوگیری کنیم از نمایش بعضی از فایل ها با پسوند های مورد نظر خودمون، یا کلاً جلوگیری کنیم از نمایش فولدرهای وب سایت .
من سه تا فولدر با نام های About,Index,Login توی فولدر Views میسازم (فولدر views توی قسمت قبلی ایجاد کردیم) ، یه چند تا فایل با پسوند jpg. و txt. هم توی فولدر views میسازم (البته این فایل هارو بعدش پاک کنید، چون فقط واسه توضیح disable directory این فایهارو ایجاد کردم بدردمون نمیخوره) و حالا توی URL آدرس فولدر Views تایپ میکنم و enter میزنم .
Image

میبینید که تمام محتویات views نمایش داده شد حالا اگه بخوایم فایل هایی با پسوند txt نمایش داده نشن بصورت زیر کد مینویسیم (توی فایل .htaccess)
IndexIgnore *.txt
Image

یا اگه خواستیم فایل با پسوند jpg هم نمایش داده نشه کد بصورت زیر مینویسیم
IndexIgnore *.txt *.jpg
Image

اگه کد بصورت زیر بنویسیم هیچ فایل و فولدری نمایش داده نمیشه ( انگار فولدر خالی هست )
IndexIgnore *
Image

خوب حالا اگه وب سروری که شما وب سایتتونو روش آپ کردید فولدرهارو نمایش نمیده، میتونید با دستور زیر نمایش فولدر برای خودتون فعال کنید .
Options +Indexes
اگه خواستید کلاً فولدرهای سایتتون نمایش داده نشن میتونید از کد زیر استفاده کنید .
Options -Indexes
Image

میبینید که دیگه اجازه نمایش فولدر بهمون نمیده .
خوب تا اینجا توضیحاتی که واسه .htaccess دادم کافی هست میریم سر بحث اصلیمون یعنی MVC ( توی ادامه آموزشها، قابلیت های دیگه htaccess براتون میگم ) واسه اطلاعات بیشتر میتونید به سایت زیر سر بزنید .

http://www.htaccess-guide.com

خوب حالا قبل از شروع MVC، کدهای زیر توی فایل .htaccess مینویسیم .
Options -indexes

ErrorDocument 401 http://127.0.0.1/PHP-MVC/
ErrorDocument 403 http://127.0.0.1/PHP-MVC/
ErrorDocument 404 http://127.0.0.1/PHP-MVC/
ErrorDocument 500 http://127.0.0.1/PHP-MVC/
به جای PHP-MVC (اسم وب سایت من هست)، شما اسم وب سایت خودتونو بنویسید .
Image

میبینید بعد از index.php هرچیزی وارد کنیم به ما خطایی نمیده که این خودش یه باگ محسوب میشه و حالا میاییم این باگ برطرف میکنیم.
فایل htaccess. بصورت زیر ویرایش میکنیم :
Options +FollowSymlinks
RewriteEngine on

Options -indexes

ErrorDocument 401 http://127.0.0.1/PHP-MVC/
ErrorDocument 403 http://127.0.0.1/PHP-MVC/
ErrorDocument 404 http://127.0.0.1/PHP-MVC/
ErrorDocument 500 http://127.0.0.1/PHP-MVC/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

زمانی که بخوایم از Rewrite استقاده کنیم باید قبلش دو خط اول هم بنویسیم . ( البته واسه بعضی از سرورها )
d- و f- و l- یعنی بتونیم با تایپ کردن اسم فایل و فولدر توی URL به اون فایل یا فولدر دسترسی داشته باشیم ، $(*.)^ یعنی هر فایل و فولدری که توی URL وارد میکنیم ، url هم یه متغییر هست که بعداً توی کدها ازش استفاده میکنیم و 1$ هم تمام مقادیری که بعد از اسم سایت وارد میکنیم شامل میشه .
کد زیر به index.php اضافه میکنیم :
<?php
	echo $_GET['url'];	
?>
بصورت شکل زیر :
Image

این کد مقادیری که توی متغیر url وارد میکنیم (متغیر url توی کدهای htaccess تعریف کردیم) نمایش میده .
Image

مثلاً زمانی که بعد از اسم سایت، مقداری بصورت بالا وارد میکنیم یعنی میخوایم تابعی (در اینجا run یه تابع هست) که توی کدهای کلاس Login نوشته شده اجرا بشه و اگه مقداری نیز بعد از run بیاد،این مقدار به عنوان مقادیر تابع (پارامتر تابع) به حساب میاد .
[QSA] زمانی به درد ما میخوره که بخوایم URL بصورت زیر وارد کنیم و از متغیری به نام b هم استفاده کنیم که در این صورت باید کد زیر به انتهای کد index.php (بعد از دستور echo) اضافه کنید تا نتیجه رو ببینید .
echo '<br>'.$_GET['b'];
Image

ولی اگه این [QSA] نزاریم در موقعی که میخوایم از متغیر b استفاده کنیم بهمون خطا میده .
Image

خوب حالا میایم مقادیر url جدا میکنیم با استفاده از تابع ()explode ، کدهای php صفحه index.php بصورت زیر تغییر بدید :
<?php
	//echo $_GET['url'];
	//echo '<br>'.$_GET['b'];
	
	$url = $_GET['url'];
	$url = explode('/', $url);
	print_r($url);
?>
دو خط اول غیر فعال کردم چون دیگه بدردمون نمیخورن .
تابع explode مقادیر متغیر url$ جدا سازی میکنه بر حسب کاراکتر / و خروجیش هم یه آرایه هست .
دستور print_r مقادیر آرایه رو چاپ میکنه .
Image

خوب طبق چیزی که با لا گفتم اگه URL چرت و پرت هم بنویسیم (بصورت زیر) به ما خطا نمیده
Image

حالا با دستور زیر میگم فقط صفحاتی رو نشون بده که توی وب سایت هست . (کدهای php صفحه Index.php بصورت زیر ویرایش کنید)
<?php
	//echo $_GET['url'];
	//echo '<br>'.$_GET['b'];
	
	$url = $_GET['url'];
	$url = explode('/', $url);
	//print_r($url);
	
	if(!file_exists("Controllers/".$url[0].".php"))
	{
		echo "Not Found Page";
	}
?>
خوب حالا اگه دوباره چرت و پرت بنویسیم (بصورت زیر) به ما خطایی که خودمون نوشتیمو نشون میده، حتی میشه یه صفحه خطا درست کرد و کاربر رو به صفحه ی خطا منتقل کرد .
Image

خوب حالا اگه URL بصورت زیر بنویسیم بهمون خطا میده و اینم یه باگ دیگه هست که باید رفع بشه .
Image

بصورت زیر این باگ هم برطرف میشه . (کدهای php صفحه index.php بصورت زیر ویرایش کنید)
<?php
	//echo $_GET['url'];
	//echo '<br>'.$_GET['b'];
	
	if(!isset($_GET['url']))
	{
		$url = 'index';
	}
	else
	{
		$url = $_GET['url'];
	}
	
	$url = explode('/', $url);
	//print_r($url);
	
	if(!file_exists("Controllers/".$url[0].".php"))
	{
		echo "Not Found Page";
	}
?>
تابع isset چک میکنه که همچین متغیری ست شده یا نه ( یعنی همچین متغیری اصلاً وجود داره یا نه )
توی کد بالا گفتم اگه چیزی برای url ست نشده باشه، index براش ست بشه .امیدوارم از این قسمت هم استفاده لازم برده باشید . توی قسمت بعدی کلاسها رو توضیح میدم .


نویسنده : مهدی رزمجویی
منبع : جزیره طراحی و توسعه وب وب سایت توسینسو
هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد
برچسب ها
ردیف عنوان قیمت
1 دوره آموزشی برنامه نویسی MVC در PHP قسمت اول رایگان
2 دوره آموزشی برنامه نویسی MVC در PHP قسمت دوم رایگان
3 دوره آموزشی برنامه نویسی MVC در PHP قسمت سوم رایگان
4 دوره آموزشی برنامه نویسی MVC در PHP قسمت چهارم رایگان
5 دوره آموزشی برنامه نویسی MVC در PHP قسمت پنجم رایگان
6 دوره آموزشی برنامه نویسی MVC در PHP قسمت ششم رایگان
7 دوره آموزشی برنامه نویسی MVC در PHP قسمت هفتم رایگان
8 دوره آموزشی برنامه نویسی MVC در PHP قسمت هشتم رایگان
9 دوره آموزشی برنامه نویسی MVC در PHP قسمت نهم رایگان
10 دوره آموزشی برنامه نویسی MVC در PHP قسمت دهم رایگان
11 دوره آموزشی برنامه نویسی MVC در PHP قسمت یازدهم رایگان
12 دوره آموزشی برنامه نویسی MVC در PHP قسمت دوازدهم رایگان
13 دوره آموزشی برنامه نویسی MVC در PHP قسمت سیزدهم رایگان
14 دوره آموزشی برنامه نویسی MVC در PHP قسمت چهاردهم رایگان
مطالب مرتبط

در حال دریافت اطلاعات

نظرات
  • سلام و ممنون از آموزش خوبت، فقط لطفا" کدها رو داخل تگ کد قرار بده.
  • در زیر کدهای index.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" />
    <title>Untitled Document</title>
    </head>
    
    <body>
    	<ul>
        	<li>
                <a href="Controllers/Index.php">خانه</a>
            </li>
            <li>
                <a href="Controllers/Login.php">ورود</a>
            </li>
            <li>
                <a href="Controllers/About.php">درباره</a>
            </li>
        </ul>
    
    <?php
    	//echo $_GET['url'];
    	//echo '<br>'.$_GET['b'];
    	
    	if(!isset($_GET['url']))
    	{
    		$url = 'index';
    	}
    	else
    	{
    		$url = $_GET['url'];
    	}
    	
    	$url = explode('/', $url);
    	//print_r($url);
    	
    	if(!file_exists("Controllers/".$url[0].".php"))
    	{
    		echo "Not Found Page";
    	}
    	
    	
    ?>
    </body>
    
    </html>
    
    
  • منظورم داخل خود آموزش بود، بخش هایی که کد نوشته شده، داخل تگ کد باشه.
  • سلام با تشکر از آموزش مفیدتون

    من همون دستوراتی رو که گفتید داخل فایل .htaccess نوشتم اما کار نمیکنه

    داخل صفحه ایندکس گذاشتم

    echo $_GET['url'];
    


    اما خطا میده که

    Notice: Undefined index: url
    
  • دلیل اینکه گفتید چیه؟
    «نکته مهم : قبل از اینکه فایل .htaccess بسازید و توش کد بنویسید، برید توی فایل httpd.conf (اگه از wamp استفاده میکنید برید توی منوی wamp توی قسمت apache) و این خطی که در زیر انتخابش کردم پیدا کنید و اگه اول خط، کاراکتر # داشت ، کاراکتر # از اول خط پاک کنید و فایل ذخیره کرده و wamp ریستارت کنید . »
  • سلام
    منم به مشکل برخوردم طبق گفته شما از اول اموزش اومدم پیش اسم سایت هم چیزی که تو آموزش گفتید گذاشتمphp-mvc؛توی قسمت htacsses این دستورات گذاشتم
    ErrorDocument 401 http://127.0.0.1PHP-MVC
    ErrorDocument 403 http://127.0.0.1PHP-MVC
    ErrorDocument 404 http://127.0.0.1PHP-MVC
    ErrorDocument 500 http://127.0.0.1/PHP-MVC
    توی قسمت index.phpهم این دستورات نوشتم
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org1999xhtml">
    <head>
    <meta http-equiv="Content-Type" content="texthtml; charset=utf-8&quot; >
    <title>Untitled Document</title>
    </head>

    <body>

    <ul>
    <li><a href="controlerindex.php&quot;&gt;خانه&lt;a>
    <li><a href="controler/login.php">ورود</a>
    
    <li><a href="controlerabout.php&quot;&gt;درباره&lt;a>
    </li>
    </ul>
    <?php
        echo $_GET['url']; 
    ?>

    </body>
    </html>
    موقع اجرا گرفتن این خطا رو بهم میده
    ( ! ) Parse error: syntax error, unexpected '$GET&#39; (TVARIABLE) in C:\wamp\www\PHP-MVC\index.php on line 19

    میخواستم بدونم کجای برنامه اشتباه نوشتم
  • وارد برنامهwam شدم توی پوشه http.conf شدم علامت#قبل از (LoadModule rewritemodule modules/modrewrite.so)
    برداشتم wamp رو ریستارت کردم مشکلم برطرف نشد

برای ارسال نظر ابتدا به سایت وارد شوید

arrow