درخواست های ارتباط
جستجو تنظیمات
لیست دوستان من

قسمت سوم آموزش MVC در PHP

7 نظرات

سلام به همه دوستان گلم در 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.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


    توی قسمت 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&quot;

    >


    <title>Untitled Document</title>


    </head>



    <body>



    <ul>


    <li><a href="controler

    index.php&quot;&gt;خانه&lt;

    a>


    <li><a href="controler/login.php">ورود</a>
    

    <li><a href="controler

    about.php&quot;&gt;درباره&lt;

    a>


    </li>


    </ul>


    <?php


        echo $_GET['url']; 


    ?>



    </body>


    </html>


    موقع اجرا گرفتن این خطا رو بهم میده


    ( ! ) Parse error: syntax error, unexpected '$

    GET&#39; (T

    VARIABLE) in C:\wamp\www\PHP-MVC\index.php on line 19



    میخواستم بدونم کجای برنامه اشتباه نوشتم


  • وارد برنامهwam شدم توی پوشه http.conf شدم علامت#قبل از (LoadModule rewrite

    module modules/mod

    rewrite.so)


    برداشتم wamp رو ریستارت کردم مشکلم برطرف نشد



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

arrow