PHP برای برنامه نویسان ASP.NET – قسمت هشتم

قسمت اولقسمت دوم قسمت سوم قسمت چهارم قسمت پنجمقسمت ششم قسمت هفتم

شیء گرایی در PHP

کلاس در PHP مجموعه ای از متغیرها و توابع است که سینتاکس نوشتن آن برای شما برنامه نویسان دات نت بسیار آشناست. در PHP برخلاف زبان های تحت دات نت شما نمی توانید یک کلاس را در چند فایل جداگانه تعریف کنید، شما باید کلاس خود را در یک فایل و در یک بلاک PHP تعریف کنید. با شروع نسخه 5، مدل شیء گرایی PHP به کلی تغییر کرد و کارایی آن در زمینه شیء گرایی بالاتر رفت و ویژگی های جدید به آن اضافه شد. به هر حال در این مطلب کوتاه که مخصوص برنامه نویسان ASP.NET نوشته شده، ما قصد داریم بدون توضیح اصطلاحات شیء گرایی یا توضیح مفاهیم آن، شما را با نحوه نوشتن یک کلاس در PHP آشنا کنیم. بهتر است با یک مثال از سی شارپ که برای شما قابل لمس باشد شروع کنیم :

class Human
{
private string _name;
public string Name;
public string Family;
public int Height;
public int Weight;
public int Age;

public Human()
{
Console.WriteLine("a Human Created.");
}
}

class Student: Human
{
public long ID { get; set; }
public string Grade;

public Student()
{
Console.WriteLine("a Student Created.");
}

public void DisplayInformations()
{
Console.WriteLine(this.ID.ToString());
Console.WriteLine(this.Name);
Console.WriteLine(this.Family);
Console.WriteLine(this.Age);
Console.WriteLine(this.Grade);
}

~Student()
{
Console.WriteLine("a Student Destroyed.");
}
}

اگر برنامه نویس سی شارپ باشید به راحتی منظور کدهای بالا را می فهمید. یک کلاس پایه به نام Human با چند فیلد و یک متد سازنده ساختیم، سپس یک کلاس به نام Student را از آن مشتق کردیم. کلاس فرزند نیز دارای چند فیلد، یک سازنده و یک متد برای چاپ مقادیر فیلدهایش است. حالا می خواهیم این دو کلاس را در PHP پیاده سازی کنیم.

<?php
class Human {
private $_name;
public $Name;
public $Family;
public $Height;
public $Weight;
public $Age;

function __construct() {
print "a Human Created.";
}
}

class Student extends Human {
public $ID;
public $Grade;

function __construct() {
parent::__construct();
print "a Student Created.";
}

function DisplayInformations() {
print $this->ID;
print $this->Name;
print $this->Family;
print $this->Age;
print $this->Grade;
}

function __destruct() {
print "a Student Destroyed.";
}
}
?>

همانطور که می بینید سینتاکس PHP برای تعریف یک کلاس شبیه به سی شارپ است. خب به هر حال هر دو از خانواده زبان C هستند! در PHP نیز شما می توانید از private, public و protected برای تعیین چگونگی دسترسی به متغیرها (فیلدها) و توابع استفاده کنید. هنگامی که هیچکدام از این ها را در خط تعریف متغیر یا تابع ذکر نکنید به صورت پیش فرض آن عضو به عنوان public در نظر گرفته خواهد شد. در PHP هر کلاس تشکیل شده از تعدادی متغیر و تابع و در صورت نیاز سازنده و مخرب. سازنده یا Constructor کلاس در سی شارپ متد همنام با خود کلاس است. همانطور که در مثال بالا مشاهده می کنید، هر دو کلاس متدی همنام با خودشان دارند که هنگام ساخته شدن در زمان اجرا صدا زده می شوند. در PHP نسخه های قبل از 5، تعریف سازنده کلاس به همین صورتی که در سی شارپ است، بود. در نسخه 5 شما باید تابعی به نام __construct() برای پیاده سازی سازنده کلاس تعریف کنید.

برای ارث بری از یک کلاس در PHP ازکلمه کلیدی extends به همان صورتی که در مثال مشاهده می کنید، استفاده می کنیم. این یعنی کلاس Student تمام خاصیت ها (در اینجا متغیرها) و توابع کلاس پدر خود یعنی کلاس Human را به علاوه متغیرها و توابعی که در بلاک خودش تعریف شده را دارد. برای اینکه هنگام ساخته شدن کلاس Student تابع سازنده کلاس پدرش Human نیز اجرا شود باید آن را به صورت parent::__construct() صدا بزنید. تابع مخرب در PHP نیز بوسیله نوشتن تابع __destruct() امکان پذیر است.

استفاده از کلاس

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

<?php
$objStudent = new Student();
$objStudent->Name = "Iman";
$objStudent->Family = "Nemati";
$objStudent->Age = "22";
$objStudent->DisplayInformations();
?>

هنگام new کردن یک کلاس، تابع __construct() آن کلاس اجرا می شود. برای دسترسی به اعضای public یک کلاس در PHP باید از عملگر <- بلافاصله پس از نام متغیر کلاس استفاده کنید.

