ذخیره تنظیمات یک برنامه دسکتاپ در دات نت

در اکثر برنامه های دسکتاپ، قسمتی به عنوان تنظیمات (Settings، Options یا Preferences) در نظر گرفته می شود تا کاربران امکان تنظیم اجزای مختلف برنامه را بر اساس سلیقه یا نیاز خود داشته باشند. در دات نت فریم ورک قابلیتی به نام Settings وجود دارد که شما با استفاده از آن می توانید تنظیمات برنامه خود را در یک فایل به نام App.config در کنار برنامه خود ذخیره کنید. Settings می تواند شامل مقادیر مختلفی باشد که برنامه شما برای به یادآوردن ترجیحات کاربران و تنظیم قسمت های مختلفش به آن ها نیاز دارد. به طور مثال می توانید تغییراتی که کاربر در ظاهر برنامه می دهد (مثل اندازه پنجره و تم برنامه) یا رشته اتصال به دیتابیس را درون فایل App.config ذخیره کنید و هر بار هنگام اجرای برنامه این فایل را بخوانید و تنظیمات کاربر را اعمال کنید.

برای استفاده از قابلیت Settings، در ویژاول استادیو از Solution Explorer بر روی پروژه خود کلیلک راست کنید و گزینه Properties را برگزنید (و یا از پوشه Properties پروژه خود فایل Settings.settings را باز کنید). اگر در تب Settings نیستید، به تب Settings بروید. حالا باید چیزی شبیه به تصویر زیر را ببینید که Settings Designer نام دارد.

Settings Designerهمانطور که مشاهده می کنید هر Setting دارای 4 خصوصیت است :

  • Name : نامی است که در کدنویسی برای دستیابی به مقدار ذخیره شده در این Setting مورد استفاده قرار می گیرد.
  • Type : نوع مقداری است که قرار است در این Setting ذخیره شود. در اینجا تمام نوع های داده ای دات نت فریم ورک پشتیبانی می شوند. به طور مثال شما می توانید رنگ پس زمینه یک پنجره را با توع System.Color ذخیره کنید.
  • Scope : نحوه دستیابی به یک Setting را در زمان اجرا کنترل می کند. اگر از نوع User انتخاب شود، مقدار هم خواندنی است و هم نوشتنی اما اگر از نوع Application در نظر بگیرید،مقدار Setting فقط خواندنی است و از طریق کدنویسی و در حال اجرا غیر قابل تغییر است.
  • Value : مقداری است که هنگام دستیابی به Setting برگردانده خواهد شد. این مقدار باید از همان نوعی باشد که در Type مشخص شده است.

پس از مشخص کردن Settingهای مورد نیاز برنامه خود، می توانید از طریق کد به آن ها دسترسی داشته باشید. در سی شارپ برای دسترسی به این تنظیمات از طریق کد باید از فضای نام Properties استفاده کنید. تمام تنظیماتی که مشخص کرده اید از طریق Properties.Settings.Default در کدنویسی قابل دسترسی اند و IntelliSense آن ها را می شناسد و به شما نشان می دهد. تمام آن ها از نوع مشخصی برخوردار هستند و به اصطلاح Strongly typed هستند.

فرض می کنیم یک Setting به نام Title از نوع String ساخته اید که عنوان پنجره اصلی برنامه شما را در خود ذخیره می کند. برای خواندن آن به صورت زیر کد می نویسیم :

this.Title = Properties.Settings.Default.Title;

و برای ذخیره مقدار ورودی کاربر در این Setting به صورت زیر عمل می کنیم :

Properties.Settings.Default.Title = txtTitle.Text;

Properties.Settings.Default.Save();

بدون صدا زدن متد Save تغییرات درون فایل ذخیره نخواهد شد. فقط به این نکته توجه داشته باشید که Settingهایی که دارای محدوده Application هستند را نمی توانید به صورت کد نویسی تغییر دهید. این نوع تنظیمات فقط از طریق Setting Designer یا تغییر دستی مقدار آن ها در یک ویرایشگر متن قابل تغییر هستند.

استفاده از چند فایل تنظیمات

در بعضی موارد ممکن است برنامه شما به جای یک فایل تنظیمات نیاز به چند فایل تنظیمات داشته باشد. در این مواقع شما می توانید در ویژوال استادیو روی پروژه خود کلیک راست کنید و گزینه Add New item را انتخاب کنید و به دنبال Settings File بگردید. یک نام به جز Settings مثلاً MyNewSettings را برای آن مشخص کنید و دکمه Add را بزنید تا به پروژه شما اضافه شود. حالا به جای Properties.Settings برای دسترسی به تنظیمات فایل جدید از Properties.MyNewSettings استفاده کنید. همین!

