شرکت کیمیاگران چشمه
نمونه کار

وب سایت خبری ورزشی توپ نیوز
نمونه کار

باشگاه فرهنگی ورزشی گل گهر سیرجان
نمونه کار
نمونه کار
 
کامپوننت و 3 ماژول لیگ مسابقات ورزشی ویژه جوملا 1.5 با امکانات آژاکس

نمونه نرم افزار

کامپوننت مدیریت تالارهای پدیرایی ویژه جوملا 1.5 با امکانات آژاکس
نمونه نرم افزار

کامپوننت و 7 ماژول فروشگاه قالب های وب سایت ویژه جوملا 1.5 با امکانات آژاکس

نمونه نرم افزار

ماژول پیش بینی مسابقات با امکانات آژاکس ویژه جوملا 1.5

نمونه نرم افزار

کامپوننت مدیریت ارتباط با مشتری با امکانات آژاکس ویژه جوملا 1.5
نمونه نرم افزار

کامپوننت آزمون آنلاین ویژه جوملا 1.5

نمونه نرم افزار

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

سی دی چند رسانه ای زندگینامه سردار شهید علی علویان
نمونه مالتی مدیا

سی دی چند رسانه ای سالنامه آماری خراسان جنوبی
نمونه مالتی مدیا
نمونه کار
 
ورود دامين: www.
انتخاب پسوند
.ir.com.net
.org.info.name
.us.biz.ca
.tv.eu.ro
.ws.co.uk.de
انتخاب:همه هيچكدام برعكس

مشاهده نتيجه
 
mod_vvisit_counterامروز69
mod_vvisit_counterدیروز68
mod_vvisit_counterکل بازدیدها3641
 
 

آموزش ها
آموزش PHP-قسمت سوم مشاهده در قالب PDF چاپ فرستادن به ایمیل
نوشته شده توسط Administrator   
چهارشنبه, 02 تیر 1389 ساعت 14:35

ازبین بردن یک جلسه

اگر می خواهید بعضی داده های جلسه را حذف کنید, می توانید تابع unset( ) یا session_destroy( ) را استفاده کنید.

تابع unset( ) برای آزادسازی متغیر جلسه تعیین شده استفاده می شود:

<?php

unset($_SESSION['views']);
?>

همچنین شما می توانید کل جلسه را به طور کامل با فراخوانی تابع session_destroy( ) از بین برد:

<?php

session_destroy();
?>

نکته: تابع session_destroy( ) جلسه تان را بازنشانی (صفر کردن متغیرها)  می کند و شما کل داده های جلسه تان را از دست خواهید داد.

________________________________________________________

ارسال E-mail در php

Php به شما اجازه ی ارسال e-mail را مستقیما از یک script میدهد.

تابع mail( ) در php

تابع mail( ) برای ارسال email ها از درون یک script استفاده می شود.

نحو

mail(to,subject,message,headers,parameters)

پارامتر

توضیح

to

اجباری.دریافت کننده(ها)ی email را مشخص می کند

subject

اجباری.موضوع email را مشخص می کند.نکته: این پارامتر نمی تواند شامل کاراکترهای هر خط جدید باشد

message

اجباری.پیغام ارسالی را تعریف می کند.هر خط باید با یک enter (/n) (LF) جدا شود

headers

اختیاری. header های اضافی را مشخص می کندمثل cc,from و bcc . headerهای اضلفی باید با یک CRLF(\r\n) از هم جدا شوند

parameters

اختیاری. یک پارامتر اضافی برای برنامه ی ارسال mail مشخص می کند

نکته: برای اینکه توابع mail موجود باشند,php به یک سیستم email کارا و نصب شده نیاز دارد.برنامه برای استفاده شدن بوسیله ی تنظیمات پیکربندی درphp تعریف می شود.برای اطلاعات بیشتر بخش php mail reference را بخوانید.

E-mail ساده در php

ساده ترین راه برای ارسال یک email با php فرستادن یک email متنی است.

در مثال زیر ما ابتدا متغیر ها را اعلان می کنیم ($to,$subject,$message,$from,$headers),سپس  متغیرها را در تابع mail( ) برای ارسال یک email استفاده می کنیم:

<?php
$to = "
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ";
$headers = "From: $from";
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>

فرم mail

با php , می توانید یک فرم بازخورد روی وب سایتتان ایجاد کنید.مثال زیریک پیغام متنی را به یک آدرس e-mail مشخص شده می فرستد:

<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
  {
  //send email
  $email = $_REQUEST['email'] ; 
  $subject = $_REQUEST['subject'] ;
  $message = $_REQUEST['message'] ;
  mail( "
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ", "Subject: $subject",
  $message, "From: $email" );
  echo "Thank you for using our mail form";
  }
else
//if "email" is not filled out, display the form
  {
  echo "<form method='post' action='mailform.php'>
  Email: <input name='email' type='text' /><br />
  Subject: <input name='subject' type='text' /><br />
  Message:<br />
  <textarea name='message' rows='15' cols='40'>
  </textarea><br />
  <input type='submit' />
  </form>";
  }
?>
</body>
</html>

مثال بالا چه طور کار می کند:

· اول,بررسی می کند که آیا فیلد ورودی email پر شده است یا نه

· اگر پرنشده است(مثل وقتی که صفحه تازه دیده می شود); فرم HTML را نمایش می دهد

· اگر پر شده است( بعد از اینکه فرم پر شده); emailرا از فرم ارسال می کند

· وقتی دکمه submit پس از پر شدن فرم فشرده می شود, صفحه دوباره بار می شود,ورودی email تنظیم می شود و emailفرستاده می شود

نکته: این ساده ترین راه برای ارسال email است,اما ایمن نیست.در فصل بعد این آموزش شما می توانید بیشتر درمورد آسیب پذیری در scriptهای email بخوانید و اینکه چه طور ورودی کاربر را برای ایمن تر کردن آن معتبر کند.

منبع mailدر php

برای اطلاعات بیشتر درمورد توابع mail( ) در php به بخش php mail Referenceمراجعه کنید.

________________________________________________________

E-mailها در php

یک ضعف در اسکریپت e-mail فصل قبل وجود دارد.

تزریقات E-mail در php

ابتدا, به کد php فصل  قبل نگاهی بیندازید:

<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
  {
  //send email
  $email = $_REQUEST['email'] ; 
  $subject = $_REQUEST['subject'] ;
  $message = $_REQUEST['message'] ;
  mail("
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ", "Subject: $subject",
  $message, "From: $email" );
  echo "Thank you for using our mail form";
  }
else
//if "email" is not filled out, display the form
  {
  echo "<form method='post' action='mailform.php'>
  Email: <input name='email' type='text' /><br />
  Subject: <input name='subject' type='text' /><br />
  Message:<br />
  <textarea name='message' rows='15' cols='40'>
  </textarea><br />
  <input type='submit' />
  </form>";
  }
?>
</body>
</html>

مشکل کد بالا این است که کاربران غیرمجاز می توانند ازطریق فرم ورودی درون header نامه داده درج کنند.

چه اتفاقی خواهد افتاد اگر کاربر متن زیر را به فیلد ورودی email در فرم اضافه کند؟


 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 %0ACc:
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 
%0ABcc:
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ,
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ,

 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ,
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 
%0ABTo:
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 

تابع mail( ) طبق معمول متن را بالای header نامه قرار می دهد و اکنون header فیلدهای اضافی cc:,Bcc و ،to: را دارد.وقتی که کاربر بر روی دکمه submit کلیک می کند٫email به تمام آدرس های بالا ارسال خواهد شد!

متوقف کردن تزریقات E-mail در php

بهترین راه برای متوقف کردن تزریقات email معتبر کردن ورودی است.

کد زیر مانند کد فصل قبل است٫ اما حالا ما یک معتبرساز وروردی که فیلد email را در فرم چک می کند اضافه کرده ایم:

<html>
<body>
<?php
function spamcheck($field)
  {
  //filter_var() sanitizes the e-mail 
  //address using FILTER_SANITIZE_EMAIL
  $field=filter_var($field, FILTER_SANITIZE_EMAIL);
  
  //filter_var() validates the e-mail
  //address using FILTER_VALIDATE_EMAIL
  if(filter_var($field, FILTER_VALIDATE_EMAIL))
    {
    return TRUE;
    }
  else
    {
    return FALSE;
    }
  }
if (isset($_REQUEST['email']))
  {//if "email" is filled out, proceed
  //check if the email address is invalid
  $mailcheck = spamcheck($_REQUEST['email']);
  if ($mailcheck==FALSE)
    {
    echo "Invalid input";
    }
  else
    {//send email
    $email = $_REQUEST['email'] ; 
    $subject = $_REQUEST['subject'] ;
    $message = $_REQUEST['message'] ;
    mail("
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ", "Subject: $subject",
    $message, "From: $email" );
    echo "Thank you for using our mail form";
    }
  }
else
  {//if "email" is not filled out, display the form
  echo "<form method='post' action='mailform.php'>
  Email: <input name='email' type='text' /><br />
  Subject: <input name='subject' type='text' /><br />
  Message:<br />
  <textarea name='message' rows='15' cols='40'>
  </textarea><br />
  <input type='submit' />
  </form>";
  }
?>
</body>
</html>

در کد بالا ما فیلترهای php را برای معتبرسازی ورودی استفاده کرده ایم:

· فیلتر FILTER_SANITIZE_EMAIL تمام کاراکترهای غیرمجاز email را از رشته حذف می کند

· فیلتر FILTER_VALIDATE_EMAIL مقدار را به عنوان یک آدرس e-mail معتبر می کند

برای اطلاعات بیشتر درمورد فیلتر ها می توانید به بخش PHP Filter مراجعه کنید.

________________________________________________________

رفع خطا (Error) در php

رفع خطای پیش فرض در php بسیار ساده است.یک پیغام خطا همراه با نام فایل ٫شماره خط و یک پیغام که توضیح دهنده ی خطا است به مرورگر فرستاده می شود.

رفع خطا (Error) در php

هنگام ایجاد scriptها و درخواست نامه ای وب ٫رفع خطاها یک بخش مهم است.اگر کد شما امکان بررسی خطا را نداشته باشد٫برنامه شما بسیار غیرحرفه ای به نظر بیاید و شما در معرض خطر امنیتی قرار گیرید.

این آموزش بعضی روش های معمول بررسی خطا در php را شامل می شود.

ما روش های متفاوت خطایابی را نشان خواهیم داد:

· دستورات ساده ی "die( )"

· خطاهای معمول و محرک های خطا

· گزارش خطا

رفع خطای اسا سی: استفاده از تابع die( )

مثال اول یک script ساده را نشان می دهد که یک فایل متنی را باز می کند:

<?php
$file=fopen("welcome.txt","r");
?>

اگر فایل موجود نباشد این پیغام خطا را دریافت می کنید:

Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: 
No such file or directory in C:\webfolder\test.php on line 2
 

برای اینکه کاربر با پیغام خطای بالا مواجه نشود٫قبل از اینکه سعی برای دسترسی به فایل داشته باشیم موجود بودن آن را بررسی می کنیم:

<?php
if(!file_exists("welcome.txt"))
 {
 die("File not found");
 }
else
 {
 $file=fopen("welcome.txt","r");
 }
?>

حالا اگر فایل موجود نباشد شما این پیغام را دریافت می کنید:

File not found

کد بالا کارامدتر از کد قبلی است٫چون ازیک مکانیزم رفع خطای ساده برای متوقف کردن script بعد از خطا استفاده می کند.

اما٫ متوقف کردن script به این سادگی همیشه هم راه درست نیست.بیایید نگاهی به توابع تناوبی رفع خطا در php بیندازیم.

ایجاد یک خطا رفع کن (error handler) معمولی

ایجاد یک خطا رفع کن (error handler) معمولی بسیار ساده ست.ما یک تابع خاص ایجا می کنیم که هرگاه خطایی در php رخ داد این تابع بتواند فراخوانی شود.