اعضای Static

همانند سی شارپ، در PHP هم با نوشتن کلمه کلیدی static می توانید یک تابع یا یک متغیر را به عنوان عوض استاتیک معرفی کنید. تعریف یک متد یا یک خصوصیت به صورت استاتیک آن ها را بدون نیاز به ساخت یک نمونه از کلاس در خارج از کلاس، قابل دستیابی می کند. فقط برای استفاده از اعضای استاتیک یک کلاس به جای عملگر -> باید از عملگر :: استفاده کنید.

<?php
class Sample {
public static function StaticMethod() {
//Some Function
}
}

//
Sample::StaticMethod();
?>

در کدنویسی های معمولی PHP شاید نیازی به استفاده از کلاس ها پیدا نکنید اما برای حرفه ای تر شدن و بعدها برای استفاده از فریم ورک های PHP نیاز به داشتن دید شیء گرایی و نحوه تعریف و استفاده از کلاس ها خواهید داشت. خوشبختانه برنامه نویسان ASP.NET از نظر شیء گرایی دید نسبتاً مناسب و خوبی دارند، زیرا به صورت پیش فرض تمام برنامه های آن ها بر اساس کلاس ها و مفاهیم شیء گرایی توسعه داده می شوند. احتمالاً آموزش PHP برای برنامه نویسان ASP.NET را ادامه نخواهیم داد. از اول هم قرار نبود جلوتر از این برویم. نسخه PDF کامل تر این سری نوشته ها به زودی بر روی وبلاگ قرار خواهد گرفت. امیدوارم این نوشته ها برای شما مفید بوده باشند.

farasun.wordpress.com

مشترک فید فراسان شوید!

PHP برای برنامه نویسان ASP.NET – قسمت هفتم

قسمت اول قسمت دومقسمت سومقسمت چهارمقسمت پنجمقسمت ششم

در این قسمت با نحوه کار با دیتابیس در PHP آشنا خواهید شد. همانطور که پرکاربردترین RDBMS در نزد برنامه نویسان ASP.NET برنامه SQL Server مایکروسافت است، MySQL پرکاربردترین RDBMS در میان برنامه نویسان PHP است. در این سری آموزش ها ما نیز بر روی دسترسی به داده ها در MySQL تمرکز خواهیم داشت.

اتصال یه یک دیتابیس MySQL

قبل از هر کاری ابتدا شما باید یک ارتباط میان برنامه خود و MySQL ایجاد کنید. برای این کار PHP یک تابع به نام my_sql_connect دارد که نام سرور، نام کاربری و رمز عبور دیتابیس MySQL را از شما می گیرد و یک اتصال برای شما ایجاد می کند. اگر این تابع با موفقیت به دیتابیس مورد نظر شما وصل شود true و ر غیر این صورت false برمی گرداند. برخلاف اتصال به SQL Server در ASP.NET که با استفاده از کلاس های دات نت انجام می گیرد، اینجا در PHP با استفاده از این تابع و توابع دیگر می توان با یک دیتابیس MySQL کار کرد. به مثال زیر توجه کنید :

<?php
$link = mysql_connect(‹localhost›, ‹user›, ‹password›);
if (!$link) {
die(‹Could not connect: ‹ . mysql_error());
}
echo ‹Connected successfully›;
mysql_close($link);
?>

تابع mysql_connect در این مثال با استفاده از نام کاربری user و رمز عبور password به سرور localhost وصل می شود و نتیجه این اتصال را در متغیر link می ریزد. اگر این عمل موفیت آمیز باشد عبارت Connected successfully چاپ می شود، در غیر این صورت پیغام خطای خود MySQL را نمایش می دهد و به اجرای این اسکریپت خاتمه می دهد. در انتها نیز اگر اسکریپت با موفیت به MySQL وصل شده باشد، با تابع mysql_close اتصال را می بندیم. تابع die مانند تابع exit (در قسمت قبلی) یک پیغام را نمایش می دهد و اجرای ادامه اسکریپت را متوقف می کند.

البته تابع mysql_connect پارامترهای دیگری نیز دارد که ما به آن ها نمی پردازیم. همچنین شما می توانید این تابع را بدون ذکر هیچ پارامتری صدا بزنید که در این صورت از مقادیر ثابت پیش فرض موجود در فایل php.ini استفاده خواهد شد.

ایجاد یک دیتابیس بر روی MySQL

شما قبل از اینکه بخواهید از یک دیتابیس در برنامه خود استفاده کنید، ابتدا باید آن را ایجاد کنید. برای این کار می توانید از ابزارهایی مثل PhpMyAdmin استفاده کنید یا خودتان با استفاده از کدنویسی PHP دیتابیس MySQL خود را بسازید. در اینجا روش دوم که روش مناسب تری نیز هست را با یک مثال توضیح می دهم. لطفاً به مثال زیر توجه کنید :