farasun.wordpress.com

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

WebMatrix توسعه وب را آسان تر می کند

مایکروسافت به تازگی ابزار جدیدی برای توسعه دهندگان وب به نام WebMatrix ارائه کرده است که سفارشی کردن وب اپلیکیشن های موجود یا ساخت یک وب سایت جدید را با امکانات خوب و راه حل های ساده، آسان می کند. این ابزار سبک به افراد کمک می کند تا به راحتی برنامه نویسی با ASP.NET را شروع کنند و خیلی زود در آن پیشرفت کنند. WebMatrix شامل ابزارهای مهم مایکروسافت برای توسعه وب  است. این ابزارها شامل :

  • IIS Developer Express : یک وب سرور سبک و رایگان که با تمام نسخه های ویندوز و نسخه کامل IIS سازگار است.
  • ASP.NET : یک فریم ورک رایگان شامل کلاس های پایه برای توسعه وب.
  • SQL Server Compact : یک نسخه embedded و بسیار سبک و رایگان از SQL Server که بر اساس فایل کار می کند.
  • Razor Syntax : یک View Engine جدید و ساده برای ASP.NET که کدهای سمت سرور سی شارپ یا ویژوال بیسیک را با کدهای HTML ترکیب می کند (مانند  PHP) و یادگیری آن ساده و لذت بخش است.

وب ماتریکس

WebMatrix با استفاده از تکنولوژی های بالا، یک محیط مجتمع ساده و در عین حال قدرتمند برای ساخت وب سایت های داینامیک و مطابق با استاندرادهای جدید به ساده ترین شکل ممکن در اختیار کاربر خود قرار می دهد. شما با وب ماتریکس می توانید یک وب اپلیکیشن اوپن سورس مثل BlogEngine.NET را انتخاب کنید، آن را بر اساس نیاز خود سفارشی کنید و به راحتی آن را بر روی هاست خود پابلیش کنید. پروسه استفاده از وب اپلیکیشن های اوپن سورس در اینترنت با WebMatrix بسیار آسان خواهد بود. شما با وب ماتریکس حتی قادر به انتخاب CMSهای نوشته شده با PHP مثل وردپرس، جوملا و Drupal نیز هستید و حتی می توانید آن ها را با ابزارهای موجود در وب ماتریکس توسعه داده و از همانجا بر روی هاست خود پابلیش کنید.

برای شروع شما می توانید WebMatrix را از اینجا دانلود کنید. اگر دات نت فریم ورک 4.0 را نصب نداشته باشید، کمی حجم دانلود وب ماتریکس بالا خواهد بود، در غیر این صورت با دانلود 15 تا 20 مگابایت WebMatrix را در اختیار خواهید داشت. پس از اجرای آن با یک محیط ساده مواجه خواهید شد که فقط 4 انتخاب را پیش روی شما می گذارد. می توانید یک سایت جدید خالی ایجاد کنید یا از وب اپلیکیشن های موجود در گالری مایکروسافت برای شروع استفاده کنید. هر طور که شروع کنید، وب ماتریکس به شما اجازه مدیریت بر صفحات سایت و تغییر آن ها، مدیریت بر فایل های وب سایت، مدیریت بر دیتابیس سایت و در نهایت پابلیش سایت بر روی سرور را می دهد.

Microsoft Web Gallery

همانطور که اشاره شد، شما در وب ماتریکس می توانید از سینتاکس Razor برای نوشتن کدهای سی شارپ و ویژوال بیسیک در میان کدهای HTML بهر ببرید. یادگیری سینتاکس Razor خیلی آسان است. شما کدهای خود را با یک علامت @ آغاز می کنید و بلاک کد خود را در سی شارپ با { و } محصور می کنید. هر جا که از علامت @ استفاده کنید یعنی می خواهید یک کد سمت سرور را بنویسید. از متغیرها بدون تعیین نوع آن ها استفاده می کنید، سپس ASP.NET خودش بهترین تصمیم را برای تعیین نوع متغیر بر اساس مقداری که درون آن ذخیره می شود خواهد گرفت. صفحاتی که دارای کد Razor هستند دارای پسوندهای مخصوص cshtml یا vbhtml خواهند بود. سینتاکس Razor تمام قدرت ASP.NET را با قواعدی آسان تر در اختیار مبتدیان قرار می دهد، اما حرفه ای ها نیز می توانند به بهترین شکل برای بالا بردن کارایی خود از آن استفاده کنند. یک کد بسیار ساده با سینتاکس Razor را ببینید :