این تابع باید بتواند حداقل با دو پارامتر کار کند(سطح خطا و پیغام خطا)اما تا پنج پارامتر را بپذیرد(اختیاری: فایل٫شماره خط و متن پیغام):

نحو

error_function(error_level,error_message,
error_file,error_line,error_context)
 

پارامتر

توضیح

error_level

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

error_message

اجباری. پیغام خطا را برای خطای تعریف شده توسط کاربر مشخص می کند.

error_file

اختیاری. نام فایلی را که خطا در ان رخ داده است مشخص می کند.

error_line

اختیاری. شماره خطی را که خطا در آن رخ داده است مشخص می کند.

error_context

اختیاری. یک آرایه که شامل تمام متغیرهای در حال استفده هنگام  رخداد خطا با مقادیرشان  است را مشخص می کند.

سطوح گزارش خطا

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

مقدار

ثابت

توضیح

2

E_WARNING

خطاهای زمان اجرا غیر جدی. اجرای script متوقف نمی شود

8

E_NOTICE

اخطارهای زمان اجرا.script چیزی پیدا کرده که ممکن است خطا باشد٫ اما می تواند در اجرای معمولی script نیز رخ دهد

256

E_USER_ERROR

خطای جدی کاربرساز.مانند یک E-ERROR که توسط کابر با استفاده از تابع trigger_error( ) در php به وجود می آید.

512

E_USER_WARNING

هشدار غیرجدی کاربرساز.مانند یک E_WARNING است که توسط کابر با استفاده از تابع trigger_error( ) در php به وجود می آید.

1024

E_USER_NOTICE

اخطار کاربرساز. مانند یک E_NOTICE است که توسط کابر با استفاده از تابع trigger_error( ) در php به وجود می آید.

4096

E_RECOVERABLE_ERROR

خطای جدی گرفتنی. مانند یک E_ERROR است اما بوسیله ی رفع خطای تعریف شده توسط کاربر می توان ان را گرفت(set_error_handler( ) را نیز ببینید)

8191

E_ALL

همه ی خطاها و هشدارها٫به جز سطح E_STRICT (E_STRICT در php 6.0 جزئی از E_ALL خواهد شد.

اکنون بیایید یک تابع برای رفع خطاها ایجاد کنیم:

function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Ending Script";
 die();
 }

کد بالا یک تابع ساده ی رفع خطا است. وقتی که شروع (trig)می شود٫سطح خطا و پیغام خطا را می گیرد.سپس سطح خطا و پیغام را نمایش داده وscript را خاتمه می دهد.

حالا که ما یک تابع رفع خطا را ایجاد کرده ایم ٫ باید تصمیم بگیریم که چه زمانی شروع شود.

تنظیم خطارفع کن

خطا رفع کن پیش فرض php در خطارفع کن(error handler) ساخته شده است. ما می خواهیم یک تابع بالای خطارفع کن پیش فرض برای استمرار script بسازیم.

امکان تغییر خطارفع کن برای استفاده ی ان برای تنها چند خطا وجود دارد٫ که در آن صورت script می تواند به روش های متفاوت با خطاهای متفاوت رفتار کند.اما در این مثال ما می خواهیم خطارفع کن معمولی خود را برای همه ی خطاها به کار ببریم:

set_error_handler("customError");

چون ما خواستیم که تابع معملی مان همه ی خطاها را رفع کند٫ set_error_handler( ) تنها نیاز به یک پارامتر داشت٫یک پارامتر دوم می توانست برای مشخص کردن یک سطح خطا اضافه شود.

مثال

خطارفع کن را با امتحان چاپ کردن متغیری که وجود ندارد آزمایش می کنیم:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr";
 }
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>

خروجی کد بالا باید چیزی مانند این باشد:

Custom error: [8] Undefined variable: test

راه اندازی یک خطا

در script ی که کاربران میتوانند داده وارد کنند بهتر است که موقع رخداد یک ورودی غیرمجاز خطاها را راه اندازی کنیم.در php ٫ این کار با تابع ٫ این کار با تابع trigger_error( ) انجام می شود.

مثال

در ایت مثال اگر متغیر "test" بزرگتر از "1" باشد ٫یک خطا رخ می دهد:

<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>

خروجی کد بالا باید چیزی مانند این باشد:

Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6

یک خطا می تواند هر جایی در script که بخواهید راه اندازی شود و با افزودن پارامتر ثانیه(second)٫ شما می توانید مشخص کنید که چه سطح خطایی راه اندازی شود.

انواع خطاهای ممکن:

· E_USER_ERROR – خطای زمان اجرا کاربرساز جدی. خطاهایی که نمی توانند بازیابی شوند.اجرای script متوقف خواهد شد.

· E_USER_WARNING – هشدار زمان اجرا کاربرساز غیرجدی.اجرای script متوقف نخواهد شد.

· E_USER_NOTICE – اخطار زمان اجرا کاربرساز پیش فرض. script چیزی پیدا کرده که ممکن است خطا باشد٫ اما می تواند در اجرای معمولی script نیز رخ دهد.

مثال

در این مثال یک هشدارE_USER_WARNING رخ می دهد اگر متغیر"test" بزرگتر از "1" باشد.اگر یک E_USER_WARNING رخ دهد ما خطارفع کن خود را استفده کرده و script را خاتمه می دهیم:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Ending Script";
 die();
 }
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
 {
 trigger_error("Value must be 1 or below",E_USER_WARNING);
 }
?>
 

خروجی کد بالا باید چیزی مانند این باشد:

Error: [512] Value must be 1 or below
Ending Script

اکنون که طریقه ی ایجاد خطاهای خودمان وچگونگی راه اندازی آن ها را یاد گرفته ایم ٫بیایید نگاهی به واقعه نگاری خطاها بیندازیم.

واقعه نگاری خطاها

به طور پیش فرض٫ php یک گزارش خطا به سیستم واقعه نگاری سرورها یا یک فایل بسته به اینکه پیکر بندی گزارش خطا چگونه درفایل .ini php تنظیم شده است ارسال می کند.با استفاده از تابع error_log( ) شما می توانید گزارش های خطا را به به یک فایل مشخص شده یا یک مقصد دور ارسال کنید.

ارسال پیغام های خطاها به خودتان از طریق email می تواند روش خوبی برای آگاه شدن از خطاهای خاص باشد.

ارسال یک پیغام خطا از طریق E-mail

در این مثال ما یک e-mail را همراه با یک پیغام خطا خواهیم فرستاد و اگر یک خطای خاص رخ دهد٫ script خاتمه خواهد یافت:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Webmaster has been notified";
 error_log("Error: [$errno] $errstr",1,
 "
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ","From: 
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ");
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
 {
 trigger_error("Value must be 1 or below",E_USER_WARNING);
 }
?>

خروجی کد بالا باید چیزی مانند این باشد:

Error: [512] Value must be 1 or below
Webmaster has been notified

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

Error: [512] Value must be 1 or below

این نباید برای همه ی خطاها استفاده شود.خطاهای معین باید با سیستم واقعه نگاری پیش فرض php در سرور ثبت شوند.

________________________________________________________

استثناگردانی در php

استثناها برای تغییر جریان عادی یک script در صورت رخداد یک خطای خاص استفاده می شوند

استثنا چیست

همراه با php 5 یک روش جدید شیء گرا برای کار با خطاها ارائه شد.

استثناگردانی برای تغییر جریان عادی اجرای کد در صورت رخداد یک شرط (استثنایی) خطا استفاده می شود.این شرط یک استثنا نامیده می شود.

آنچه که وقتی یک استثنا راه اندازی می شود به طورمعمول اتفاق می افتد :

· حالت کد فعلی ذخیره می شود

· اجرای کد به یک تابع ازپیش تعریف شده ی  گرداننده ی استثنا (مرسوم) سویچ می شود

· بسته به موقعیت٫ گرداننده ممکن است اجرا را از کد ذخیره شده ازسر بگیرد٫ اجرای script را به پایان برساند یا از یک مکان متفاوت در کد ادامه دهد

ما روش های متفاوت رفع خطا را نشان خواهیم داد:

· استفاده اساسی از استثناها

· ایجاد یک گرداننده ی استثنای مرسوم

· استثناهای چندگانه

· پرتاب دوباره ی استثنا

· تعیین یک گرداننده ی استثنای سطح بالا

نکته: استثناها فقط باید در شرط های خطا استفاده شوند و نه برای پرش به جای دیگرکد در یک نقطه ی مشخص.

استفاده اساسی استثناها

زمانی که یک استثنا راه اندازی می شود٫ کد زیر اجرا نخواهد شد و php سعی به پیدا کردن بلاک تطابقی "catch" خواهد کرد.

اگر یک استثنا بدست نیاید ٫یک fatal error همراه با پیغام "Uncaught Exception" صادر خواهد شد.

بیایید یک استثنا را بدون گرفتن آن راه اندازی کنیم:

<?php
//create function with an exception
function checkNum($number)
 {
 if($number>1)
  {
  throw new Exception("Value must be 1 or below");
  }
 return true;
 }
 
//trigger exception
checkNum(2);
?>

کد بالا این خطا را خواهد گرفت:

Fatal error: Uncaught exception 'Exception' 
with message 'Value must be 1 or below' in C:\webfolder\test.php:6 
Stack trace: #0 C:\webfolder\test.php(12): 
checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6

امتحان٫راه اندازی(پرتاب) و گرفتن (اخذ)

برای جلوگیری از ایجاد خطا توسط مثال بالا٫ باید یک کد درست برای گرداندن یک استثنا ایجاد کنیم.

کد استثنای درست باید شامل موارد زیر باشد:

1. امتحان (try) - تابعی که یک استثنا را استفاده می کند باید در بلاک "try" باشد.اگر استثنا راه اندازی نشود٫ کد به طور معمول ادامه خواهد یافت.اما اگر استثنا راه اندازی شود٫ یک استثنا "پرتابthrown" شده است

2. پرتاب(throw) - یعنی چه طور یک استثنا را راه اندازی کنید. هر "throw" باید حداقل یک "catch" داشته باشد

3. گرفتن(catch) - بلاک "catch" یک استثنا را بازیابی می کند و یک شیء شامل اطلاعات استثنا ایجاد می کند

بیایید یک استثنا را با کد معتبر راه اندازی کنیم:

<?php
//create function with an exception
function checkNum($number)
 {
 if($number>1)
  {
  throw new Exception("Value must be 1 or below");
  }
 return true;
 }
 
//trigger exception in a "try" block
try
 {
 checkNum(2);
 //If the exception is thrown, this text will not be shown
 echo 'If you see this, the number is 1 or below';
 }
 
//catch exception
catch(Exception $e)
 {
 echo 'Message: ' .$e->getMessage();
 }
?>

کد بالا این خطا را خواهد گرفت:

Message: Value must be 1 or below

توضیح مثال:

کد بالا یک استثنا را پرتاب و سپس آن را می گیرد:

1. تابع checkNum() ایجاد می شود وبررسی می کند که آیا یک عدد بزرگتر از 1 است.اگر بزرگتر باشد یک استثنا پرتاب می شود

2. تابع checkNum() در بلاک "try" فراخوانی می شود

3. تابع درون تابع checkNum() پرتاب می شود

4. بلاک"catch" استثنا را بازیابی می کند و یک شیء ($e) شامل اطلاعات استثنا ایجاد می کند

5. پیغام خطای استثنا با فراخوانی $e->getMessage() از شیء استثنا تولید می شود

اگرچه٫ یک راه برای نزدیک شدن به قانون "هر پرتاب باید یک گرفتن داشته باشد" تعیین یک گرداننده ی استثنا سطح بالا برای رفع خطاهای ازقلم افتاده است.

ایجاد یک کلاس استثنای مرسوم

ایجاد یک کلاس استثنای مرسوم بسیار ساده است. ما به سادگی یک کلاس خاص همراه با توابعی که بتوانند هنگام رخداد یک استثنا در php فراخوانی شوند٫ ایجاد می کنیم.کلاس باید یک تعمیم از کلاس استثنا باشد.

کلاس استثنا مرسوم خصوصیاتی را از کلاس استثنا php به ارث می برد و شما می تونید توابع مرسوم را به آن بیفزایید.

بیایید یک کلاس استثنا ایجاد کنیم:

<?php
class customException extends Exception
 {
 public function errorMessage()
  {
  //error message
  $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
  .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
  return $errorMsg;
  }
 }
$email = "
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ";
try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
  {
  //throw exception if email is not valid
  throw new customException($email);
  }
 }
