كار با فايلها
- كار با فايلها در پي اچ پي
پيوست دادن كدهاي ديگر در كد خود مان:
شما ميتونيد يك كد رو در يك فايل ديگر بنويسد و هرجا لازم شد در يك كد ديگر كه در فايل ديگري هم قرار داره اونو صدا بزنيد تابع Include(); اين امكان رو به شما ميده و باعث سهولت و كم حجم شدن صفحات ميشه .
اين تابع فقط به يك آرگومان نياز داره و اون مسير فايل پي اچ پي هست كه ميخوايم به صفحمون پيوند بديم
بزاريد با يك مثال راحتتر بيان كنم : فرض كنيد ما در فايل a.php يك كد داريم كه يك پيغام رو چاپ ميكنه
حالا ما ميخوايم همين دستور در فايل اول رو در فايل b.php بدون نوشتن دوباره دستور و با دستور اينكلود بنويسيم كافيه بنويسيم
PHP:
// file name is b.php
<?php
include("a.php");
?>
//will Print message in a.php
البته چون در اينجا ما در فايل اولمون يك خط دستور داريم فرقي نميكنه ولي اگه چندين خط و چندين دستور باشه كار مارو خيلي راحت ميكنه چون فقط با يه خط كد ميتونيم همون دستورات رو صدا بزنيم .
حتي ميتونيم يك مقدار رو با دستور اينكلود صدا بزنيم يا دستور اينكلود رو با توجه به يه شرط صدا بزنيم.
يك مثال :
PHP:
<?php
//this file name is a.php
$ret=(4+4);
return $ret;
?>
PHP:
<?php
//this file name is b.php
$flag=true;
if($flag) {
$resualt=include("a.php");
print " The Sum Of (4+4) Is $resualt";
}
?>
همونطور كه ديديد ميتونيم طوري تعريف كنيم كه اگه شرط درست نبود اصلا دستور اينكلود اجرا نشه و در خط بعدي مقدار فايل a.php رو توي يه متغيير ديگه مينوسيسم و چاپ ميكنيم .
خوب بهتر بود قبل از اينكه بقيه آموزش رو بگم اينارو ميدونستيد
حالا ميرسيم به كار با فايل ها :
اولين تابعي كه ميخوايم بررسي كنيم تابع چك كردن وجود يك فايل هست !
به اين مثال توجه كنيد :
PHP:
<?php
if (file_exists("a.php"))
print "The File Exists";
?>
حتي ميتونيد با تابع ديگري بفهميد مسير داده شده يك فايل هست يا يك دايركتوري
PHP:
//Check if it's a file
<?php
if(is_file("a.php")
print"yes this is file";
?>
/*-----------------------------*/
//Check if Current Path is a dir
<?php
if(is_dir("/tmp"))
print"/tmp is valid";
?>
تابع ديگري كه وجود داره توابع is_readable , is_writeable , is_executeable هستن كه چك ميكنن ببينن فايل مورد نظر قابل خواندن و يا نوشتن ويا اجرا شدن هست يا مسير داده شده معتبر هست يا نه و يك مقدار از نوع بولين برميگردونه .
تابع ديگري نيز وجود دارد كه سايز يك فايل رو برميگردونه خيلي ساده:
اين تابع سايز فايل شما رو برحسب بايت نمايش ميده
تابع ديگري كه ميخوايم بررسي كنيم تابع fileatime(); ميباشد كه آخرين باري كه يك فايل دسترسي پيدا كرد رو به ما بر ميگردونه ما در مثال زير ميخوايم بدونيم فايل a.php در چه تاريخ و زماني براي آخرين بار دسترسي پيدا كرده است :
PHP:
<?php
$lasttime=fileatime("a.php");
print "The File last time accessed in ".date("D d M Y g:i A",$lasttime).".";
// Will Print Sat 14 jan 2006 10:30 Pm
?>
تابع filemtime(); نيز مشابه fileatime(); هستش با اين تفاوت كه تاريخ و زمان آخرين باري كه فايل ويرايش شد رو برميگردونه . تابع filectime(); نيز وجود داره كه در سيستم هاي يونيك تاريخ تغيير يا ويرايش فايل رو برميگردونه ولي در پلت فرم هاي ديگه تاريخ بوجود آمدن فايل رو برميگردونه
حالا ميرسيم به توابع كاربردي تر :
تابع:
در صورتي كه فايلي با اين نام وجود نداشته باشد اين فايل رو ايجاد ميكنه ولي اگه وجود داشته باشه كاري نميكنه و فقط تاريخ ويرايش فايل تغيير پيدا ميكنه و فايل از بين نميره
با تابع:
ميتونيد يك فايل رو پاك كنيد.
نكته : در سيستم هاي يونيكس براي اينكه يك فايل را پاك يا ويرايش يا دست يابي پيدا كنيم لازم است كه دسترسي به فايل رو داده باشيد .
بازكردن فايل قبل از خواندن و نوشتن :
قبل از اينكه بتونيد يك فايل رو بخونيد يا محتوايش رو عوض كنيد به اين احتياج داريد كه اون فايل رو باز كنيد
شما با اين دستور ميتونيد يك فايل رو براي خواندن آماده كنيد:
PHP:
$f=fopen("file.txt",'r');
و با اين دستور ميتونيد فايل رو براي نوشتن اماده كنيد :
$
و براي اضافه كردن اطلاعات به يك فايل بايد از اين دستور استفاده كنيد(Append)
PHP:
$f=fopen("file.txt",'a');
بهتره قبل از اينكه اقدام به ويرايش يا باز كردن يك فايل كنيد اون رو امتحان كنيد ببينيد اجازه باز شدن يا ويرايش شدن رو داره ؟
PHP:
If ($fp=fopen("file.txt",'w'))
{
// codehaie marboot be viraiesh file
}
يا ميتونيد بجاي كد بالا اينگونه عمل كنيد:
PHP:
($fp=fopen("file.txt",'w')) or die("Could Not open file");
اگه دستور فوق مقدار درست رو برگردونه پيغام Could Not open file نشون داده نميشه در غير اينصورت نشون داده ميشه .
همون طور كه متوجه شديد هر عملياتي كه بخوايم بر سر فايل اجرا كنيم بايد داخل :
PHP:
Fopen();
// Code
Fclose();
انجام بديم.
پي اچ پي امكانات زيادي رو براي خوندن يك فايل در اختيار ما ميزاره بعنوان مثال شما ميونيد يك فايل رو برحسب بايت يا برحسب لاين يا برحسب كاراكتر بخونيد .
بزاريد ابتدا يك مثال رو نگاه كنيم و بعد توضيحات مربوطه رو بخونيم :
PHP:
<?php
$filename = "test.txt";
$fp = fopen( $filename, "r" ) or die("Couldn't open $filename");
while ( ! feof( $fp ) )
{
$line = fgets( $fp, 1024 );
print "$line<br>";
}
?>
با استفاده از دستور feof(); چك ميكنيم ببينم به آخر فايل رسيديم يا نه و اگه نه ميايم خط به خط با دستور وايل خط هاي فايل رو داخل يك متغيير ميريزيم و اونها رو چاپ ميكنيم . دستور fgets($fp,1024) اينكارو ميكنه و ميگه كه طول هر خط ميتونه تا 1024 بايت باشه.
ما ميتونيم مقدار خاصي از فايلمون رو بخونيم مثلا 16 بايت يا 16 كاراكتر از فايلمون رو بخونيم
PHP:
<?php
$filename = "test.txt";
$fp = fopen( $filename, "r" ) or die("Couldn't open $filename");
while ( ! feof( $fp ) )
{
$chunk = fread( $fp, 16 );
print "$chunk<br>";
}
?>
همونطور كه ديديد با دستور fread( $fp, 16 ); ما 16 كاراكتر از فايلمون رو ميخونيم .
شما ميتونيد با تابع fseek() جاي مشخصي از فايل رو بخونيد به مثال زير نگاه كنيد:
PHP:
<?php
$filename = "test.txt";
$fp = fopen( $filename, "r" ) or die("Couldn't open $filename");
$fsize = filesize($filename);
$halfway = (int)( $fsize / 2 );
fseek( $fp, $halfway );
$chunk = fread( $fp, ($fsize − $halfway) );
print $chunk;
?>
در كد بالا ما نيمه دوم يك فايل رو چاپ ميكنيم همه چيز واضح و روشن هست ونيازي به توضيح نيست.
دستور fgetc(); مثل دستور fgets() ميباشد كه اگه در كد بالا كه خط به خط يك فايل رو اجرا ميكرد بزاريد كاراكتر به كاراكتر فايل رو نشون ميده .
براي نوشتن يا اضافه كردن مقدار به يك فايل بايد ابتدا فايل رو بصورت
PHP:
Foper("file.txt",'w');
Or
Fopen("file.txt",'a');
شما ميتونيد با تابع fwrite(); داخل يك فايل مقداري رو قرار بديد ، دقت كنيد كه در اينصورت محتواي فايل قبلي پاك ميشه و ميتونيد با تابع fputs(); يك مقدار رو به فايل مورد نظر اضافه كنيد .
كار كردن با اين دستورها ساده هست با اين حال يك مثال ميارم :
PHP:
<?php
$filename = "test.txt";
$fp = fopen( $filename, "w" ) or die("Couldn't open $filename");
fwrite( $fp, "Hello world\n" );
fclose( $fp );
print "Appending to $filename<br>";
$fp = fopen( $filename, "a" ) or die("Couldn't open $filename");
fputs( $fp, "And Hello To You\n" );
fclose( $fp );
?>
حال ميرسيم به تابع تعيين دسترسي فايل شما ميتونيد با دستور flock(); براي يك فايل دسترسي هاي متفاوتي رو اعمال كنيد ليست شماره دسترسي ها به اين صورت است
PHP:
1 ---- اجازه خواندن ميده ولي نوشتن خيرàSharing
2 ---- اجازه خواندن و نوشتن نميدهد àExclusive
3 ---- دسترسي هاي بالا را ازاد ميكندàRelease
نوبتي هم باشه نوبت كار با پوشه هاست :
شما ميتونيد با دستور mkdir() , rmdir() پوشه اي ايجاد يا پاك كنيد
توابع ساده اي هستن و نيازي به مثال نيست
يك مثال براي بيشتر آشنا شدن با اين نوع توابع ، ميخوايم فايل هاي داخل يك پوشه رو نمايش بديم
PHP:
<?php
$dirname = "testdir";
$dh = opendir( $dirname );
while ( gettype( $file = readdir( $dh )) != boolean )
{
if ( is_dir( "$dirname/$file" ) )
print "(D)";
print "$file<br>";
}
closedir( $dh );
?>
ما با دستور opendir() پوشه مورد نظرمون رو در ابتدا باز ميكنيم
سپس با دستور وايل مسير فايلهامون رو ميگيريم و چك ميكنيم اگه متعلق به اين دايركتوري بودن عبارت (D) و سپس اسم فايل و مسيرش رو چاپ ميكنيم
در نهايت با دستور closedir() ميبنديم .
دستور readdir مقدار درست يا نادرست رو برميگردونه و اين بر حسب اين هست كه هر عددي بجز صفر مقدارش ترو ميشه بزاريد با مثالي توضيج بدم فرض كنيم ما چهار تا فايل داريم كه بر حسب ايندكس ما ميايم اينارو داخل وايل چك ميكنيم و تا زماني كه ايندكس صفر نشده شرط وايل ما درست هست و ادامه ميده و هنگامي كه صفر شد از وايل خارج ميشه .