<html>
<head>
<title>Razor Syntax Sample</title>
</head>
<body>

@{
var message = «Hello World.»;
var today = DateTime.Now.ToString();
}

<p>Message : @message</p>
<p>Today is : @today</p>
</body>
</html>

اینطور که پیداست مایکروسافت راه درستی را انتخاب کرده و باید منتظر تکنولوژی های جدیدتر و بهترش در زمینه توسعه وب باشیم. اینکه نظر مایکروسافت در این چند سال اخیر نسبت به نرم افزارهای اوپن سورس تغییرات مثبت زیادی داشته خیلی خوب و سازنده است. مایکروسافت نیز اهمیت استفاده از وب اپلیکیشن های اوپن سورس را در توسعه وب به خوبی می داند و به همین دلیل Microsoft Web Gallery را راه اندازی کرده و توسعه دهندگان را به جای باز تولید اپلیکیشن های تکراری به استفاده و توسعه وب اپلیکیشن های اوپن سورس موجود تشویق می کند. Web Platform Installer و WebMatrix دو ابزار مهم مایکروسافت در زمینه توسعه وب هستند که به صورت توکار از وب اپلیکیشن های اوپن سورس پشتیبانی می کنند و قادرند آن ها را دانلود، تنظیم و پابلیش کنند. تکنولوژی های تحت وب هرچه بازتر باشند بیشتر مورد تایید و مورد اعتماد توسعه دهندگان وب خواهند بود، این را مایکروسافت به خوبی می داند. بدون شک در آینده ای نه چندان دور از WebMatrix و Razor Syntax بیشتر خواهیم شنید.

منابع بیشتر در مورد WebMatrix

استفاده از MySQL در دات نت فریم ورک

بانک اطلاعاتی اوپن سورس MySql را می توان یکی از محبوب ترین و پر استفاده ترین نرم افزارهای بانک اطلاعاتی مورد استفاده در وب دانست. به علت سادگی، قدرت و هزینه پایین این بانک اطلاعاتی، سر و کله اش را می توانید در تمام پکیج های هاستینگ پیدا کنید. خیلی وقت ها ممکن است در یک پکیج هاستینگ ویندوزی نتوانید از SQL Server به عنوان دیتابیس استفاده کنید، یا محدودیت هایی برای آن وجود داشته باشد، اما همیشه و به راحتی می توانید از دیتابیس های MySql استفاده کنید. استفاده از بانک اطلاعاتی MySql در کنار ASP.NET می تواند هزینه و زمان توسعه شما را کاهش بدهد و به نظر من دردسرهای شما را کمتر کند!

دات نت فریم ورک به صورت توکار از MySql پشتیبانی نمی کند و فراهم کننده پیش فرضی  برای کار با آن ارائه نمی کند. شما باید برای استفاده از MySql در دات نت از کتابخانه ای که خود MySql در اختیار برنامه نویسان قرار داده استفاده کنید. استفاده از MySql به لطف این کتابخانه دقیقاً مشابه استفاده از SQL Server یا Access است. ابتدا از اینجا کانکتور MySQL برای دات نت فریم ورک را دریافت کنید. متاسفانه اگر ایران هستید نمی توانید از وب سایت رسمی MySQL فایلی دریافت کنید! دوستان داخل ایران از این لینک برای دریافت این کتابخانه استفاده کنند.

این فراهم کننده از معماری ADO.NET پیروی می کند و به همین علت اگر قبلاً با کامپوننت های ADO.NET مثلاً برای برقراری ارتباط با یک دیتابیس SQL Server استفاده کرده باشید، در اینجا مشکلی نخواهید داشت. به عنوان یک مثال ساده قصد داریم جدول tblUsers را بر روی دیتابیسی به نام Sample بسازیم. ابتدا یک پروژه تحت وب (یا تحت ویندوز، فرقی نمی کند) بسازید و فایلی را که دانلود کردید را به ارجاع های پروژه خود اضافه کنید (با کلیک راست روی نام پروژه در Solution Explorer ، انتخاب Add Reference و انتخاب فایل MySql.dll)  سپس فضای نام MySql.Data.MySqlClient را using کنید و سپس کدهای زیر را در جای مناسب قرار دهید.