catch (customException $e)
 {
 //display custom message
 echo $e->errorMessage();
 }
?>

کلاس جدید یک کوپی از کلاس استثنا قبل همراه با تابع errorMessage() است.چون این کلاس یک کوپی از کلاس قبل است و خصوصیات و متدهایش را از کلاس قبل به ارث می برد٫ ما می توانیم متدهای کلاس استثنا را ازقبیل getMessage(),getFile() ,getLine() را استفاده کنیم.

توضیح مثال:

کد بالا یک استثنا را پرتاب می کند و آن را همراه با یک کلاس استثنا مرسوم می گیرد:

1. کلاس customException() به عنوان تعمیمی از کلاس قبلی ایجاد می شود است.دراین صورت این کلاس همه ی متدها وخصوصیات را از کلاس قبلی به ارث می برد

2. تابع errorMessage() ایجاد می شود.این تابع درصورتی که آدرس ایمیل نامعتبر باشد یک پیغام خطا برمی گرداند

3. متغیر $email برای رشته ای که آدرس ایمیل معتبری نیست٫ تنظیم می شود

4. بلاک"try" اجرا می شود و چون که آدرس ایمیل نامعتبر است٫ یک استثنا پرتاب می شود

5. بلاک"catch" استثنا را می گیرد و یک پیغام خطا نمایش می دهد

استثناهای چندگانه

این امکان برای یک script وجد دارد که استثناهای چندگانه را برای بررسی شرط های چندگانه استفاده کند.

امکان استفاده از چندین بلاک if…else ٫ یک switch یا استثناهای چندگانه ی بازگشتی وجود دارد.این استثناها می توانند کلاس های استثنای متفاوت و پیغام خطاهای متفاوتی را برگردانند:

<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
 
$email = "
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ";
 
try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
  {
  //throw exception if email is not valid
  throw new customException($email);
  }
 //check for "example" in mail address
 if(strpos($email, "example") !== FALSE)
  {
  throw new Exception("$email is an example e-mail");
  }
 }
 
catch (customException $e)
 {
 echo $e->errorMessage();
 }
catch(Exception $e)
 {
 echo $e->getMessage();
 }
?>

توضیح مثال:

کد بالا دو شرط را بررسی می کند و در صورتی که یکی از شرط ها مطابق شرایط نباشد یک استثنا پرتاب می کند:

1. کلاس customException() به عنوان تعمیمی از کلاس قبلی است.در این صورت تمام متدها و خصوصیاتش را از کلاس قبلی به ارث می برد

2. تابع errorMessage() ایجاد می شود.این تابع در صورت نامعتبر بودن آدرس ایمیل یک پیغام خطا برمی گرداند

3. متغیر $email برای رشته ای که یک آدرس ایمیل معتبراست٫ تنظیم می شود٫اما شامل رشته ی "example" است

4. بلاک"try" اجرا می شود و استثنایی روی شرط اول پرتاب نمی شود

5. شرط دوم چون که ایمیل شامل رشته ی "example" است یک استثنا را فراخوانی می کند

6. بلاک "catch" استثنا را می گیرد و پیغام خطای مناسب را نمایش می دهد

اگر هیچ اخذ customException ی وجود نداشت٫تنها اخذ استثنا پایه در آنجا به کار خواهد رفت

پرتاب دوباره ی استثناها

گاهی اوقات ٫ وقتی که استثنا پرتاب می شود٫ شما ممکن است بخواهید به طریقی متفاوت با شیوه ی استاندارد آن را به کار گیرید.می توان یک استثنا را برای بار دوم در بلاک "catch" پرتاب کرد.

یک script باید خطاهای سیسنمی را از دید کاربر پنهان کند.خطاهای سیستمی ممکن است برای برنامه نویس مهم باشند٫ اما کاربر علاقه ای به آن ها ندارد.برای اینکه کارها را برای کاربر راحت تر کنید شما می توانید استثنا را همراه با یک پیغام کاربرپسند بازپزتاب کنید:

<?php
class customException extends Exception
 {
 public function errorMessage()
  {
  //error message
  $errorMsg = $this->getMessage().' is not a valid E-Mail address.';
  return $errorMsg;
  }
 }
$email = "
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 ";
try
 {
 try
  {
  //check for "example" in mail address
  if(strpos($email, "example") !== FALSE)
   {
   //throw exception if email is not valid
   throw new Exception($email);
   }
  }
 catch(Exception $e)
  {
  //re-throw exception
  throw new customException($email);
  }
 }
catch (customException $e)
 {
 //display custom message
 echo $e->errorMessage();
 }
?>

توضیح مثال:

کد بالا بدین گونه عمل می کند که اگر رشته ی "example" در آدرس ایمیل بود٫ استثنا دوباره پرتاب شود:

1. کلاسcustomException() به عنوان تعمیمی از کلاس قبل ایجاد می شود.در این صورت تمام متدها و خصوصیاتش را از کلاس قبل به ارث می برد

2. تابع errorMessage() ایجاد می شود.این تابع در صورت نامعتبر بودن آدرس ایمیل یک پیغام خطا برمی گرداند

3. متغیر $email برای رشته ای که یک آدرس ایمیل معتبراست٫ تنظیم می شود٫اما شامل رشته ی "example" است

4. بلاک"try" شامل بلاک "try" دیگری است تا استثنا بتواند دوباره پرتاب شود

5. چون ایمیل حاوی رشته ی "example" است٫ استثنا راه اندازی می شود

6. بلاک "catch" استثنا را می گیرد و "customException" را بازپرتاب می کند

7. "customException" گرفته می شود و یک پیغام خطا نمایش داده می شود

اگر استثنا در بلاک "try" فعلی خود گرفته نشود ٫شروع به جستجوی یک بلاک catch در "سطوح بالاتر" خواهد کرد.

تعیین یک استثناگردان سطح بالا

تابعset_exception_handler() یک تابع کاربرنویس را برای کار با همه ی استثناهای اخذنشده تعیین می کند.

<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>

خروجی کد بالا باید چیزی مانند این باشد:

Exception: Uncaught Exception occurred

در کد بالا هیچ بلاک "catch"ی وجود نداشت. درعوض استثناگردان سطح بالا  راه اندازی شد.این تابع باید برای گرفتن استثناهای اخذ نشده استفاده شود.

قوانین استثناها

· ممکن است کد در یک بلاک try احاطه شده باشد تا در گرفتن استثناهای باالقوه کمک کند

· هر بلاک try یا throw باید حداقل یک بلاک catch متناظر داشته باشد

· بلاک های catch چندگانه می توانند برای گرفتن کلاس های متفاوت استثنا استفاده شوند

· استثناها می توانند در یک بلاک catch درون یک بلاک try پرتاب (یا بازپرتاب) شوند

یک قانون ساده: باید چیزی را که پرتاب می کنید پس بگیرید.

________________________________________________________

فیلتر(صافی) در php

فیلترها برای معتبرسازی و فیلتر کردن داده هایی که از منابع ناامن مانند ورودی کاربر می آیند٫ استفاده می شود.

فیلتر چیست؟

فیلترها برای معتبرسازی و فیلتر کردن داده هایی که از منابع ناامن می آیند٫ استفاده می شود.

آزمایش٫ معتبرسازی و فیلتر کردن ورودی کاربر و داده های معمول یک بخش مهم از هر درخواست وب است.

پسوند فیلترهای php برای سریع تر و آسان ترفیلتر کردن داده ها طراحی شده است.

چرا از فیلتر استفاده می شود؟

تقریبا همه ی درخواست های وب مربوط به ورودی خارجی است.که معمولا از یک کاربر یا درخواست دیگر (مثل یک سرویس وب)می آید. بااستفاده از فیلترها شما می توانید مطمئن باشید که درخواست شما نوع ورودی درست را دریافت می کند.

شما باید همیشه داده های خارجی را فیلتر کنید!

فیلتر ورودی یکی از مهمترین مسائل امنیت درخواست است.

داده ی خارجی چیست؟

· داده ی ورودی یک فرم

· Cookieها

· داده ی سرویس های وب

· متغیرهای سرور

· نتایج تقاضای (query) پایگاه داده

توابع و فیلترها

برای فیلترکردن یک متغیر٫یکی از توابع فیلتر زیر را استفاده کنید:

· Filter_var() – یک متغیر خاص را با یک فیلتر مخصوص فیلتر می کند

· Filter_var_array() – چندین متغیر را با همان فیلتر یا فیلترهای متفاوت فیلت می کند

· Filter_input – یک متغیر ورودی را می گیرد و آن را فیلتر می کند

· Filter_input_array – چندین متغیر ورودی را می گیرد و آن ها را با همان فیلتر یا با فیلترهای متفاوت فیلتر می کند

در مثال زیر٫ما یک داده ی integer را با استفاده از تابع filter_var() معتبر می کنیم:

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
 {
 echo("Integer is not valid");
 }
else
 {
 echo("Integer is valid");
 }
?>

کد بالا فیلتر"FILTER_VALIDATE_INT" را برای فیلتر کردن متغیر استفاده می کند.چون integer معتبر است٫ خروجی کد بالا چنین خواهد بود:"integer is valid"

اگر ما این را با متغیری که integer نیست(مثل"123abc") امتحان کنیم٫خروجی چنین خواهد بود:"integer is not valid"

برای لیست کامل توابع و فیلترها به بخش PHP filter Reference مراجعه کنید.

معتبر واصولی( مطابق اصول عمل) کردن

دو نوع فیلتر وجود دارد:

فیلترهای معتبرسازی:

· برای معتبر کردن ورودی کاربر استفاده می شوند

· قوانین قالب بندی محض (مثل معتبرسازی URL یا E-Mail)

· درصورت موفقیت نوع مورد انتظار و درصورت شکست FALSE را برمی گرداند

فیلترهای اصولی:

· برای اینکه به کاراکترهای مشخص شده ای اجازه ی بودن در رشته را دهند یا ندهند

· وجود هیچ قانونی برای قالب بندی داده ها

· همیشه رشته را برمی گرداند

انتخاب ها و پرچم ها(option ها و flag ها)

Optionها و flagها برای اضافه کردن انتخاب های اضافی فیلترکردن به فیلترهای مشخص شده استفاده می شوند.

فیلترهای متفاوت optionها و flag های متفاوتی دارند.

در مثال زیر٫ ما یک integer را با استفاده ازfilter_var() و optionهای "min_range" و "max_range" معتبر می کنیم:

