در ادامه سری آموزشی پیاچپی قصد داریم در مورد فایلها و کارهایی که با پیاچپی میتوان با فایلها انجام داد صحبت کنیم. میتوان از فایلها به منظور ذخیره کردن اطلاعات بهره گرفت یا در شرایط گوناگون از آنها استفاده کرد.
در این بخش پس از اینکه چند جلسه به طور کامل در مورد بانک اطلاعاتی MySQL صحبت کرده بودیم، به سراغ مبحث فایلها در پیاچپی میرویم.
پیاچپی توابع مختلفی را برای گشودن، بستن، ویرایش و نوشتن بر روی فایلها در اختیار توسعهدهندگان قرار داده است. تابع fopen برای ایجاد یک فایل جدید یا باز کردن فایل بکار میرود. اگر فایلی که در این تابع نامش را بکار میبریم وجود داشته باشد باز میشود و اگر وجود نداشته باشد ایجاد میشود. دقت کنید برای کار با فایلها باید با سطوح دسترسی نیز آشنایی داشته باشید. در توابع کار با فایل دسترسیهای زیر مورد استفاده قرار میگیرند:
r: باز کردن و فقط خواندن فایل
w: باز کردن فایل برای نوشتن اطلاعات. محتویات فایل را پاک میکند یا اگر فایل وجود نداشته باشد آن را میسازد.
a: باز کردن فایل فقط برای نوشتن در آن
x: ایجاد فایل جدید فقط برای نوشتن در آن
+r: باز کردن فایل برای نوشتن/خواندن
+w: باز کردن فایل برای نوشتن/خواندن اطلاعات. محتویات فایل را پاک میکند یا اگر فایل وجود نداشته باشد آن را میسازد.
+a: باز کردن فایل به منظور نوشتن/خواندن. اگر فایل وجود نداشته باشد آن را ایجاد میکند.
+x: ایجاد فایل جدید برای خواندن/نوشتن
مثل همیشه نرمافزار Xampp را اجرا و سرور آپاچی و mysql را در حالت اجرا قرار دهید. در پوشه htdocs یک پوشه جدید به نام files ایجاد کرده و در این پوشه یک فایل به نام testfile.php ایجاد کنید. در این فایل کدهای زیر را قرار دهید:
<?php
$myfile = fopen("file.txt", "w");
?>
حالا فایل بالا را با مرورگر اجرا کنید. برای این منظور باید به آدرس http://127.0.0.1/files/testfile.php مراجعه کنید. پس از اجرای این آدرس در مروگر، یک فایل جدید به نام file.txt در پوشهای که فایل testfile.php وجود دارد ساخته خواهد شد.
برای نوشتن اطلاعات در فایلها از تابع fwrite استفاده میکنیم. این تابع دو پارامتر ورودی دارد که پارامتر اول نام فایلی است که قصد نوشتن اطلاعات در آن را داریم و پارامتر دوم متنی است که میخواهیم در فایل نوشته شود. در مثال زیر قصد داریم تا چند نام را در فایل جدیدی به نام names.txt بنویسیم:
<?php
//open or create file
$myfile = fopen("names.txt", "w");
//now write new names to that file
$name1 = "mojtaba\n";
fwrite($myfile, $name1);
$name2 = "miaad\n";
fwrite($myfile, $name2);
$name3 = "masoud\n";
fwrite($myfile, $name3);
fclose($myfile);
?>
همانطور که احتمالا متوجه شدهاید در انتهای کد از تابع دیگری به نام fclose استفاده کردهایم. از آنجا که چندبار در کد بالا فایل names.txt را فراخوانی کردهایم، با این تابع در انتهای کار فایل مورد نظر را میبندیم.
نکته دیگری که در مورد کد بالا وجود دارد این است که در انتهای هر نام از کاراکتر n\ استفاده کردهایم. افرادی که با اچتیامال آشنایی داشته باشند قطعا مفهوم این کاراکتر را میدانند. از n\ به منظور ایجاد خط جدید در فایلها استفاده میکنیم. به این ترتیب در فایل names.txt هر نام در یک خط جدید قرار خواهد گرفت. در نتیجه اگر پس از اجرای کد پیاچپی فوق در مرورگر فایل names.txt را باز کنید به شکل زیر خواهد بود:
mojtaba
miaad
masoud
همانطور که گفتیم تابع ()fclose به منظور بستن یک فایل مورد استفاده قرار میگیرد. این تابع اگر فایل را به درستی و با موفقیت ببندد مقدار true را برمیگرداند و در غیر اینصورت مقدار false برگردانده میشود.
نکته کاربردی: برای تمرین و نیز در انجام دادن پروژههای خود بهتر از همیشه پس از کار با فایلها آنها را با تابع ()fclose ببندید.
اگر قصد دارید اطلاعات جدیدی را به فایل مورد نظر خود اضافه کنید باید آن فایل را در حالت Append باز کنید. به عنوان مثال به کد زیر دقت کنید:
<?php
$myFile = "test.txt";
$fh = fopen($myFile, "a");
fwrite($fh, "new information to be added test file!");
fclose($fh);
?>
در کد بالا و در تمامی مواقعی که یک فایل را در حالت a باز کنید، اطلاعات جدید در آخر فایل اضافه خواهند شد. به عنوان مثال فرض کنید محتویات فایلی به نام file.txt به صورت زیر است:
some data
line 2 of file
حال اگر با استفاده از حالت a این فایل را باز کنیم و اطلاعات جدید به آن اضافه کنیم، به عنوان مثال عبارت new data را به این فایل اضافه کنیم، این فایل به صورت زیر بروزرسانی خواهد شد:
some data
line 2 of file
new data
حال قصد داریم یک مثال کاربردیتر را ایجاد کنیم. در پوشه files که به تازگی در پوشه htdocs ایجاد کرده بودید، یک فایل به نام add.php ایجاد کنید. کد زیر را در این فایل قرار دهید:
<?php
if (isset($_POST['text']))
{
$name = $_POST['text'] . "\n";
$handle = fopen ("names.txt", "a");
fwrite($handle, $name);
fclose($handle);
}
?>
<form method="post" action="">
name : <input type="text" name="text" size="20">
<input type="submit" value="add name to file">
</form>
حال کد بالا را با استفاده از آدرس http://127.0.0.1/files/add.php اجرا کنید. در کد بالا چند نکته مهم وجود دارد. ابتدا به بخش پیاچپی کاری نداشته باشید و فقط فرم را در نظر بگیرید. در کد بالا خاصیت action فرم را خالی گذاشتهایم. در چنین شرایطی اطلاعات این فرم به همین صفحه یعنی فایل add.php ارسال خواهد شد. حال به کد پیاچدی در بالای فایل توجه کنید. ابتدا مثل همیشه با یک دستور شرطی if بررسی میکنید که اگر اطلاعاتی در فیلدی که خاصیت name آن text است وارد شده، آنگاه فایل names.txt در حالت a باز شود، و سپس نام وارد شده به انتهای محتویات فایل باز شده اضافه خواهد شد. همچنین به خط:
$name = $_POST['text'] . "\n";
در کد بالا توجه کنید. در این خط نام وارد شده توسط کاربر را از فرم دریافت کرده و سپس کاراکتر n\ را به انتهای نام اضافه میکنیم تا پس از اضافه شدن در فایل names.txt یک خط جدید ایجاد شود تا نامهای بعدی به همین شکل در یک خط جدید در فایل درج شوند.
پیش از ادامه کار لازم است یک حلقه جدید به نام foreach را به شما آموزش دهیم. اگر خاطرتان باشد در مبحث حلقهها گفتیم که در پیاچپی حلقههای دیگری هم وجود دارند که در جلسات آینده به آنها میپردازیم.
دقت کنید که Foreach فقط برای آرایهها مورد استفاده قرار خواهد گرفت و در واقع در هر بار اجرای حلقه کلید و محتوای یک عضو از آرایه را بر میگرداند. دو روش کلی برای استفاده از این حلقه وجود دارد که در زیر آورده شدهاند:
foreach (array as $value){
//code to run
}
//or
foreach (array as $key => $value){
//code to run
}
در روش اول، مقدار هر عضو از آرایه مورد نظر در هر بار اجرای حلقه در متغیری به نام value$ قرار میگیرد و در هر بار اجرای حلقه میتوان یک عضو ار آرایه را به عنوان مثال چاپ کرد یا عملیات دلخواه را روی آن انجام داد.
اما در روش دوم، کلید هر عضو از آرایه را به key$ تغییر دادهایم و سپس مقدار هر عضو آرایه را در متغیر value$ قرار میدهیم. اگر مبحث آرایهها را بخوبی فراگرفته باشید این حلقه را نیز بخوبی یاد میگیرید.
در هرحال برای درک بهتر این حلقه به مثال زیر توجه کنید. در این مثال یک آرایه به نام names داریم که شامل چند نام است. قصد داریم با استفاده از حلقه foreach تک تک نامهای موجود در این آرایه را چاپ کنیم:
<?php
$AllNames = Array("mojtaba", "hossein", "miaad", "hami", "masoud","mehdi");
foreach ($AllNames as $name)
{
echo $name . "<br>";
}
?>
با اجرای کد فوق، تمامی نامهای موجود در آرایه AllNames هر کدام در یک خط در مرورگر نمایش خواهند یافت. حال که با این حلقه هم آشنا شدید به ادامه مبحث این جلسه میپردازیم.
با استفاده از تابع ()file میتوانیم فایل مورد نظرمان را بخوانیم. این تابع فایل مورد نظر را در قالب یک آرایه برای ما آماده میکند و هر المان از فایل را به عنوان یک عضو از آرایه در نظر میگیرد. فایل names.txt که در این جلسه ایجاد کردهاید اکنون باید شامل چند نام باشد. در واقع در هر خط از این فایل یک نام نوشته شده است.
حال در پوشه files که در پوشه htdocs ایجاد کرده بودید، یک فایل جدید به نام read.php ایجاد کنید. سپس کد زیر را در این فایل قرار دهید:
<?php
$read = file("names.txt");
foreach($read as $name)
{
echo $name . " - ";
}
?>
کد بالا تمام نامهای موجود در فایل names.txt را که در کنار فایل read.php وجود دارد خوانده و آنها را با علامت - از هم جدا میکند. از آنجا که در اینجا محتویات فایل در یک آرایه قرار داده شده از foreach استفاده کردهایم، همانطور که گفتیم این حلقه فقط برای آرایهها بکار گرفته میشود.
در کد بالا از آنجا که پس از هر نام یک علامت خط فاصله - قرار دادهایم، پس از رسیدن به انتهای فایل باز هم پس از نام آخر یک علامت - قرار خواهد گرفت. برای جلوگیری از اضافه شدن خط فاصله پس از آخرین نام باید ابتدا بفهمیم که چه زمانی به انتهای فایل رسیدهایم. بدین منظور از کدی مثل کد زیر باید استفاده کنید:
$read = file("names.txt");
$count = count($count);
$i = 1;
foreach ($read as $line)
{
echo $line;if($i < $count){
echo " - ";
}
$i++;
}
?>
در کد بالا ابتدا با تابع count اقدام به شمارش تعداد اعضای آرایه read$ کردهایم. همانطور که میدانید آرایه یاد شده در واقع دربرگیرنده محتویات فایل names.txt است. سپس با یک حلقه for تمامی اعضای این آرایه را چاپ میکنیم و در هر بار اجرای حلقه یک واحد به متغیر i$ اضافه میکنیم. این متغیر تعداد خطوط را نگهداری میکند. در شرط حلقه بررسی میکنیم که آیا به آخرین خط فایل یعنی آخرین عضو آرایه read رسیدهایم یا خیر، اگر همچنان به انتهای فایل نرسیده باشیم کاراکتر - در ادامه نام چاپ میشود و اگر به آخرین خط فایل رسیده باشیم از آنجا که در حلقه چنین شرطی را نوشتهایم، پس شرط برای خط آخر برقرار نیست و کاراکتر - پس از نام چاپ نمیشود.
اصول کار با فایلها را نیز در این جلسه یاد گرفتید و امیداوریم مباحث این جلسه نیز مورد رضایت شما واقع شده باشد. در صورتی که هرگونه سوالی در مورد این جلسه دارید لطفا آن را در بخش نظرات اعلام کنید. در جلسات آینده به تکمیل سیستم مدیریت محتوای خود بر اساس آنچه تا کنون آموختهایم خواهیم پرداخت. همچنین پس از تکمیل این سیستم مدیریت محتوا سری جدید آمورش پیاچدی در سطح حرفهایتر را آغاز خواهیم کرد.
آموزش PHP - جلسه اول معرفی و ابزارهای مورد نیاز | رفتن به مطلب | |
آموزش PHP - جلسه دوم، متغییرها و توضیحات در کدها | رفتن به مطلب | |
آموزش PHP - جلسه سوم: عملگرها | رفتن به مطلب | |
آموزش PHP - جلسه چهارم: آرایه ها | رفتن به مطلب | |
آموزش PHP - جلسه پنجم: عبارات شرطی، دستور if | رفتن به مطلب | |
آموزش PHP - جلسه ششم: حلقه های While و For | رفتن به مطلب | |
آموزش PHP - جلسه هفتم: دستور Switch و آشنایی با Include و Require | رفتن به مطلب | |
آموزش PHP - جلسه هشتم: توابع | رفتن به مطلب | |
آموزش PHP - جلسه نهم: متغیرهای پیش فرض و فرم ها | رفتن به مطلب | |
آموزش PHP - جلسه دهم: پروژه ارسال ایمیل | رفتن به مطلب | |
آموزش PHP - جلسه یازدهم: اتصال به بانک اطلاعاتی MySQL | رفتن به مطلب | |
آموزش PHP - جلسه دوازدهم: درج اطالاعات در بانک اطلاعاتی MySQL | رفتن به مطلب | |
آموزش PHP - جلسه سیزدهم: خواندن دادهها از بانک اطلاعاتی MySQL | رفتن به مطلب | |
آموزش PHP - جلسه چهاردهم: ویرایش داده در بانک اطلاعاتی MySQL | رفتن به مطلب | |
آموزش PHP - جلسه پانزدهم: حذف داده ها از بانک اطلاعاتی MySQL | رفتن به مطلب | |
آموزش PHP - جلسه شانزدهم: Session و Cookie | رفتن به مطلب | |
آموزش PHP - جلسه هفدهم: کار با فایل ها | رفتن به مطلب | |
آموزش PHP - جلسه هجدهم: کار با تاریخ و ساعت و تاریخ هجری شمسی | رفتن به مطلب | |
آموزش PHP - جلسه نوزدهم: فیلترهای پی اچ پی (مقدماتی) | رفتن به مطلب | |
آموزش PHP - جلسه بیستم: کار با رشته ها | رفتن به مطلب | |
آموزش PHP - جلسه بیست و یکم: شیء گرایی | رفتن به مطلب | |
آموزش PHP - جلسه بیست و دوم: شیء گرایی (بخش دوم) | رفتن به مطلب | |
آموزش PHP: جلسه بیست و سوم: شیءگرایی (بخش سوم) | رفتن به مطلب | |
آموزش PHP: جلسه بیست و چهارم: شیءگرایی (بخش پایانی) | رفتن به مطلب |