string ConnectionString = "server=localhost; userid=root;password=;pooling=yes;Database=Sample;charset=utf8";
using (MySqlConnection connection = new MySqlConnection(ConnectionString))
{
connection.Open();
using (MySqlCommand command = new MySqlCommand())
{
command.Connection = connection;
command.CommandText = "CREATE TABLE tblUsers (Uid INT AUTO_INCREMENT, Uname VARCHAR(100) NOT NULL, " +
"Pwd VARCHAR(100) NOT NULL, PRIMARY KEY(Uid)) CHARACTER SET utf8 COLLATE utf8_persian_ci;";
command.ExecuteNonQuery();
}
}

همانطور که در این مثال مشاهده می کنید در کانکشن استرینگ MySql فوق نام سرور، نام کاربری، رمز عبور و نام دیتابیس تعیین شده اند که شما باید به جای آن ها اطلاعات مربوط به خود را قرار دهید. برای اجرای یک دستور SQL بر روی سرور MySql شما نیاز به یک آبجکت MySqlConnection دارید که با تعیین یک رشته اتصال و فراخوانی متد Open به دیتابیس Sample موجود بر روی localhost وصل می شود. سپس با ایجاد یک آبجکت MySqlCommand و تعیین دستور SQL ساخت جدول tblUsers و اجرای متد ExecuteNonQuery به مقصود خود می رسید.

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

public void InsertUser(string Username, string Password)
{
using (MySqlConnection connection = new MySqlConnection(ConnectionString))
{
connection.Open();
using (MySqlCommand command = new MySqlCommand())
{
command.Connection = connection;
command.CommandText = "INSERT INTO tblUsers (Uname, Pwd) VALUES (?Uname, ?Pwd)";
command.Parameters.AddWithValue("?Uname", Username);
command.Parameters.AddWithValue("?Pwd", Password);
command.ExecuteNonQuery();
}
}
}

همانطور که مشاهده می کنید اگر کار با کلاس های استاندارد ADO.NET مثل SqlCommand را بلد باشید در استفاده از MySQL هیچ مشکلی نخواهید داشت. تنها فرق MySQL با SQL Server در اینجا این است که برای مشخص کردن پارامترها به جای علامت @ باید از علامت ? استفاده کنید. من کد درج رکورد به یک دیتابیس MySql را نوشتم، شما کدهای Update و Delete را بنویسید!

این کتابخانه شامل کلاس های MySqlDataReader و MySqlDataAdapter نیز هست که شما می توانید از آن ها مثل دیگر کلاس های پیش فرض ADO.NET استفاده کنید و اعمال Data Binding و نمایش اطلاعات در یک GridView را به راحتی و با روش های آشنا انجام دهید. به طور مثال برای نشان دادن محتویات جدول tblUsers در یک GridView می توانید از کدی شبیه به کد زیر کمک بگیرید :

DataSet ds = new DataSet();
MySqlDataAdapter dataAdapter = new MySqlDataAdapter("SELECT * FROM tblUsers", connection);
dataAdapter.Fill(ds);
GridView1.DataSource = ds;

همانطور که مشاهده می کنید استفاده از دیتابیس های MySql به لطف معماری ADO.NET هیچ فرقی با دیگر دیتابیس های پشتیبانی شده توسط دات نت ندارد.

farasun.wordpress.com

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

پ.ن 2 : سایت ها یا وبلاگ های دیگری که به نام «فراسان» فعالیت می کنند به بنده و این وبلاگ هیچ ارتباطی ندارند! من سه سال پیش این نام را کاملاً از ذهنم بیرون کشیدم و از هیچ جایی کپی نکردم! فقط این وبلاگ و این سایت با نام «فراسان»  به من مربوط هستند.

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

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

کامپایل قطعات کد دات نت با Snippet Compiler

Snippet Compiler برنامه کوچکی است برای اجرای قطعات کوچک کدهای سی شارپ و ویژوال بیسیک دات نت زمانی که شما نمی خواهید یک پروژه با فایل های همراهش در ویژوال استادیو فقط برای تست یک قطعه کد بسیازید! برای من خیلی پیش آمده که برای تست یک قطعه کد مجبور به باز کردن ویژوال استادیو و استفاده از Console Application شده ام. این برنامه با داشتن قالب یک برنامه کنسول آماده برای تست قطعات کد می تواند در وقت شما صرفه جویی کند و کارایی تان را بالا ببرد.

آخرین نسخه Sinppet Compiler را از اینجا دریافت کنید. این برنامه نیازی به نصب ندارد، بعد از باز کردن برنامه، قطعه کد مورد نظر خود را در بدنه متد RunSnippet تایپ کنید و کلید F5 را فشار دهید تا قطعه کد کامپایل و اجرا شود. این ابزار قابلیت های واقعاً خوبی دارد و ارزش دانلود کردن را دارد.

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

کوکی ها (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

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