<?php
$var=300;
$int_options = array(
"options"=>array
 (
 "min_range"=>0,
 "max_range"=>256
 )
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
 {
 echo("Integer is not valid");
 }
else
 {
 echo("Integer is valid");
 }
?>

مثل کد بالا٫ optionها باید در یک آرایه ی انجمنی با نام "options" قرار داده شوند.اگر یک flag استفاده می شود نیاز نیست که در آرایه قرار گیرد.

چون integer برابر با "300" است در محدوده ی مشخص شده نیست و خروجی کد بالا چنین خواهد بود:"Integer is not valid"

برای لیست کامل توابع و فیلترها به بخش PHP filter Reference مراجعه کنید.بررسی کنید چه optionها و flagهایی برای هر فیلتر وجود دارد.

ورودی را معتبر کنید

بیایید ورودی یک فرم را معتبر کنیم.

اولین کاری  که باید انجام دهیم این است که مطمئن شویم که داده ای که ما به دنبال آن هستیم وجود دارد یا نه.

سپس داده ی ورودی را با استفاده از تابع filter_input() فیلتر می کنیم.

در مثال زیر٫ متغیر ورودی "email" به صفحه php فرستاده می شود:

<?php
if(!filter_has_var(INPUT_GET, "email"))
 {
 echo("Input type does not exist");
 }
else
 {
 if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
  {
  echo "E-Mail is not valid";
  }
 else
  {
  echo "E-Mail is valid";
  }
 }
?>

توضیح مثال:

مثال بالا یک ورودی(email) دارد که با استفاده از متد "GET" به آن ارسال شده است:

1. چک می کند که آیا متغیر ورودی "email" از نوع "GET" موجود هست

2. اگر متغیر ورودی وجود داشته باشد٫ چک می کند که آیا یک آدرس ایمیل معتبر هست یا نه

ورودی را اصولی کنید

بیایید پاکسازی یک URL ارسال شده از فرم را امتحان کنیم.

ابتدا مطمئن می شویم که داده ای که ما به دنبال آن هستیم وجود دارد یا نه.

سپس داده ی ورودی را با استفاده از تابع filter_input()اصولی می کنیم.

در مثال زیر٫ متغیر ورودی "URL" به صفحه php فرستاده می شود:

<?php
if(!filter_has_var(INPUT_POST, "url"))
 {
 echo("Input type does not exist");
 }
else
 {
 $url = filter_input(INPUT_POST, 
 "url", FILTER_SANITIZE_URL);
 }
?>

توضیح مثال:

مثال بالا یک ورودی(url) دارد که با استفاده از متد "POST" به آن ارسال شده است:

1. چک می کند که آیا متغیر ورودی "url" از نوع "POST" موجود هست

2. اگر متغیر ورودی وجود داشته باشد٫ آن را اصولی(کاراکترهای نامعتبر را کنار می گذارد) و در متغیر $url ذخیره می کند

اگر متغیر ورودی یک رشته مثل این باشد "http://www.W3ååSchøøools.com/" ٫متغیر $url بعد از اصولی سازی به این شکل خواهد بود:

http://www.W3Schools.com/

ورودی های چندگانه ی فیلتر

یک فرم تقریبا همیشه از بیش از یک فیلد ورودی تشکیل شده است.برای جلوگیری ازچندین بار فراخوانی توابع filter_var یا filter_input ٫ ما می توانیم توابع filter_var_array یا filter_input_array را استفاده کنیم.

در این مثال ما تابع filter_input_array() را برای فیلترکردن سه متغیر GET استفاده می کنیم.متغیرهای GET دریافتی یک نام ٫سن و آدرس ایمیل هستند:

<?php
$filters = array
 (
 "name" => array
  (
  "filter"=>FILTER_SANITIZE_STRING
  ),
 "age" => array
  (
  "filter"=>FILTER_VALIDATE_INT,
  "options"=>array
   (
   "min_range"=>1,
   "max_range"=>120
   )
  ),
 "email"=> FILTER_VALIDATE_EMAIL,
 );
$result = filter_input_array(INPUT_GET, $filters);
if (!$result["age"])
 {
 echo("Age must be a number between 1 and 120.<br />");
 }
elseif(!$result["email"])
 {
 echo("E-Mail is not valid.<br />");
 }
else
 {
 echo("User input is valid");
 }
?>

توضیح مثال:

مثال بالا سه ورودی (name,age,email) دارد که با استفاده از متد "GET" به آن ارسال شده است:

1. یک آرایه شامل نام متغیرهای ورودی و فیلترهای مصرفی برای متغیرهای ورودی مشخص شده تعیین می کند

2. تابع filter_input_array() را همراه با متغیرهای ورودی GET و آرایه ای که ما تعیین کرده ایم فراخوانی می کند

3. متغیرهای "email"و "age" را برای ورودی های نامعتبر در متغیر$result چک می کند.(اگر هرکدام از متغیرهای ورودی نامعتبر باشند٫ آن متغیر ورودی پس از تابع filter_input_array() برابر با FALSE قرار خواهد گرفت)

پارامتر دوم تابع filter_input_array() می تواند یک آرایه یا یک شناسه فیلتر خاص باشد.

اگر پارامتر یک شناسه فیلتر خاص باشد تمام مقادیر در آرایه ی ورودی بوسیله ی فیلتر مشخص شده فیلتر می شوند.

اگر پارامتر یک آرایه است باید قواعد زیر را دنبال کند:

· باید یک آرایه  ی انجمنی شامل یک متغیر ورودی به عنوان یک کلید آرایه ای باشد(مثل متغیر ورودی "age")

· مقدار آرایه باید یک شناسه فیلتر یا یک آرایه تعیین کننده ی فیلتر٫flagها و optionها باشد

استفاده از فراخوان برگردان(callback) فیلتر

امکان فراخوانی یک تابع کاربرنویس و استفاده از آن به عنوان یک فیلتر با استفاده از فیلتر FILTER_CALLBACK وجود دارد.با این کار٫ کنترل کامل فیلتر کردن داده ها را در دست داریم.

شما می توانید تابع تعریف شده ی خودتان را ایجاد کنید یا از یک تابع PHP موجود استفاده کنید

تابعی که شما می خواهید از آن برای فیلتر کردن استفاده کنید به همان روشی تعیین می شود که یک option تعیین می شود.در یک آرایه ی انجمنی  با نام "option"

در مثال زیر٫ ما یک تابع ایجاد شده توسط کاربر را برای تبدیل همه ی "_" به خط فاصله استفاده می کنیم:

<?php
function convertSpace($string)
{
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
 
echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>

نتیجه ی کد بالا چیزی شبیه به این است:

Peter is a great guy!

توضیح مثال:

مثال بالا همه ی "_" را به خط فاصله تبدیل می کند:

1. یک تابع برای جایگزین کردن خط فاصه و "_" ایجاد می کند

2. تابع filter_var() را همراه با فیلتر FILTER_CALLBACK و یک آرایه شامل تابع مان فراخوانی می کند

آخرین بروز رسانی در چهارشنبه, 02 تیر 1389 ساعت 14:40
 
آموزش PHP-قسمت دوم مشاهده در قالب PDF چاپ فرستادن به ایمیل
نوشته شده توسط Administrator   
چهارشنبه, 02 تیر 1389 ساعت 14:34

توابع php-اضافه کردن پارامترها

اولین تابع ما (WriteMyName()) یک تابع بسیار ساده است. تنها یک رشته ی ثابت را چاپ می کند.

اگر بخواهیم عاملیت بیشتری به تابع بدهیم٫می توانیم پارامترها را به آن اضافه کنیم.یک پارامتر درست مثل یک متغیر است.

احتمالا پرانتز های بعد از نام تابع را دیده اید٫مانند:writeMyName().

پارامترها داخل پرانتزها مشخص می شوند.

مثال 1

مثال زیر نام کوچک متفاوت  با همان نام خانوادگی را چاپ خواهد کرد:

<html>
<body>
<?php
function writeMyName($fname)
  {
  echo $fname . " Refsnes.<br />";
  }
echo "My name is ";
writeMyName("Kai Jim");
echo "My name is ";
writeMyName("Hege");
echo "My name is ";
writeMyName("Stale");
?>
</body>
</html>

خروجی کد بالا چنین خواهد بود:

My name is Kai Jim Refsnes.
My name is Hege Refsnes.
My name is Stale Refsnes.

مثال 2

تابع زیر دو پارامتر دارد:

<html>
<body>
<?php
function writeMyName($fname,$punctuation)
  {
  echo $fname . " Refsnes" . $punctuation . "<br />";
  }
echo "My name is ";
writeMyName("Kai Jim",".");
echo "My name is ";
writeMyName("Hege","!");
echo "My name is ";
writeMyName("Ståle","...");
?>
</body>
</html>

خروجی کد بالا چنین خواهد بود:

My name is Kai Jim Refsnes.
My name is Hege Refsnes!
My name is Ståle Refsnes...

توابع php- مقادیر برمی گردانند

توابع برای بازگرداندن مقادیر نیز استفاده می شوند.

مثال

<html>
<body>
<?php
function add($x,$y)
  {
  $total = $x + $y;
  return $total;
  }
echo "1 + 16 = " . add(1,16);
?>
</body>
</html>

خروجی کد بالا چنین خواهد بود:

1 + 16 = 17

___________________________________________________________

فرم ها و ورودی های کاربر

متغیرهای $_GET و $_POST در php برای بازگرداندن اطلاعات از فرم٫مانند ورودی کاربر استفاده می شوند.

به کار بردن فرم php

مهم ترین چیز موقع کار با فرم های HTML و php این است که هرعنصرفرم در یک صفحه ی HTML به طور خودکار دراسکریپت php شما موجود خواهد بود.اشکال

مثال فرم:

<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>

صفحه ی HTML مثال بالا شامل دو فیلد ورودی و یک دکمه submit است.وقتی که کاربر این فرم را پر می کند و روی دکمه submit کلیک می کند٫ داده ی فرم به فایل "welcome.php" فرستاده می شود.

فایل "welcome.php" شبیه به این است:

<html>
<body>
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>

یک خروجی نمونه از script بالا ممکن است چنین باشد:

Welcome John.
You are 28 years old.

متغیرهای $_GET و $_POST در php در فصل های آینده شرح داده خواهند شد.

معتبرسازی فرم

ورودی کاربر هر زمان که ممکن باشد باید معبر شود.معتبر سازی client side سریعتر است٫ و بار (مسئولیت) سرور را کم خواهد کرد.

البته٫ هر مکان پایه ای که ترافیک کافی را برای نگرانی در مورد منابع سرور بدست می آورد ٫ممکن است نیاز به نگرانی در مورد امنیت مکان پایه داشته باشد. شما بهتر است همیشه معتبر سازی server side را استفاده کنید اگر فرم به پایگاه داده  دسترسی دارد.نفهمیدم

یک روش خوب برای معتبرسازی فرم بر روی سرور ارسال فرم به خودش است٫به جای پریدن به یک صفحه ی متفاوت.آنگاه کاربر پیغام خطا را روی همان صفحه به عنوان فرم دریافت خواهد کرد.این پیدا کردن خطا را آسان تر می کند.

___________________________________________________________

$_GET در php

متغیر $_GET برای جمع آوری مقادیر از یک فرم با method="get" استفاده می شود.

متغیر $_GET

متغیر $_GET یک آرایه از اسامی متغیرها و مقادیرفرستاده شده بوسیله متدHTTP GET است.

متغیر $_GET برای جمع آوری مقادیراز یک فرم با method="get" است.اطلاعات فرستاده  شده از یک فرم بامتد get برای همه قابل رویت است(در نوار آدرس مرورگر نمایش دادهمی شود) و روی مقداراطلاعات فرستادنی محدودیت دارد(حداکثر100 کاراکتر).

مثال

<form action="welcome.php" method="get">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>

وقتی کاربر دکمه ی "submit" را کلیک می کند,URL ارسالی می تواند چیزی شبیه این باشد:

http://www.w3schools.com/welcome.php?name=Peter&age=37

فایل "welcome.php" حالا می تواند متغیر $_GET را برای گرفتن داده ی فرم استفاده کند(توجه داشته باشید که اسامی فیلدهای فرم به طور خودکار در آرایه ی $_GET کلیدهای ID خواهند شد):

Welcome <?php echo $_GET["name"]; ?>.<br />
You are <?php echo $_GET["age"]; ?> years old!

چرا $_GET را استفاده می کنیم؟

نکته: هنگام استفاده ازمتغیر $_GET اسامی و مقادیر تمام متغیرها در URL نمایش داده می شوند. بنابراین این متد نباید برای  فرستادن رمز عبور(password) یا دیگر اطلاعات حساس استفده شود! اگرچه٫ چون متغیرها در URL نمایش داده می شوند ٫ امکان نشان گذاری کردن صفحه وجود دارد.در بعضی حالت ها این می تواند مفید باشد.

نکته: متد HTTP GET برای مقادیر بزرگ متغیر مناسب نیست; مقدار نمی تواند بیش از 100 کاراکتر باشد.

متغیر $_REQUEST

متغیر $_REQUEST شامل محتویات $_GET٫ $_SET و$_COOKIE است.

متغیر $_REQUEST در php می تواند برای گرفتن نتیجه از داده فرم فرستاده شده با هر دو متد GET و POST استفاده شود.

مثال

Welcome <?php echo $_REQUEST["name"]; ?>.<br />
You are <?php echo $_REQUEST["age"]; ?> years old!

________________________________________________________

$_POST در php

متغیر $_POST برای جمع آوری مقادیر از یک فرم با method="post" استفاده می شود.

متغیر $_POST

متغیر $_POST یک آرایه از اسامی متغیرها و مقادیرفرستاده شده بوسیله متدHTTP POST است.

متغیر $_POST برای جمع آوری مقادیراز یک فرم با method="post" است.اطلاعات فرستاده  شده از یک فرم بامتد post برای دیگران قابل رویت نیست و هیچ محدودیتی  روی مقدار اطلاعات فرستادنی ندارد.

مثال

<form action="welcome.php" method="post">
Enter your name: <input type="text" name="name" />
Enter your age: <input type="text" name="age" />
<input type="submit" />
</form>

 

وقتی کاربر دکمه ی "submit" را کلیک می کند٫URL شامل هیچ داده فرمی نخواهد بود٫ و چیزی شبیه به این است:

http://www.w3schools.com/welcome.php

فایل "welcome.php" حالا می تواند متغیر $_POST را برای گرفتن داده ی فرم استفاده کند(توجه داشته باشید که اسامی فیلدهای فرم به طور خودکار در آرایه ی $_POST کلیدهای ID خواهند شد):

Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old!

چرا $_POST را استفاده می کنیم؟

· متغیرهای فرستاده با HTTP POST در URL نشان داده نمی شوند

· متغیرها هیچ محدودیت طولی ندارند

اگرچه٫ چون متغیرها در URL نمایش داده نمی شوند ٫ امکان نشان گذاری کردن صفحه وجود ندارد.

متغیر $_REQUEST

متغیر$_REQUEST شامل محتویات $_GET٫ $_SET و$_COOKIE است.

متغیر $_REQUEST در php می تواند برای گرفتن نتیجه از داده فرم فرستاده شده با هر دو متد GET و POST استفاده شود.

مثال

Welcome <?php echo $_REQUEST["name"]; ?>.<br />
You are <?php echo $_REQUEST["age"]; ?> years old!

PHP Advanced

________________________________________________________

تابع Date() در php

تابع date( ) برای قالب بندی کردن یک زمان یا تاریخ استفاده می شود.

تابع Date() در php

تابع Date() در php یک نوع زمان را برای خواناتر بودن تاریخ و زمان قالب بندی می کند.

نحو

date(format,timestamp)
 

پارامتر

توضیح

format

اجباری است و قالب نوع زمان را مشخص می کند

timestamp

اختیاری است و یک نوع زمان را تعیین می کند.مقدار پیشفرض آن زمان و تاریخ جاری است(به عنوان نوع زمان)

Php Date – نوع زمان (Timestamp) چیست؟

یک نوع زمان تعداد ثانیه ها پس از January 1,1970 در زمان 00:00:00 GMT است.و معروف به نوع زمان یونیکس (unix) نیز هست.

Php Date- تاریخ را قالب بندی می کند

پارامتر اول در تابع date( ) مشخص می کند که تاریخ/زمان چگونه قالب بندی شود.این تابع از حروف برای نمایش قالب های زمان و تاریخ استفاده می کند.برخی از حروف مورد استفاده در اینجا وجود دارد:

· D- روز از ماه (01-31)

· M- ماه جاری ٫به عنوان یک عدد (01-12)

· Y- سال جاری در چهار رقم

تمام حروفی را که می توانند در پارامتر قالب (format) استفاده شوند ٫می توانید در بخش php Data reference بیابید.

دیگر کاراکترها٫ مانند "/" ٫ "." و یا "-" نیز می توانند بین حروف برای افزودن قالب بندی های اضافی قرار گیرند:

<?php
echo date("Y/m/d");
echo "<br />";
echo date("Y.m.d");
echo "<br />";
echo date("Y-m-d");
?>

خروجی کد بالا چیزی شبیه به این است:

2006/07/11
2006.07.11
2006-07-11

Php Date- افزودن یک نوع زمان

پارامتر دوم در تابع date( ) یک نوع زمان را مشخص می کند.این پارامتر اختیاری است.اگر شما نوع زمان قرار ندهید ٫ زمان جاری مورد استفاده قرار خواهد گرفت.

در مثال بعدی تابع mktime( ) را برای ایجاد نوع زمان برای فردا استفاده خواهیم کرد.

تابع mktime() نوع زمان unix را برای تاریخ مشخص شده برمی کرداند.

نحو

mktime(hour,minute,second,month,day,year,is_dst)

برای یک روز به جلو رفتن ما به سادگی یک را به آرگومان روز تابع mktime( ) اضافه می کنیم:

<?php
$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));