<?php
$sql_create_db = ‹CREATE DATABSE test›;
$sql_create_table = ‹CREATE TABLE table1 (tbl_id INT PRIMBARY KEY, fname VARCHAR(100), lname VARCHAR(100))›;
$link = mysql_connect(‹localhost›,‹user›,‹password›);
if($link){
//Create Database
if(mysql_query($sql_create_db, $link))
echo «Database created.»;
else
die(«Error : « . mysql_error());
//Select Active Database
mysql_select_db(«test», $link);
//Create table
if(mysql_query($sql_create_table, $link))
echo «Table created.»;
else
die(«Error :» . mysql_error());
//Close Connection
mysql_close($link);
}
else
die(«Error connect to database : « . mysql_error());
?>

امیدوارم با دستورات SQL آشنایی کافی داشته باشید. در این مثال نتیجه اتصال به سرور MySQL را در متغیر link ریختیم، سپس با یک if چک می کنیم که آیا اتصال ما با موفقیت انجام پذیرفته یا خیر. اگر موفق بوده سعی می کنیم Database و Table مورد نظر خود را بر روی این اتصال بسازیم. برای این کار از تابع mysql_query استفاده می کنیم. این تابع یک دستور sql را بر روی MySQL اجرا می کند. اگر موفق به ایجاد دیتابیس بر روی سرور شدیم، با استفاده از تابع mysql_select_db دیتابیس جاری MySQL را به دیتابیس test تغییر می دهیم. بعد دوباره با استفاده از تابع mysql_query اسکریپت ایجاد table بر روی دیتابیس فعال را اجرا می کنیم که اگر موفقیت آمیز بود پیغام مناسب را نمایش می دهیم.

تابع mysql_query یکی از توابع بسیار پرکابرد برای دسترسی و تغییر داده ها در MySQL است. اگر یک اسکریپت فقط اجرایی و بدون مقدار برگشتی (مثل دستور Insert یا همین ایجاد دیتابیس) را به این تابع بدهید، مقادیر True یا False رابر خواهد گرداند، اگر دستور SQL شما نتیجه ای داشته باشد (مثل دستور Select) مقدار برگشتی این تابع اگر موفقیت آمیز باشد یک resource خواهد بود و در غیر این صورت False خواهد بود.

درج، به روز رسانی و حذف داده ها در MySQL

برای اجرای دستورات Insert, Update و Delete بر روی یک دیتابیس MySQL در PHP همانطور که در مثال بالا مشاهده کردید از تابع mysql_query استفاده می کنیم. نکته ای که برنامه نویسان ASP.NET باید به آن توجه داشته باشند این است که در PHP شما باید خودتان عمل دریافت اطلاعات از کاربر (با استفاده از فرم های HTML) و اعتبارسنجی داده های ورودی کاربر را انجام دهید تا از حملات SQL Injection در امان بمانید. در ASP.NET با استفاده از کلاس SqlParameter می توان تا حد زیادی از وقوع این حملات جلوگیری کرد. من یک مثال کوچک در مورد نحوه Insert یک رکورد به دیتابیسی که در مثال بالا ساختیم می زنم، Update و Delete را خودتان بنویسید.