echo "Tomorrow is ".date("Y/m/d", $tomorrow);
?>

خروجی کد بالا چیزی شبیه به این است:

Tomorrow is 2006/07/12

مرجع php Date

برای اطلاعات بیشتر در مورد تمام توابع  تاریخ (date) در php٫به بخش مرجع php Date مراجعه کنید.

________________________________________________________

فایل include در php

Includeهای طرف سرور (ssi) برای ایجاد توابع٫ headerها٫ footerها٫ یا اجزایی که دوباره در صفحات چندگانه استفاده خواهند شد٫ مورد استفاده قرار می گیرد.

Includeهای طرف سرور

شما می توانید محتویات یک فایل را قبل از اینکه سرور فایل php را اجرا کند در آن(فایل php) بریزید٫با استفتده از توابع include( ) یا require( ).این دو تابع از هر لحاظ به جز روش کار با خطاها با هم یکسان اند.تابع include( ) یک هشدار (warning) تولید می کند(اما اجرای script ادامه خواهد داشت) در حالی که تابع require( ) یک خطای جدی(fatal error) تولید کرده ( و اجرای scriptپس از خطا متوقف خواهد شد).

این دو تابع برای ایجاد توابع٫ headerها٫ footerها٫ یا اجزایی که دوباره در صفحات چندگانه استفاده خواهند شد٫ مورد استفاده قرار می گیرد.

این می تواند مقدار قابل توجهی از زمان را ذخیره کند. یعنی شما می توانید یک header استاندارد یا یک فایل فهرست که می خواهید تمام صفحات وبتان در include قرار دهید ایجاد کنید . اشکال

وقتی که نیاز است header به روز(update) شود٫شما فقط نیاز دارید که این یک فایل include را به روز کنید٫یا وقتی که یک صفحه ی جدید به سایتتان اضافه می کنید٫شما می توانید به سادگی فایل فهرست را (به جای به روز کردن پیوند (link)های روی تمام صفحات وب ) تغییر دهید.

تابع include( )

تابع include( ) تمام متن درون فایل مشخص شده را می گیرد و در فایلی که تابع include( ) را استفاده می کند کوپی می کند.

مثال 1

فرض کنید شما یک فایل header استاندارد به نام "header.php" دارید.برای شامل شدن فایل header در یک صفحه٫تابع include( ) را استفاده کنید٫مانند این:

<html>
<body>
<?php include("header.php"); ?>
<h1>Welcome to my home page</h1>
<p>Some text</p>
</body>
</html>

مثال 2

حالا٫فرض می کنیم یک فایل فهرست استاندارد داریم که باید در همه ی صفحات استفاده شود(فایل های include معمولا پسوند "php" دارند).به فایل "menu.php" در زیر توجه کنید:

<html>
<body>
<a href="http://www.w3schools.com/default.php">Home</a> |
<a href="http://www.w3schools.com/about.php">About Us</a> | 
<a href="http://www.w3schools.com/contact.php">Contact Us</a>

سه فایل "default.php"٫"about.php" و"contact.php" همه باید شامل فایل "menu.php" باشند.در اینجا کد "default.php" قرار دارد:

<?php include("menu.php"); ?>
<h1>Welcome to my home page</h1>
<p>Some text</p>
</body>
</html>

اگر در مرورگر به کد منبع "default.php" نگاهی بیندازید٫چیزی مشابه این خواهد بود:

<html>
<body>
<a href="/default.php">Home</a> |
<a href="/about.php">About Us</a> | 
<a href="/contact.php">Contact Us</a>
<h1>Welcome to my home page</h1>
<p>Some text</p>
</body>
</html>

و البته مب باید همین کار ر ابرای "about.php" و "contact.php" نیز انجام دهیم.با استفاده از فایل های include ٫ شما به سادگی باید متن درون فایل"menu.php" را اگر تصمیم به تغییرنام یا تغییر نظم پیوندها یا اضافه کردن صفحه ی وب دیگری به سایت دارید٫ به روز کنید.

تابع require( )

تابع require( ) به جز در کار با خطاها شبیه به include( ) است.

تابع include( ) یک هشدار (warning) تولید می کند(اما اجرای script ادامه خواهد داشت) در حالی که تابع require( ) یک خطای جدی(fatal error) تولید کرده ( و اجرای scriptپس از خطا متوقف خواهد شد).

اگر شما یک فایل را با تابع include( ) به حساب آورده باشید و یک خطا رخ دهد ٫شما ممکن است پیغام خطایی مثل زیر دریافت کنید.

کد php:

<html>
<body>
 
<?php
include("wrongFile.php");
echo "Hello World!";
?>
 
</body>
</html>

پیغام خطا:

Warning: include(wrongFile.php) [function.include]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5
Warning: include() [function.include]:
Failed opening 'wrongFile.php' for inclusion
(include_path='.;C:\php5\pear')
in C:\home\website\test.php on line 5
Hello World!

توجه داشته باشید که هنوز دستور echo اجرا می شود! این بدین دلیل است که یک هشدار اجرای script ر امتوقف نمی کند.

حالا٫بیایید همان مثال را با تابع require( ) اجرا کنیم.

کد php:

<html>
<body>
 
<?php
require("wrongFile.php");
echo "Hello World!";
?>
 
</body>
</html>

پیغام خطا:

Warning: require(wrongFile.php) [function.require]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5
Fatal error: require() [function.require]:
Failed opening required 'wrongFile.php'
(include_path='.;C:\php5\pear')
in C:\home\website\test.php on line 5

دستور echo اجرا نشد چون اجرای script بعد از fatal error متوقف شد.

پیشنهاد می شود که تابع require( ) را به جای تابع include( ) استفاده کنید٫ چون اگر فایل ها در دسترس نباشند یا با نام اشتباه صدا زده شوند٫نباید اجرای script ها ادامه پیدا کند.

________________________________________________________

کار کردن با فایل درphp

تابع fopen( ) برای باز کردن فایل ها در php مورد استفاده قرار می گیرد.

باز کردن یک فایل

تابع fopen( ) برای باز کردن فایل ها در php مورد استفاده قرار می گیرد.

پارامتر اول این تابع شامل نام فایلی است که می خواهیم باز شود و پارامتر دوم مشخص می کند که فایل درچه حالتی باز شود:

<html>
<body>
<?php
$file=fopen("welcome.txt","r");
?>
</body>
</html>

فایل ممکن است در یکی از حالات زیر باز شود:

حالت ها

توضیح

r

فقط خواندنی.از ابتدای فایل آغاز می شود

r+

خواندنی/نوشتنی. از ابتدای فایل آغاز می شود

w

فقط نوشتنی. فایل را باز و محتویات آن را پاک می کند;یا اگر فایلی وجود نداشت آن را ایجاد می کند

w+

خواندنی/نوشتنی. . فایل را باز و محتویات آن را پاک می کند;یا اگر فایلی وجود نداشت آن را ایجاد می کند

a

افزودن(الحاق). فایل را باز و در انتهای آن می نویسد; یا اگر فایلی وجود نداشت آن را ایجاد می کند

a+

خواندنی/افزودنی.محتویات فایل را با نوشتن در انتهای آن حفظ می کند

x

فقط نوشتنی. یک فایل جدید ایجاد می کند.اگر فایل درحال حاضر وجود داشته باشد false و یک خطا برمیگرداند

x+

خواندنی/نوشتنی. یک فایل جدید ایجاد می کند. اگر فایل درحال حاضر وجود داشته باشد false و یک خطا برمیگرداند

نکته:اگر تابع fopen( ) قادر به باز کردن فایل مشخص شده نباشد٫ 0 (false) را برمی گرداند.

مثال

در مثال زیر اگر تابع fopen( ) قادر به باز کردن فایل مشخص شده نباشد یک پیغام تولید می کند:

<html>
<body>
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");

?>
</body>
</html>

بستن یک فایل

تابع fclose( ) برای بستن یک فایل باز اسنفاده می شود:

<?php
$file = fopen("test.txt","r");
//some code to be executed
fclose($file);
?>

بررسی (check) کردن پایان فایل

تابع feof( ) بررسی می کند که آیا به پایان فایل (eof) رسیده ایم یا نه.

تابع feof( ) برای ایجاد حلقه در داده های با طول نامشخص مناسب است.

نکته:شما نمی توانید از فایل های در حالت w٫a و x بخوانید!

if (feof($file)) echo "End of file";

خواندن خط به خط یک فایل

تابع fgets( ) برای خواندن یک خط از قایل مورد استفاده قرار می گیرد.

نکته: پس از یک فراخوانی به این تابع اشاره گر فایل به خط بعد جابه جا شده است.

مثال

مثال زیریک فایل را تا پایان فایل خط به خط می خواند:

<?php
$file = fopen("welcome.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
  {
  echo fgets($file). "<br />";
  }
fclose($file);
?>

خواندن کاراکتر به کاراکتر یک فایل

تابع fgetc( ) برای خواندن یک کاراکتر تنها از فایل مورد استفاده قرار می گیرد.

نکته: پس از یک فراخوانی به این تابع اشاره گر فایل به کاراکتر بعد جابه جا شده است.

مثال

مثال زیریک فایل را تا پایان فایل کاراکتر به کاراکتر می خواند:

<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
while (!feof($file)) 
  { 
  echo fgetc($file); 
  }
fclose($file);
?>

مرجع سیستم فایل (filesystem) در php

برای مرجع کامل توابع filesystem در php به بخش مرجع سیستم فایل (filesystem) مراجعه کنید.

________________________________________________________

ارسال فایل در php

با php٫ امکان ارسال فایل ها به سرور وجود دارد.

ایجاد یک فرم ارسال فایل

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

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

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

به موارد زیر در مورد فرم HTML بالا توجه داشته باشید:

· خاصیت enctype در تگ <form> مشخص می کند که چه نوع محتوایی هنام ارائه ی فرم استفاده شود."multipart / form-data" هنگامی که یک فرم داده های دودویی ٫مثل محتوای یک فایل را برای ارسال شدن نیاز دارد ٫مورد استفاده قرار می گیرد

· خاصیت type="file" در تگ <input> مشخص می کند که ورودی باید به عنوان یک فایل پردازش شود.برای مثال٫وقتی در یک مرورگر به نمایش درمی آید ٫یک دکمه ی مرور در کنار فیلد ورودی خواهد بود

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

ایجاد یک script ارسالی

فایل "upload_file.php" شامل کد برای ارسال یک فایل است:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
  }
?>

با استفاده از آرایه ی سراسری (global) $_FILES شما می توانید فایل ها از کامپیوتر client به یک سرور دور ارسال کنید.

پارامتر اول نام ورودی فرم است و شاخص دوم می تواند هم "نامname " و هم "نوعtype "٫ "اندازهsize "٫"نام موقتtmp_name " یا "خطاerror " باشد.مانند این:

· $_FILES["file"]["name"] – نام تابع ارسالی

· $_FILES["file"]["type"] – نوع تابع ارسالی

· $_FILES["file"]["size"] –اندازه فایل ارسالی با واحد بایت

· $_FILES["file"]["tmp_name"] – نام کوپی موقت از فایل که روی سرور ذخیره شده

· $_FILES["file"]["error"] –کد خطا که از ارسال فایل به وجود آمده

این یک راه بسیار ساده برای ارسال فایل هاست.به دلایل امنیتی٫ شما باید شروطی را روی آنچه که کاربر اجازه ی ارسال آن را  دارد اضافه کنید.

شروط  ارسال

دراین script چند شرط را به فایل ارسالی اضافه می کنیم.کاربر فقط قادر است فایل های .jpg یا .gif را ارسال کند و اندازه ی فایل باید کمتر از 20 kb باشد :

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }
?>

نکته:برای اینکه internet explorer(I E) فایل های تحل را بشناسد نوع باید pjpg باشد و برای FireFox باید jpeg باشد.

ذخیره فایل های ارسالی

مثال های بالا یک کوپی موقت از فایل های ارسال شده در پوشه ی موقت php روی سرور ایجاد می کنند.

فایل های کوپی شده ی موقت وقتی که script به پایان می رسد٫از بین می روند.برای ذخیره ی فایل های ارسال شده ٫باید آن ها را به یک مکان متفاوت کوپی کنیم.

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

Script بالا بررسی می کند ببیند هنوز فایل وجود دارد٫اگر موجود نباشد٫ آن را به پوشه مشخص شده کوپی می کند.

نکته: این مثال فایل را در یگ پوشه ی جدید به نام "upload" ذخیره می کند.

________________________________________________________

Cookie ها در php

یک cookie اغلب برای شناسایی یک کاربر استفاده می شود.

Cookie چیست؟

یک cookie اغلب برای شناسایی یک کاربر استفاده می شود.cookie یک فایل کوچک است که سرور آن را درون کامپیوتر کاربر قرار می دهد.هر بار که همان کامپیوتر یک صفحه را با یک مرورگر درخواست می کند٫ سرور cookie را هم می فرستد. با php ٫ شما می توانید هم مقادیر cookie را بسازید و هم بازیابی کنید.

چگونه یک cookie ایجاد کنیم؟

تابع setcookie( ) برای ایجاد cookie استفاده می شود.

نکته: تابع setcookie( ) باید قبل از تگ <html> قرار گیرد.

نحو

setcookie(name, value, expire, path, domain);

مثال

در مثال زیر٫ یک cookie با نام "user" ایجاد می کنیم و مقدار"Alex Porter" را به آن اختصاص می دهیم. ما همچنین مشخص می کنیم که cookie پس از یک ساعت از بین برود:

<?php 
setcookie("user", "Alex Porter", time()+3600);
?>
<html>
<body>
</body>
</html>