<?php
$sql_insert = ‹INSERT INTO table1 (tbl_id, fname, lname) VALUES (1,»iman»,»nemati»)›;
$link = mysql_connect(‹localhost›,‹user›,‹password›);
if($link){
mysql_select_db(«test», $link);
if(mysql_query($sql_insert, $link)
echo «Inserted to database»;
mysql_close($link);
}
else
die(«Error: « . mysql_error());
else
die(«Error: « . mysql_error());
?>

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

خواندن اطلاعات از یک دیتابیس MySQL

منظور همان دستور Select در sql و خواندن تعداد رکوردهای مورد نظرمان بر اساس شرطی خاص است. برای این کار پس از اتصال به دیتابیس مورد نظر خود دستور Select مورد نظرتان را بوسیله تابع mysql_query اجرا می کنید و سپس نتیجه را در یک متغیر قرار می دهید. اگر متغیر برابر false نبود، با استفاده از تابع mysql_fetch_assoc شروع به خواندن رکوردهای مورد نظر خود می کنیم. به کد زیر نگاه کنید :

<?php
$sql_select = ‹SELECT * FROM test›;
$link = mysql_connect(‹localhost›,‹user›,‹password›);
if($link){
mysql_select_db(«test», $link);
$results = mysql_query($sql_select, $link);
if(!$results){
echo «Error : « . mysql_error();
exit;
}
if(mysql_num_rows($results) == 0){
echo «no record found.»;
exit;
}
while($item = mysql_fetch_assoc($results)){
echo $item[‹tbl_id›];
echo $item[‹fname›];
echo $item[‹lname›];
echo ‹<br />›;
}
mysql_free_result($results);
?>

تابع mysql_num_rows تعداد رکوردهایی که توسط دستور select خوانده شده اند را برمی گرداند. در دستور شرط while با استفاده از تابع mysql_fetch_assoc تعیین می کنیم که تا وقتی یک رکورد وجود دارد دستورات بدنه while اجرا شوند. اگر انتظار برگرداندن فقط یک رکورد را دارید نیازی به استفاده از حلقه while نخواهید داشت. تابع mysql_free_result هم سعی می کند حافظه اختصاص داده شده به متغیری که با اطلاعات یک دیتابیس پر شده را آزاد کند.

farasun.wordpress.com

ادامه دارد…

PHP برای برنامه نویسان ASP.NET – قسمت ششم

قسمت اول قسمت دومقسمت سومقسمت چهارمقسمت پنجم

کار کردن با فایل ها در PHP

باز کردن و خواندن یک فایل متنی در PHP

تابع fopen در PHP می تواند یک فایل یا یک URL را برای شما باز کند. کافیست آدرس فایل و حالتی که می خواهید فایل را باز کنید به این تابع بدهید تا این تابع یک handle برای کار با فایل مورد نظر شما، برگرداند. در مثال زیر می خواهیم یک فایل متنی را باز کنیم و خط به خط بخواینم و روی خروجی مرورگر چاپ کنیم.

<?php
$f = fopen(«change.txt»,«r») or exit(«File not found.»);
while (!feof($f))
{
echo fgets($f). «<br />»;
}
fclose($f);
?>

در خط اول با نوشتن دستور fopen(«change.txt»,»r»)x فایل change.txt را با حالت خواندن (r) باز می کنم و PHP هندل آن را برای کارهای بعدی در متغیر $f ذخیره می کند. دستور بعد از or برای این استفاده می شود که اگر فایل وجود نداشت یا خطایی در باز شدن فایل بوجود آمد ما خطای خودمان را نشان کاربر دهیم نه خطایی که PHP می دهد. در شرط حلقه while دستوری بکار رفته به نام feof که هندل یک فایل را می گیرد و اگر فایل به آخر رسیده باشد true و در غیر این صورت false برمی گرداند. در بدنه حلقه while هم از دستور fgets برای خواندن خط به خط فایل متنی استفاده کردیم. در خط آخر نیز باید فایلی که باز کردیم را با استفاده از تابع fclose ببندیم.

در آرگومان دوم تابع fopen همانطور که ملاحظه کردید، باید حالت باز کردن فایل را مشخص کنید. در مثال بالا ما فایل را با حالت فقط خواندنی باز کردیم چون فقط می خواستیم محتویات فایل را بخواینم. حالت های دیگر باز کردن یک فایل در PHP به صورت زیر است :

  • «r» باز کردن فایل به صورت فقط خواندنی
  • «w» باز کردن فایل برای فقط نوشتن، اشاره گر را به اول فایل می برد و این یعنی اگر فایل وجود داشته باشد تمام محتویات قبلی را پاک می کند و از نو می نویسد. اگر فایل وجود نداشته باشد سعی می کند آن را ایجاد کند.
  • «r+» باز کردن فایل برای خواندن و نوشتن. حالت نوشتن شرایط همان «w» را دارد.
  • «a» باز کردن فایل فقط برای نوشتن. اشاره گر را به انتهای فایل می برد و از آنجا شروع به نوشتن می کند (Append می کند). در صورتی که فایل وجود نداشته باشد سعی می کند آن را بسازد.
  • «a+» باز کردن فایل برای خواندن و نوشتن (Append) با شرایط «a»

نوشتن (ایجاد) یک فایل متنی در PHP

حالا که با حالت های مختلف باز کردن یک فایل در PHP آشنا شدید قصد داریم فایلی را در حالت Append باز کنیم و متنی را به انتهای آن اضافه کنیم. به مثال زیر توجه کنید :

<?php
$content = «This is a sample text.\n»;
$filename = «test.txt»;
$handle = fopen($filenmae, «a»);
if (fwrite($handle,$content) == TRUE)
echo «Success»;
else
echo «Faild»;
fclose($handle);
?>

فکر می کنم مثال خیلی واضح باشد. تنها تابع نا آشنا برای شما در این مثال، تابع fwrite است که هندل فایل را در آرگومان اول می گیرد و مقدار آرگومان دوم را در آن فایل ذخیره می کند. تابع fwrite اگر موفق به نوشتن بر روی فایل شود true و در غیر این صورت false برمی گرداند.

در ASP.NET برای نوشتن در یک فایل متنی از کلاس StreamWriter موجود در فضای نام System.IO به صورت زیر استفاده می کنیم :

StreamWriter writer = File.CreateText(«test.txt»);
writer.WriteLine(«test»);
writer.Close();

بررسی وجود یا عدم وجود یک فایل یا یک دایرکتوری در PHP

برای این کار از تایع file_exists استفاده می کنیم که در آرگومان آن باید آدرس فایل یا دایرکتوری مورد نظر خود را بدهیم تا این تابع با برگرداندن true یا false وجود یا عدم وجود فایل را به ما اطلاع دهد. یک مثال کوچک می تواند قطعه کد زیر باشد :

<?php
if(file_exists(«mydirectory/myfile.temp»))
//do something
?>

در ASP.NET برای این کار از متد File.Exists موجود در فضای نام System.IO استفاده می کنیم.

آپلود فایل در PHP

قبلاً در مورد آپلود فایل در ASP.NET توضیح داده بودم +، برای انجام این کار در PHP ابتدا باید یک فرم HTML برای انتخاب فایل توسط کاربر ایجاد کنید و سپس با استفاده از کدنویسی PHP عملیات آپلود بر روی سرور را انجام دهید. فرم HTML شما برای آپلود یک فایل می تواند چیزی شبیه به کد زیر باشد :

<form enctype=»multipart/form-data» action=»upload.php» method=»POST»>
Please choose a file: <input name=»uploaded» type=»file» /><br />
<input type=»submit» value=»Upload» />
</form>

کدهای بالا را در قسمت body یک فایل html ذخیره کنید. این فرم با استفاده از متد post اقدام به ارسال فایل کاربر به صفحه upload.php می کند. حالا یک فایل به نام upload.php کنار فایل HTML بالا بسازید و کدهای زیر را در آن ذخیره کنید :

<?php
$target = «upload-directory/» . basename( $_FILES[‹uploaded›][‹name›]) ;
if(move_uploaded_file($_FILES[‹uploaded›][‹tmp_name›], $target))
echo «The file has been uploaded»;
else
echo «error during uploading.»;
?>

کد بالا برخلاف کدهای دیگری که تا به حال دیدید نیاز به توضیح بیشتری دارد! PHP تمام فایل هایی را که توسط متد post بر بروی سرور آپلود می شوند را همراه با اطلاعات مربوط به آن فایل ها در یک آرایه سراسری به نام $_FILES نگهداری می کند. در خط اول این کد با استفاده از تابع basename نام فایل را از آدرس کامل فایل جدا کردیم و به همراه آدرس دایرکتوری که می خوایم فایل ها در آن آپلود شوند در متغیر target ریختیم. در خط دوم و در شرط if با استفاده از تابع move_uploaded_file فایل های آپلود شده را که دارای نام موقت بر روی سرور هستند را به آدرسی که خودمان می خواهیم (آدرسی که در متغیر target ریختیم) منتقل می کنیم. در حقیقت این تابع کار Rename را انجام می دهد که اگر موفقیت آمیز باشد true و در غیر این صورت false برمی گرداند.

آرایه $_FILES همانطور که گفتم، علاوه بر فایل ها، اطلاعات مربوط به فایل ها را هم در خود ذخیره می کند. مثلاً $_FILES[«uploaded»][«tmp_name»] نام موقت فایل بر روی سرور را برمیگرداند. این اطلاعات خیلی مفید هستند، به طور مثال شما می توانید سایز و پسوند فایل را چک کنید که اگر دلخواه شما نبود به کاربر اجازه آپلود فایل را ندهید. به مثال زیر توجه کنید :

<?php
if(($_FILES[«userfile»][«type»] == «image/jpeg») &&
($_FILES[«userfile»][«size»] < 50000))
echo «Successfuly uploaded.»;
else
echo «Invalid file size or file type.»;
?>

در این کد چک می کنیم که فایل ارسالی کاربر از نوع عکس jpeg و سایز آن کمتر از 5 کیلوبایت باشد. خب فکر میکنم این مطلب خیلی طولانی شد 🙂 ادامه این مطلب را در قسمت های بعدی بخوانید…!

PHP برای برنامه نویسان ASP.NET – قسمت پنجم

قسمت اول قسمت دوم قسمت سومقسمت چهارم

فرستادن ایمیل در PHP

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

<?php
$to = "imun22@gmail.com";
$subject = "Hello";
$body = "This is a test.";
$headers = "From : someone@gmail.com";
mail($to,$subject,$body,$headers);
?>

در مثال بالا ایمیلی با موضوع Hello به آدرس imun22@gmail.com از طرف someone@gmail.com فرستاده می شود. همانطور که می بینید تابع mail چهار آرگومان می پذیرد که البته مشخص نمودن آرگومان headers اختیاری است. شما در هدر ایمیل می توانید اطلاعاتی مثل From، Bcc و Cc را مشخص کنید. فرستادن ایمیل در PHP به همین سادگی است. حالا معادل کد بالا در ASP.NET ببینیم :


MailMessage mail = new MailMessage("someone@gmail.com", "imun22@gmail.com",
"Hello", "This is a test.");
SmtpClient smtp = new SmtpClient();
smtp.Send(mail);

در دات نت می توانید از کلاس MailMessage که در فضای نام System.Net.Mail وجود دارد برای فرستادن ایمیل استفاده کنید.

نشان دادن تاریخ در PHP

در ASP.NET برای گرفتن تاریخ جاری (Current) از کلاس DateTime کمک می گیریم. در PHP باید از تابع date استفاده کنید. این تابع یک آرگومان format دریافت می کند که بر اساس آن رشته خروجی اش را تولید می کند. استفاده از این تابع نکته خاصی ندارد، فقط اینکه با آرگومان فرمت می توانید انواع مختلف فرمت های تاریخ را تولید کنید. به مثال های تابع date توجه کنید :


<?php
echo date("Y/m/d"); //print something like 2010/03/08
echo date("l d F Y"); //print something like Sunday 08 March 2010
?>

فکر میکنم مثال ها واضح باشند. مثلاً استفاده از کاراکتر F در فرمت باعث ایجاد نام کامل ماه جاری در خروجی می شود یا کاراکتر l برای نشان دادن نام روز در هفته بکار می رود. مرجع کامل این تابع را به همراه کاراکترهایی که در قالب بندی تاریخ به کار می روند، اینجا مطالعه کنید.

جایگزینی برای MasterPage

یکی از قابلیت های کاربردی ASP.NET مسترپیج ها هستند. با استفاده از یک MasterPage می توان یک قالب کلی برای ظاهر تمام صفحات وب سایت یا صفحات مرتبط به هم تعیین نمود. در PHP همچین چیزی وجود ندارد اما می توان با استفاده از توابع و قابلیت های موجود چیزی شبیه به آن را پیاده سازی کرد. بدین صورت که Header، Footer و احتمالاً سایدبار قالب صفحات خود را در فایل های جداگانه PHP می نویسید و در هر صفحه آن ها را include می کنید. این روش مناسبی است که نرم افزارهای بزرگی مثل وردپرس نیز از آن استفاده می کنند. استفاده از این روش مزایای زیادی دارد. مثلاً وقتی قرار است Header تمام صفحات شما عوض شود دیگر نیازی نیست کد تک تک صفحات را تغییر دهید، تغییر دادن فایل Header.php کافیست.

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

vars.php
<?php
$sitename = 'farasun';
?>

index.php
<?php
include('header.php');
include('sidebard');
include('vars.php');
echo $sitename;
include('footer.php');
?>

در مثال بالا فرض کنید که فایل vars.php در کنار فایل index.php قرار دارد. در فایل index.php محتویات فایل هایی که include شده اند قرار می گیرد و متغیر sitename که در فایل vars.php قرار داشت، چاپ می شود. در فایل های header.php، sidebar.php و footer.php می توانید از دستورات html و php برای قالب دهی و گرفتن اطلاعات مورد نیاز برای صفحات استفاده کنید.

توابع include و require هر دو یک کار را انجام می دهند با یک تفاوت، که اگر فایل مورد نظر وجود نداشته باشد include یک warning می دهد و require یک خطای مهلک یا fatal error.

فکر می کنم با این توضیحات و این مثال کوچک، کاربرد توابع include و require را فهمیده باشید.در مطالب بعدی با نحوه کار کردن با فایل ها، آپلود فایل ها و دسترسی به داده های یک پایگاه داده در PHP آشنا خواهید شد. با ما همراه باشید!

farasun.wordpress.com

مشترک فراسان شوید! چطور مشترک شوید؟

farasun.wordpress.com

این مطلب ادامه دارد….

PHP برای برنامه نویسان ASP.NET – قسمت سوم

خواندن قسمت اولقسمت دوم

کوکی ها در PHP

کوکی ها (Cookie) فایل های کوچکی هستند که اغلب برای شناسایی کاربران از آن ها در وب سایت ها استفاده می شود. هر بار که کاربر درخواستی به یک وب سایت می فرستد، فایل کوکی آن وب سایت نیز در صورت وجود فرستاده می شود. ASP.NET و PHP هر دو از کوکی ها به خوبی پشتیبانی می کنند اما مکانیزم کار کردن با آن ها کمی متفاوت است.

در PHP با استفاده از تابع setcookie می توان یک کوکی با مقادیر دلخواه بر روی کامپیوتر کاربر ایجاد کرد. این تابع دارای چندین پارامتر است که برخی از آن ها اختیاری است. لطفاً برای روشن تر شدن موضوع به مثال زیر توجه کنید :

<?php setcookie("myusername","imun22", time()+3600; ?>

در مثال بالا یک کوکی به نامmyusername ساخته می شود که مقدار imun22 را در خود ذخیره خواهد کرد. این کوکی یک ساعت بعد از بین خواهد رفت! برای اینکه PHP یک کوکی برای شما بسازد، باید آرگومان هایی را برای تابع setcookie مشخص کنید :

  • name : نام کوکی. شما بعداً برای دستیابی به اطلاعات این کوکی باید نامش را بدانید.
  • value : مقداری که کوکی باید در خود ذخیره کند. لطفاً اطلاعات حساس را در کوکی ذخیره نکنید!
  • expire : تاریخی که کوکی اعتبار خود را از دست خواهد داد و از کامپیوتر کاربر حذف خواهد شد.
  • path : مسیری بر روی سرور که این کوکی برای آن مسیر در دسترس خواهد بود. اگر این آرگومان را برابر ‹/› قرار دهید، کوکی در کل domain در دسترس خواهد بود. اگر به طور مثال برابر با ‹/sample/› قرار دهید، این کوکی فقط در دایرکتوری sample و زیر شاخه های آن قابل دسترس خواهد بود. اگر این آرگومان را ست نکنید، به طور پیش فرض کوکی فقط در دایرکتوری جاری قابل دسترس خواهد بود.
  • domain : دامینی که کوکی روی آن قابل دسترس خواهد بود. این آرگومان اختیاری است.
  • secure : یک مقدار بولین می گیرد و مشخص می کند که آیا کوکی باید بر روی یک ارتباط امن HTTPS انتقال یابد یا خیر. اگر برابر TRUE قرار گیرد، کوکی فقط زمانی ست خواهد شد که یک ارتباط امن وجود داشته باشد.
  • httponly : اگر برابر TRUE باشد، کوکی فقط بوسیله پروتکل HTTP قابل دسترس است. این بدین معنی است که زبان های اسکریپت نویسی مثل جاوا اسکریپت نمی توانند به کوکی دسترسی پیدا کنند.

اگر تابع setcookie با موفقیت یک کوکی را ایجاد کند، TRUE و در غیر این صورت FALSE برمی گرداند. به مثال زیر توجه کنید :

<?php
$TwoMonths = 60 * 60 * 24 * 60 + time();
setcookie('myuserinfo[username]', 'imun22', $TwoMonths);
setcookie('myuserinfo[lastvisit]', date("d/m/y"), $TwoMonths);
?>

در این مثال کوچک، نام کاربری و تاریخ آخرین مراجعه کاربر را در کوکی ذخیره کردیم. در واقع با این روش می توان به جای ذخیره کردن یک مقدار، با استفاده از آرایه ها چندین مقدار مختلف را در یک کوکی ذخیره نمود. مثال بالا در ASP.NET و سی شارپ کدی شبیه به کد زیر است :

HttpCookie cookie = new HttpCookie("myuserinfo");
cookie.Values["username"] = "imun22";
cookie.Values["lastvisit"] = DateTime.Now.ToShortDateString();
cookie.Expires = DateTime.Now.AddMonths(2);
Response.Cookies.Add(cookie);

البته این در صورتی است که فضای نام System.Net را using کرده باشید. همانطور که می بینید ASP.NET با کوکی ها به صورت یک کلاس برخورد می کند، در صورتی که در PHP این کار را یک تابع انجام می دهد.

دسترسی به مقادیر ذخیره شده در کوکی ها

ما در ASP.NET برای دسترسی به مقادیر ذخیره شده در یک کوکی از روش زیر استفاده می کنیم :

if (Request.Cookies["myuserinfo"]["username"] != null)
{
Response.Write(Request.Cookies["myuserinfo"]["lastvisit"]);
//do something else
}

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

<?php
if (isset($_COOKIE['myuserinfo'])) {
echo $_COOKIE['myuserinfo']['lastvisit'];
//do something else
}
?>

چطور یک کوکی را حذف کنیم؟

برای این کار شما باید تاریخ expire شدن کوکی را به زمان گذشته تنظیم کنید. این شبیه به همان کاری است که در ASP.NET هم انجام می دهیم. با این کار مروگر کاربر به صورت خودکار کوکی را حذف خواهد کرد.

<?php
setcookie("myuserinfo","", time()-3600);
?>

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

مشترک فراسان شوید! چطور مشترک شوید؟

farasun.wordpress.com

این مطلب ادامه دارد…

PHP برای برنامه نویسان ASP.NET – قسمت دوم

قسمت اول را در اینجا بخوانید.

پردازش فرم ها

ASP.NET تمام سعی خود را کرده تا برنامه نویس را درگیر پردازش فرم های HTML نکند. در واقع یک برنامه نویس ASP.NET ممکن است با فرم های HTML آشنایی نداشته باشد اما در هر صفحه وبی که ایجاد می کند از آن ها استفاده کند. ASP.NET به صورت پیش فرض در هر یک از صفحات aspx یک فرم HTML قرار می دهد تا برنامه نویس بتواند با داده های ورودی کاربر کار کند. شاید در ASP.NET احتیاجی به دانستن نحوه ایجاد و کارکرد فرم های HTML نداشتید اما پردازش فرم های وب یکی از ملزومات اساسی PHP است.

فرم وب

اطلاعات فرم های HTML به دو روش Get و Post فرستاده و دریافت می شوند. در ASP.NET شاید این روش ها از دید برنامه نویس پنهان بمانند اما در PHP این برنامه نویسان هستند که باید در مورد استفاده از این روش ها در شرایط مختلف تصمیم گیری کنند. اطلاعات فرم ها در ASP.NET همیشه به خود صفحه فرستاده می شوند و به صورت پیش فرض از متد post برای این کار استفاده می کند. هنگامی که اطلاعات فرم به سرور برای پردازش فرستاده می شود و دوباره به صفحه باز می گردد، یک PostBack اتفاق می افتد. برای اینکه از متد get استفاده کنیم می توانیم یکسری پارامتر به صفحه مورد نظر خود بفرستیم و در صفحه مقصد با استفاده از Request.QueryString (که آرایه ای است از پارامترهای فرستاده شده توسط صفحه مبدا) اطلاعات فرستاده شده را بخوانیم.

اما در PHP این پروسه تفاوت زیادی دارد. شما باید خودتان در مورد متد ارسال اطلاعات تصمیم گیری کنید. در PHP اطلاعاتی که به روش get فرستاده می شوند را می توان در آرایه $_GET و اطلاعاتی که به روش post فرستاده می شوند را در آرایه $_POST پیدا کرد.

روش Post

همانطور که گفتم ASP.NET از این روش به صورت پیش فرض برای پردازش فرم ها استفاده می کند. در PHP شما می توانید با استفاده از متغیر سراسری $_POST به اطلاعات فرستاده شده توسط این روش دستیابی پیدا کنید. یک مثال کوچک می تواند مسئله را روشن تر کند :

<form action=«welcome.php» method=«post»>
Name: <input type=«text» name=«fname» />
<input type=«submit» name=«btnSubmit» />
</form>

یک فرم ساده HTML ساختیم که اطلاعات خودش (فیلد نام) را به صفحه welcome.php با روش post می فرستد. حالا فایل welcome.php را به صورت زیر می سازیم :

Welcome <?php echo $_POST[«fname»]; ?>!<br />

با این یک خط کد ساده اطلاعات فیلد fname را که در صفحه قبل قرار داشت، خواندیم. PHP در روش Post به صورت خودکار فیلدهای فرم را شناسایی می کند. اطلاعات ارسالی توسط این روش برای دیگران قابل رویت نیست و محدودیتی در حجم اطلاعات ارسالی نداریم. البته به صورت پیش فرض ماکزیمم حجم اطلاعات ارسالی در روش Post در PHP برابر با 8 مگابایت است که این مقدار را می توانید در فایل php.ini و با تغییر ثابت post_max_size در این فایل تغییر دهید.

یکی از کاربردهای مهم روش post که در ASP.NET هم استفاده می شود، اعتبار سنجی سمت سرور یا Server Side Validation است. به این صورت که اطلاعات فرم را به جای اینکه به یک صفحه دیگر بفرستید به خود صفحه می فرستید تا عمل اعتبار سنجی انجام شود. سپس اگر اطلاعات ورودی خطایی داشته باشد، در همین صفحه از کاربر می خواهید که اطلاعات را صحیح وارد کند. این روش برای اعتبارسنجی سمت سرور اطلاعاتی که می خواهند در دیتابیس ذخیره شوند بسیار مرسوم است.

روش Get

بر خلاف متد post، اطلاعاتی که با این روش فرستاده می شوند توسط همه قابل رویت هستند. کاربران این اطلاعات را در نوار آدرس مرورگر خود می بینند و برای اطلاعات ارسالی محدودیت حجمی داریم. متغیر $_GET در PHP شامل اطلاعات فرمی است که با متد get ارسال شده است. به مثال زیر توجه کنید :

<form action=«welcome.php» method=«get»>
Name: <input type=«text» name=«fname» />
<input type=«submit» />
</form>

برای نشان دادن اطلاعاتی که از این فرم به فایل welcome.php با استفاده از روش get فرستاده می شود، فایل welcome.php را به صورت زیر می سازیم :

Welcome <?php echo $_GET[«fname»]; ?>.<br />

هنگامی که کاربر روی دکمه submit فرم کلیک کند، نوار آدرس مرورگر او آدرسی شبیه به آدرس زیر را نشان خواهد داد :

http://yoursitename.com/welcome.php?name=value

این همان QueryString خودمان در ASP.NET است! در  URL بالا قسمتی که آبی است و بعد از علامت سئوال قرار گرفته را Query String می گویند. ما در ASP.NET برای دسترسی به مقدار پارامتر name در URL بالا از دستور زیر استفاده می کنیم :

Request.QueryString[«fname»]

یکی از مزایای استفاده از روش Get این است که کاربر می تواند صفحه را بوکمارک کند، چون دارای یک آدرس مشخص است. هنگامی که از متد get در PHP استفاده می کنید باید به این نکته توجه کنید که تمام فیلد ها به علاوه مقادیر آن ها در نوار آدرس مرورگر قابل مشاهده هستند، پس نباید برای ارسال اطلاعات حساس مثل رمز عبور از این روش استفاده کنید.

نکات تکمیلی

ما در ASP.NET قبل از اینکه از مقادیر موجود در QueryString استفاده کنیم، چک می کنیم که مقداردهی شده باشد، یعنی null نباشد. برای این کار از کدی شبیه به زیر بهره می بریم :

if (Request.QueryString[«fname»] != null)
//do something

معادل شرط بالا در PHP کدی شبیه به کد زیر است :

if (isset($_GET[«fname»]){
//do something
}

یعنی اگر فیلد fname مقداردهی شده بود عمل مورد نظر را روی آن انجام بده.

farasun.wordpress.com

در مطلب بعد با کوکی ها و نحوه استفاده از آن ها در PHP آشنا خواهید شد. برای اینکه مطالب بعدی را از دست ندهید مشترک فراسان شوید! چطور مشترک شوید؟

farasun.wordpress.com

این مطلب ادامه دارد…

پ.ن : از این به بعد برای تماس با من از این فرم استفاده کنید!