نکته: مقدار cookie به طور خودکار هنگام ارسال cookie به رمز URL در آورده می شود و به طورخودکار موقع دریافت رمزگشایی می شود (برای پیشگیری از به رمز URL در آمدن (URLencoding) ٫ از setrawcookie( ) استفاده کنید.

چگونه مقدار یک cookie را بازیابی کنیم؟

متغیر $_COOKIE در php برای بازیابی مقدار یک cookie مورد استفاده قرار می گیرد.

در مثال زیر٫ مقدار cookie با نام "user" را بازیابی می کنیم و بر روی صفحه نمایش می دهیم:

<?php

// Print a cookie

echo $_COOKIE["user"];
// A way to view all cookies  
print_r($_COOKIE);
?>

در مثال زیر ما تابع isset( ) را برای فهمیدن اینکه آیا cookie تنظیم شده است یا نه استفاده می کنیم:

<html>
<body>
<?php
if (isset($_COOKIE["user"]))
  echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
  echo "Welcome guest!<br />";
?>
</body>
</html>

چگونه یک cookie را حذف کنیم؟

هنگامی که یک cookie را حذف می کنید باید مطمئن شوید که تاریخ انقضاء آن به پایان رسیده است.

مثال حذف:

<?php 
// set the expiration date to one hour ago

setcookie("user", "", time()-3600);
?>

اگر یک مرورگر cookieها را پشتیبانی نکند چه باید کرد؟

اگر درخواست شما با مرورگرهایی سروکار داشت که cookieها را پشتیبانی نمی کردند٫ شما باید روشهای دیگری رابرای انتقال اطلاعات از یک صفحه به صفحه ی دیگر در درخواست هایتان استفاده کنید.یک روش انتقال اطلاعات از طریق فرم هاست (فرم ها و ورودی کاربر قبل از این توضیح داده شده اند).

فرم زیر وقتی که کاربر دکمه ی "submit" را کلیک می کند٫ورودی کاربر را به "welcome.php" انتقال می دهد:

<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>

مقادیر در فایل "welcome.php" را به این شکل بازیابی کنید:

<html>
<body>
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>
________________________________________________________

جلسه هادرphp

یک متغیر جلسه در php برای ذخیره اطلاعات در مورد یا تغییر تنظیمات برای یک جلسه کاربر استفاده می شود.متغیرهای جلسه اطلاعات یک کاربر تک را نگه می دارند, و برای همه ی صفحات در یک درخواست موجود می باشند.

متغیرهای جلسه در php

وقتی که شما با یک درخواست نامه(application) کار می کنید , آن را باز می کنید و چند تغییر روی آن انجام می دهید و سپس ان را می بندید.این بسیار شبیه به یک جلسه است.کامپیوتر می داند که شما چه کسی هستید.می داند شما کی درخواست را اغاز وکی آن را به اتمام می رسانید.اما در اینترنت یک مشکل وجود دارد:سرور وبنمی داند که شما که هستید و چه می کنید چون آدرس HTTP حالت(state) را حمایت نمی کند.

یک جلسه این مشکل را با اجازه دادن به شما برای ذخیره کردن اطلاعات کاربر بر روی سرور برای استفاده های بعدی (مثل, نام کاربری ,مواد خرید و غیره) حل می کند.اما اطلاعات جلسه موقتی اند و پس از اینکه کاربر وب سایت را رها کند اطلاعات حذف خواهند شد.اگر نیاز به ذخیره سازی دائمی دارید باید داده ها را در یک پایگاه داده(database) ذخیره کنید.

جلسه ها با ایجاد یک شماره ID منحصر به فرد (UID) برای هربیننده و ذخیره متغیرها براساس این UID کار می کنند.UID هم در cookie ذخیره می شود و هم در URL پخش می شود.

آغاز یک جلسه در php

قبل از اینکه شما بتوانید اطلاعات کاربری را در جلسه تان ذخیره کنید, باید ابتدا یک جلسه ایجاد کنید.

نکته:تابع session_start( ) باید قبل از تگ <html> بیاید:

<?php session_start(); ?>
<html>
<body>
</body>
</html>

کد بالا جلسه کاربر را با سرور ثبت می کند,به شما اجازه می دهد که ذخیره ی اطلاعات کاربر را آغازکنید و یک UID برای جلسه کاربرتعیین کنید.

ذخیره ی یک متغیر جلسه

روش صحیح برای ذخیره و بازیابی متغیرهای جلسه استفاده از متغیر$_SESSION است:

<?php
session_start();
// store session data
$_SESSION['views']=1;
?>
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
</body>
</html>

خروجی:

Pageviews=1

در مثال زیر,ما یک شمارنده ی نمایش صفحه ی ساده ایجاد می کنیم.تابع isset( ) بررسی می کند ببیند متغیر"view" درحال حاضر تنظیم شده یا نه.اگر "view" تنظیم شده باشد, ما میتوانیم شمارنده مان را افزایش دهیم.اگر "view" موجود نباشد,ما متغیر "view" را ایجاد و مقدار 1 را برای آن قرار می دهیم:

<?php



session_start();
if(isset($_SESSION['views']))

  $_SESSION['views']=$_SESSION['views']+1;



else

  $_SESSION['views']=1;

echo "Views=". $_SESSION['views'];

?>
آخرین بروز رسانی در چهارشنبه, 02 تیر 1389 ساعت 14:43
 
آموزش PHP-قسمت اول مشاهده در قالب PDF چاپ فرستادن به ایمیل
نوشته شده توسط Administrator   
چهارشنبه, 02 تیر 1389 ساعت 14:33

Php یک زبان scriptنویسی طرف سرور قدرتمند برای ایجاد وب سایت های جذاب و پویا است.

Php تابع منطقی کارآمد٫ رایگان و پرکاربردی برای رقبایی چون ASP مایکروسافت است. برای توسعه ی وب کاملا مناسب است و می تواند مستقیما درون کدهای HTML جای بگیرد.

نحو php بسیار شبیه به Cو Perl است.php اغلب با آپاچی (سرویس دهنده وب) برروی سیستم عامل های مختلف استفاده می شود.php همچنین ISAPI را پشتیبانی کرده و می تواند همراه با IIS مایکروسافت در ویندوز استفاده شود.

___________________________________________________________

معرفی php

یک فایل php ممکن است شامل متن٫ تگ های HTML و scriptها باشد.scriptها در یک فایل php روی سرور اجرا می شوند.

هرآنچه که نیاز است شما درحال حاضر بدانید

قبل از ادامه کار شما باید مفاهیم پایه ای زیر را بدانید:

· HTML/XHTML

· کمی راجع به script نویسی

اگر می خواهید ابتدا اطلاعاتی راجع به این موضوعات مطالعه کنید٫اموزش های مربوطه را در ابتدای کتاب  بیا بید.

PHPچیست؟

· Php اختصار کلمات پیش پردازش فرامتن است

· Php یک زبان script نویسی طرف سرور است٫مثل ASP

· Scriptهای php روی سرور اجرا می شوند

· Php پایگاه داده های زیاذی را پشتیبانی می کند(MYSQL٫informix٫Oracle٫ Sybase٫Solid٫PostgerSQL٫Generic ODBC و غیره)

· Phpیک نرم افزار منبع نما است (OSS)

· Php قابل دانلود و استفاده ی رایگان است

یک فایل php چیست؟

· فایل php ممکن است شامل متن٫ تگ های HTML و scriptها باشد

· فایل های php به عنوان یک HTMLساده به مرورگر بازگردانده می شوند

· فایل های php دارای پسوند های ".phtml",".php3",".php" هستند

MYSQLچیست؟

· MYSQL یک سرویس دهنده ی پایگاه داده است

· MYSQL برای هردو دخواست های کوچک و بزرگ مناسب است

· MYSQL SQL استاندارد را پشتیبانی می کند

· MYSQLروی یک تعداد از پایگاه ها (platforms) کامپایل می شود

· MYSQLقابل دانلود و استفاده رایگان است

PHP+MYSQL

· Phpترکیب شده با MYSQL٫ platform متقاطع هستند(یعنی شما می توانید آن ها را در ویندوز توسعه داده و در یک platform یونیکس به کار ببرید)

چرا php؟

· Phpبرروی platformهای متفاوت اجرا می شود(ویندوز٫ لینوکس٫یونیکس و غیره)

· Php با تمام سرویس دهنده هایی که امروزه مورد استفاده قرار میگیرند٫سازگار است(Apache,IISوغیره)

· Php به صورت رایگان در منبع PHP برای دانلود قرار داردwww.php.net

· Php به آسانی قابل یادگیری است و به روشی مناسب روی طرف سرور اجرا می شود

از کجا باید شروع کرد؟

· یک سرویس دهنده ی آپاچی را روی سیستم لینوکس یا ویندوز نصب کنید

· Php را روی سیستم لینوکس یا ویندوز نصب کنید

· MYSQL را روی سیستم لینوکس یا ویندوز نصب کنید

________________________________________________________

نصب php

چه نیاز دارید؟

این آموزش طریقه ی نصب php٫MYSQL ویا Apache را توضیح نخواهد داد.

اگر سرور شما php را پشتیبانی می کند نیاز نیست که شما کاری انجام دهید!-لازم نیست شما چیزی را کامپایل یا ابزار اضافی را نصب نمایید- فقط چند فایل php در فهرست وب خود ایجاد کنید و سرور آن ها را برایتان تجزیه خواهد کرد.اغلب میزبانان وب php را پشتیبانب می کنند.

اما٫اگر سرورتان php را پشتیبانی نمی کند ٫شما باید php را نصب کنید.

______________________________________________________

نحو php

شما نمی توانید کد منبع php را با انتخاب "view source" در مرورگر مشاهده کنید-شما فقط خروجی فایل php را که یک HTML ساده است  می بینید.این بدین دلیل است که scriptها قبل از اینکه نتیجه به مرورگر بازگردانده شود٫بر روی سرور اجرا می شوند.

نحو اساسی php

یک بلاک scriptنویسی php همیشه با <?php شروع و با ?>به پایان می رسد. یک بلاک script نویسی php می تواند در هر کجای سند قرار گیرد.

در سرورهایی که قادر به پشتیبانی مختصرنویسی(shorthand) هستند٫می توانید بلاک script نویسی را با ؟> شروع و با <؟ به پایان برسانید.

اگرچه٫برای قابلیت حداکثر ٫ما پیشنهاد می کنیم که فرم استاندارد (<?php) را به جای فرم مختصرنویسی استفاده کنید.

<?php
?>

یک فایل php معمولا شامل تگ های HTML است٫درست مثل یک فایل HTML و بعضی کد برنامه نویسی php.

در زیر٫یک مثال ساده ی php داریم که متن "Hello World" را به مرورگر ارسال می کند:

<html>
<body>
<?php
echo "Hello World";
?>
</body>
</html>

هر خط کد در php باید با یک سمی کولن (; ) به پایان برسد.سمی کولن یک جداکننده است و برای اینکه مجموعه ای از دستورات با بقیه تمیز داده شوند استفاده می شود.

دو دستور اصلی برای نمایش متن در php وجود دارد: echo و print. در مثال بالا echo را برای نمایش متن "Hello World" استفاده کرده ایم.

توضیات در php

در php٫ برای یک توضیح یک خطی از //  و برای ایجاد یک بلاک توضیح بزرگ از */ و /* استفاده می کنیم.

<html>
<body>
<?php
//This is a comment
/*
This is
a comment
block
*/
?>
</body>
</html>
___________________________________________________________

متغیرها در php

متغیرها برای ذخیره سازی مقادیر از قبیل اعداد٫رشته ها یا نتایج توابع استفاده می شوند٫بطوریکه آن ها می توانند بارها در script مورد استفاده قرار گیرند.

متغیرها در php

متغیرها برای ذخیره ی مقادیری مانند رشته های متنی٫اعداد یا آرایه ها مورد استفاده قرار می گیرند.

زمانی که یک متغیر مقداردهی می شود٫می تواند به کرات درscript تان به کار رود.

تمام متغیرهای درون php با علامت $ شروع می شوند.

روش صحیح مقداردهی متغیر در php:

$var_name = value;

برنامه نویسان تازه (کار) php اغلب فراموش می کنند که علامت $ را در ابتدای متغیر بگذارند.در اینصورت دستور اصلا کار نخواهد کرد.

بیایید یک متغیر رشته ای و یک متغیر عددی ایجاد کنیم:

<?php
$txt = "Hello World!";
$number = 16;
?>

Php یک زبان نرم تایپ است (زیاد اجبار به توجه به قاعده نیست)

در php نیاز نیست که متغیر قبل از استفاده ٫تعریف یا اعلان شود.

در مثال بالا٫می بینید که نیاز ندارید به php بگویید که متغیر از چه نوع داده ایست.

Php به طور اتوماتیک (خودکار) متغیر را به نوع داده ی صحیح تبدیل می کند٫بسته به اینکه چه طور مقداردهی شده اند.

در یک زبان بزنامه نویسی شدیدا تایپی٫ شما باید نوع و نام متغیر را قبل از به کار بردن آن اعلان(تعریف) کنید.

در php متغیر زمانی که شما آن را استفاده می کنید به طور خودکار تعریف می شود.

قوانین نامگذاری متغیرها

  • نام متغیر باید با یک حرف یا زیر خط (underscore or underline) "_" شروع شود.
  • نام متغیر تنها می تواند شامل کاراکترهای الفبا-عددی و زیرخط باشد( a-Z,0-9, _)
  • نام متغیر نباید حاوی خط فاصله(space) باشد.اگر نام یک متغیر بیش از یک کلمه است٫ باید با زیرخط ($my_string) ٫یا با نوشتن حروف بزرگ ($myString) جدا شوند.

___________________________________________________________

رشته در php

یک متغیر رشته ای برای ذخیره و تغییر یک تکه متن استفاده می شود.

رشته ها در php

متغیرهای رشته ای برای مقادیری که شامل رشته های کاراکتری هستند استفاده می شوند.

در این آموزش ما می خواهیم نگاهی داشته باشیم به بعضی توابع و عملگرها که برای تغییر رشته ها در php مورد استفاده قرار می گیرند.

پس از ایجاد یک رشته می توانیم آن را تغییر دهیم . یک رشته می تواند مستقیما در یک تابع به کار برده شود یا در یک متغیر ذخیره شود.

در زیر٫اسکریپت php رشته ی "Hello World" را به یک متغیر رشته ای که $txt نامیده شده است اختصاص می دهد:

<?php
$txt="Hello World";
echo $txt;
?>

خروجی کد بالا چنین خواهد بود:

Hello World
اکنون٫بیایید تعدادی تابع و عملگر متفاوت را برای تغییر رشته مان به کا گیریم.
 
عملگر الحاق
 
تنها یک عملگر رشته ای در php وجود دارد.
عملگر الحاق (.) برای قرار دادن دو مقدار رشته ای در کنار هم استفاده می شود.
برای الحاق با متصل کردن دو متغیر به یکدیگر٫ عملگر نقطه( . ) را استفاده کنید:
<?php
$txt1="Hello World";
$txt2="1234";
echo $txt1 . " " . $txt2;
?>
خروجی کد بالا چنین خواهد بود:
Hello World 1234
اگر نگاهی به کد بالا بیندازید می بینید که عملگر الحاق را دوبار استفاده کردیم.به این دلیل که باید سومین رشته را وارد می کردیم.
بین دو متغیر رشته ای ما رشته ای با یک کاراکتر تنها اضافه کردیم٫ یک فضای خالی ٫ برای جدا کردن دو متغیر.
 
به کارگیری تابع strlen() 
 
تابع strlen() برای پیدا کردن طول یک رشته استفاده می شود.
بیایید طول رشته مان "!Hello World" را پیدا کنیم:
<?php
echo strlen("Hello world!");
?>
خروجی کد بالا چنین خواهد بود:
12
طول یک رشته اغلب در حلقه ها یا دیگر توابع استفاده می شود٫ زمانی که مهم است بدانیم رشته کی به پایان می رسد.(برای مثال٫ما می خواهیم حلقه را پس از آخرین کاراکتر رشته متوقف کنیم)
 
به کارگیری تابع strops( ) 
 
تابع strpos( ) برای جستجوی یک رشته یا کاراکتر در یک رشتهی دیگر استفاده می شود.
اگر مطابقتی در رشته یافت شد٫ این تابع مکان اولین مطابقت را برمیگرداند.اگر مطابقتی یافت نشد ٫تابع FALSE را برمی گرداند.
ببینیم می توانیم رشتهی "world" را در رشته مان پیدا کنیم:
<?php
echo strpos("Hello world!","world");
?>
خروجی کد بالا چنین خواهد بود:
 
6
همان طور که می بینید مکان رشته ی "world" در رشته ی ما مکان ششم است.دلیل اینکه جواب 6 است نه 7 ٫این است که مکان اول در رشته 0 است نه 1.
 
منبع کامل رشته در php
 
برای منبع کامل همه ی توابع رشته ای ٫این بخش را بخوانید complete PHP String Reference.
این بخش شامل توضیح مختصر و مثال هایی از استفاده ی هر تابع است!
___________________________________________________________
عملگرها در php
 
عملگرها برای انجام عملیات بر روی مقادیر استفاده می شوند.
عملگرهای php
این بخش عملگرهای مختلف مورد استفاده در php را فهرست می کند.
عملگرهای حسابی

عملگر

توضیح

مثال

نتیجه

+

جمع

x=2
x+2

4

-

تفریق

x=2
5-x

3

*

ضرب

x=4
x*5

20

/

تقسیم

15/5
5/2

3
2.5

%

قدر مطلق (باقیمانده ی تقسیم )

5%2
10%8
10%2

1
2
0

++

افزایش

x=5
x++

x=6

--

کاهش

x=5
x--

x=4

عملگرهای واگذاری

عملگر

مثال

برابر است با

=

x=y

x=y

+=

x+=y

x=x+y

-=

x-=y

x=x-y

*=

x*=y

x=x*y

/=

x/=y

x=x/y

.=

x.=y

x=x.y

%=

x%=y

x=x%y

عملگرهای مقایسه ای

عملگر

توضیح

مثال

==

برابر است با

5==8 نتیجه می دهد false

!=

مخالف است با

5!=8 نتیجه می دهد true

>

بزرگتر است از

5>8 نتیجه می دهد false

<

کوچکتر است از

5<8 نتیجه می دهد true

>=

بزرگتر مساوی است با

5>=8 نتیجه می دهد false

<=

کوچکتر مساوی است با

5<=8 نتیجه می دهد true

عملگرهای منطقی

عملگر

توضیح

مثال

&&

and

x=6
y=3

(x < 10 && y > 1) نتیجه می دهد true

||

or

x=6
y=3

(x==5 || y==5) نتیجه می دهد false

!

not

x=6
y=3

!(x==y) نتیجه می دهد true

 

_________________________________________

دستور if…Else در php

دستورات If,elseif وelse در php برای انجام کارهای متفاوت بسته به شرایط متفاوت استفاده می شوند.

عبارات شرطی

اغلب اوقات وقتی که شمت کد می نویسید٫می توانید کارهای متفاوتی را برای تصمیم های متفاوت انجام دهید.

شما می توانید عبارات شرطی را برای انجام ای کارها در کد تان استفاده کنید.

  • عبارت If…else – اگر می خواهید مجموعه ای از کدها را وقتی که یک شرط برقرار و شرط if دیگر برقرار نیست اجرا کنید از این if استفاده کنید.
  • عبارت elseif – همراه با عبارت if…else برای اجرای یک مجموعه کدبا این شرط که یکی از چندین شرط برقرار باشند.

عبارت if…else

اگر می خواهید مجموعه ای از کدها را که یک شرط برقرار و شرط if دیگر برقرار نیست اجرا کنید از این if استفاده کنید.

نحو

if (condition)
  code to be executed if condition is true;
else
  code to be executed if condition is false;

مثال

مثال زیر "Have a nice weekend!" را نمایش خواهد داد اگر روز فعلی (امروز) جمعه باشد٫درغیرایتصورت "Have a nice day!" را نمایش می دهد:

<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
  echo "Have a nice weekend!";     
else
  echo "Have a nice day!"; 
?>
</body>
</html>

اگر در یک شرط که یا true و یا false باشد٫بیش از یک خط باید اجرا شود ٫این خطوط باید بین دو علامت آکولاد { } قرار گیرند:

<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
  {
  echo "Hello!<br />"; 
  echo "Have a nice weekend!";
  echo "See you on Monday!";
  }
?>
</body>
</html>

عبارت Elseif

اگر می خواهید یک مجموعه کدبا این شرط که یکی از چندین شرط برقرار باشند را اجرا کنید از عبارت elseif استفاده کنید.

نحو

if (condition)
  code to be executed if condition is true;
elseif (condition)
  code to be executed if condition is true;
else
  code to be executed if condition is false;

مثال

مثال زیر "Have a nice weekend!" را نمایش خواهد داد اگر روز فعلی (امروز) جمعه باشد٫و "Have a nice Sunday!" را نمایش خواهد داد اگر امروز یکشنبه باشد. درغیرایتصورت "Have a nice day!" را نمایش می دهد:

<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
  echo "Have a nice weekend!"; 
elseif ($d=="Sun")
  echo "Have a nice Sunday!"; 
else
  echo "Have a nice day!"; 
?>
</body>
</html>
___________________________________________________________

عبارت Switch در php

عبارت switch در php برای انجام یکی از چندین عمل متفاوت بسته به یکی از چندین شرط متفاوت استفاده می شود.

عبارت switch

اگر می خواهید یکی از چندین بلاک کد را برای اجرا انتخاب کنید٫ عبارت switch را به کار ببرید.

عبارت switch برای پرهیز از بلاک های طولانی کد if…elseif..else استفاده می شود.

نحو

switch (expression)
{
case label1:
  code to be executed if expression = label1;
  break;  
case label2:
  code to be executed if expression = label2;
  break;
default:
  code to be executed
  if expression is different 
  from both label1 and label2;
}

مثال

چگونگی عملکرد:

  • یک عبارت خاص (اغلب یک متغیر) یکبار ارزیابی می شود
  • مقدار عبارت با مقادیر هر case در ساختار مقایسه می شود
  • اگر مطابقتی وجود داشته باشد٫ کد وابسته به آن case اجرا می شود
  • بعد از اجرای کد٫break برای متوقف کردن اجرای case بعدی استفاده می شود
  • عبارت پیشفرض(default) برای وقتی است که هیچ کدام از caseها برقرار نباشند
<html>
<body>
<?php
switch ($x)
{
case 1:
  echo "Number 1";
  break;
case 2:
  echo "Number 2";
  break;
case 3:
  echo "Number 3";
  break;
default:
  echo "No number between 1 and 3";
}
?>
</body>
</html>
___________________________________________________________

آرایه ها درphp

یک آرایه می تواند یک یا بیش از یک مقدار را در نام یک متغیر خاص ذخیره کند.

آرایه چیست؟

درحین کار با php٫ به زودی یا دیرتر٫ممکن است بخواهید تعداد زیادی  متغیرمشابه ایجاد کنید.

به جای ایجاد متغیرهای تکراری زیاد ٫می توانید داده را به عنوان یک عنصر در آرایه ذخیره کنید.

هر عنصر در آرایه شماره ی اندیس خود را دارد برای اینکه بتواند به آسانی در دسترس باشد.

سه نوع داده ی متفاوت وجود دارد:

· آرایه عددی- یک آرایه با کلید اندیس عددی

· آرایه انجمنی- یک آرایه که در آن هر کلید اندیس با یک مقدار پیوسته شده است

· آرایه چندبعدی- یک آرایه شامل یک یا بیش از یک آرایه

آرایه های عددی

یک آرایه عددی هر عنصر را با یک کلید اندیس عددی ذخیره می کند.

راه های مختلفی برای ایجاد یک آرایه عددی وجود دارد.

مثال 1

در این مثال اندیس آرایه به طور خودکار پیوند داده شده است:

$names = array("Peter","Quagmire","Joe");

مثال2

در این مثال ما به طور دستی کلید اندیس را پیوست داده ایم:

$names[0] = "Peter";
$names[1] = "Quagmire";
$names[2] = "Joe";

کلیدهای اندیس می توانند دریک script هم باشند:

<?php
$names[0] = "Peter";
$names[1] = "Quagmire";
$names[2] = "Joe";
echo $names[1] . " and " . $names[2] . 
" are ". $names[0] . "'s neighbors";
?>

خروجی کد بالا چنین خواهد بود:

Quagmire and Joe are Peter's neighbors

آرایه های انجمنی

دریک آرایه ی انجمنی٫ هر کلید اندیس با یک مقدار پیوسته شده است.

موقع ذخیره ی داده با مقادیر نامگذاری شده مشخص ٫یک آرایه عددی همیشه بهترین راه برای انجام این کار نیست.

با آرایه های انجمنی می توانیم مقادیر را به عنوان کلید استفاده کرده و مقادیر را به آن ها پیوند دهیم.

مثال1

در این مثال می خواهیم سنین را به اشخاص مختلف پیوند دهیم:

$ages = array("Peter"=>32, "Quagmire"=>30, "Joe"=>34);

مثال2

ای مثال مشابه مثال1 است٫اما راه متفاوتی را برای ایجاد آرایه نشان می دهد:

$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";

کلید اندیس می تواند در آرایه هم استفاده شود:

<?php
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";
echo "Peter is " . $ages['Peter'] . " years old.";
?>

خروجی کد بالا چنین خواهد بود:

Peter is 32 years old.

آرایه های چندبعدی

در یک آرایه ی چندبعدی٫ هر عنصر در آرایه ی اصلی هم می تواند یک آرایه باشد.

و هر عنصر در زیرآرایه می تواند یک آرایه باشد و غیره.

مثال

در این مثال ما یک آرایه ی چندبعدی ایجاد می کنیم٫ با پیوند خودکار کلید اندیس:

$families = array
(
  "Griffin"=>array
  (
  "Peter",
  "Lois",
  "Megan"
  ),
  "Quagmire"=>array
  (
  "Glenn"
  ),
  "Brown"=>array
  (
  "Cleveland",
  "Loretta",
  "Junior"
  )
);

اگر خروجی آرایه بالا را چاپ کنیم به این شکل خواهد بود:

Array
(
[Griffin] => Array
  (
  [0] => Peter
  [1] => Lois
  [2] => Megan
  )
[Quagmire] => Array
  (
  [0] => Glenn
  )
[Brown] => Array
  (
  [0] => Cleveland
  [1] => Loretta
  [2] => Junior
  )
) 

مثال2

بیایید نمایش یک مقدار تک از آرایه ی بالا را امتحان کنیم:

echo "Is " . $families['Griffin'][2] . 
" a part of the Griffin family?";

خروجی کد بالا چنین خواهد بود:

Is Megan a part of the Griffin family?

________________________________________________________

ایجاد حلقه در php

عبارت های حلقه ای در php برای اجرای بلاک کد یکسان به تعداد مشخص استفاده می شوند.

ایجاد حلقه

اغلب اوقات وقتی که شما کدی را می نویسید ٫ می خواهید که بلاک کد یکسانی به دفعات اجرا شود.برای انجام این کار شما می توانید از عبارت های حلقه ای استفاده کنید.

در php عبارت های حلقه ای زیروجود دارند:

  • While- بلاک کد را تا زمانی که شرط تعیین شده true باشد تکرار می کند
  • Do…while- بلاک کد را یکبار اجرا می کند ٫سپس حلقه را به شرط درستی شرط تکرار می کند.
  • For- به تعداد مشخص بلاک کد را تکرار می کند
  • Foreach- بلاک کد را برای هر عنصر یک آرایه تکرار می کند

عبارت while

عبارت while یک بلاک کد را تا زمانی که شرط تعیین شده true باشد تکرار می کند.

نحو

while (condition)
code to be executed;

مثال

مثال زیر حلقه ای را نشان می دهد که اجرای حلقه را تازمانی که متغیر I کوچکتر مساوی 5 است ادامه می دهد.هر دفعه که حلقه اجرا می شود I یک واحد افزایش می یابد:

<html>
<body>
<?php 
$i=1;
while($i<=5)
  {
  echo "The number is " . $i . "<br />";
  $i++;
  }
?>
</body>
</html>

عبارت do…while

عبارت do…while بلاک کد را حداقل یکبار اجرا می کند-سپس حلقه را تا زمانی که شرط true باشد تکرار می کند.

نحو

do
{
code to be executed;
}
while (condition);

مثال