توابع php - کار با فایل ها

دسته بندی: آموزش
زمان مطالعه: ۲ دقیقه
۰۴ شهریور ۱۳۹۳

کار با فایل ها در هر زبانی یکی از جالب ترین مباحث ممکن هست . در این جلسه ما به تشریح توابع PHP برای کار با فایل ها می پردازیم و در انتها یک مینی پروژه ی بسیار جالب و کاربردی رو با هم مینویسیم . یه فایل منیجر ساده با قابلیت های لیست کردن فایل ها، حذف فایل ها ، ویرایش فایل ها و ...

:: محتویات این جلسه عبارتند از :

کار با فايل ها در PHP :

  • ايجاد فايل و فولدر در سرور
  • دريافت اطلاعات کامل يک فايل
  • دريافت نام فايل با استفاده از مسير آن
  • دريافت مسير فولدر حاوي فايل از مسير آن
  • چک کردن وجود يا عدم وجود يک فايل
  • چک کردن فايل/پوشه بودن يا نبودن يک فايل
  • خواندن کل محتواي فايل و قراردادن آن در يک آرايه
  • خواندن فايل و دريافت کل محتواي آن به عنوان يک رشته
  • نوشتن يا اضافه کردن اطلاعات از يک رشته به درون فايل
  • بازکردن و بستن يک فايل
  • خواندن اطلاعات از درون يک فايل
  • نوشتن اطلاعات در فايل
  • دريافت سايز و فرمت (نوع) فايل
  • آپلود و انتقال فايل بر روي سرور
  • دريافت نام و اطلاعات فايل هاي موجود در پوشه ها
  • اجبار به دانلود فايل با استفاده از php
  • تغير مجوزهاي دسترسي به فايل
  • کپي کردن يک فايل به آدرسي ديگر
  • تغير نام فايل بر روي سرور
  • حذف فايل ها و پوشه ها
  • دريافت اطلاعات فضاي خالي وکل ديسک سرور
  • ميني پروژه : اسکريپت فايل منيجر با قابليت ليست کردن، ويرايش، حذف و اضافه کردن فايلها
  • توابع متفرقه
نکته :

یک تابع به نام file در php وجود داره که محتویات یک فایل رو در یک آرایه قرار میده . (هر خط فایل یک عضو آرایه) . این مورد در ویدیو از قلم افتاده بود که گفتم خدمتتون ذکر کنم !

:: توجه

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

ثبت نام در آموزش PHP

نویسنده
بیش از 15 سال هست که برنامه نویسی می کنم و از بین همه زبون هایی که کار کردم جاوا، اسمبلی و php رو دوست دارم. دانشجوی دکترای نرم افزارم و توی دانشگاه روی پردازش بیگ دیتا و پردازش موازی کار کردم و عاشق چالش از هر نوعیش هستم! سون لرن مثل بچه منه که 12 سال براش وقت گذاشتم، اینجا همه تلاش می کنیم از شروع یادگیری تا ورود به بازر کار حوزه برنامه نویسی و IT همراهتون باشیم.

جلسات دوره

نظرات کاربران

ahmadsh

سلام استاد اوند به شما و تیمتون خسته نباشید میگم تابحال 5 دوره از سایت شما خریداری کردم و از همشون راضی بودم

Seyed Reza Bazyar

سلام استاد
من یه فایل php دارم حاوی مقدار کد که وقتی اجرا بشه، یه فایل رو برام ایجاد میکنه
حالا این فایل رو روی هاست آپلود میکنم. چیکار کنم که بدون دخالت انسان، هر روز ساعت ۱۲ ظهر یک بار این کد اجرا بشه؟

لقمان آوند

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

بهزاد مرندی کهن

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

رستاییان

با سلام تشکر از اموزش های پروژه محور تون خیلی از شیوه توضیح کدنویسی تون مخصوصا در جلسه کوکی ها خوشم اومد خیلی خوب مراحل کدنویسی رو عملا یاد دادین. درباره تابع getNiceFileSize() باید بگم که
if (!realpath($filePath)) {
$filePath = $_SERVER[“DOCUMENT_ROOT”] . $filePath;
}
اگر مسیر فایلی که دادیم شامل سمبل( مانند ‘/./’ و ‘/../’) باشه و شرط اجرا شه اونوقت این دستور در شرط یه مسیر ناخوانا تولید میکنه! اشتباه میکنم ؟
$filePath = $_SERVER[“DOCUMENT_ROOT”] . $filePath;

Star

آقای علی محمدی عزیز،
تشکر ممنونم ازتون بابت قطعه کد،
ساخت یک فولدر به صورت فارسی به چه صورت هست؟
وقتی یک فولدر به صورت فارسی می سازم حروفش همه بهم ریخته است!
برای Rename کردن فایل هم به فارسی مشکل دارم و نمی تونم به صورت فارسی Rename کنم.
ببینید من می خواهم یک فایل منیجر درست کنم که ساخت فولدر و آپلود فایل و حذف و … داشته باشه. تا الان ساخت فولدر و آپلود و حذف و تغییر نام و … را درست کردم ولی همشون با فارسی مشکل دارند.
با این قطعه کد شما تونستم لیست کردن فایل ها و فولدر ها را به صورت فارسی اوکی کنم.
تشکر از پاسختون

کیوان علی محمدی

خواهش میکنم. می تونید با توابعی مثل mb_convert_encoding مطمئن بشید که اسم دایرکتوری به صورت یونیکد در اومده.نمونه کد زیر به صورت صحیح تست شده.

< ?php class FileBrowser { public function __construct() { // $this->getCurrentDirectoryFiles();
}

private function getCurrentDirectoryFiles()
{
foreach (glob('*.txt') as $file) {
echo $file . '
';
}
}

public function createDirectory($name = "")
{
if(empty($name)){
return false;
}
mkdir(__DIR__.DIRECTORY_SEPARATOR.mb_convert_encoding($name,"UTF-8"));
}
}

$handler = new FileBrowser();
$handler->createDirectory("فایل ها");

Star

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

Star

PHP Version 7.0.8

کیوان علی محمدی

نسخه php شما بالاست. به نظرم مشکل یا از سیستم شما باشه. بهتره از control panel در قسمت Region و تب administrative در بخش Language For non-Unicode Programs روی دکمه Change System Locale کلیک کنید و مقدار Persian رو براش انتخاب کنید. یکبار سیستم ریستارت کنید و دوباره تست کنید.

کیوان علی محمدی

نسخه php شما چنده؟

Star

احیانا قرار نیست به سوال من جواب بدید؟ 8 فروردین تا الان خیلی هست!

کیوان علی محمدی

سلام دوست عزیز.. ببخشید به خاطر تاخیر چی بوده سوالتون؟

Star

سلام، تشکر از پاسختون،
سوالم از مدرس دوره آقای دکتر آوند بود، اگر شما بتونید جواب بدید که خیلی عالی هست…
سوال من:
چطور می شه فایل های فارسی در یک فولدر را نشان داد؟ file manager ای که شما زحمت کشیدید نوشتید با کلمات فارسی مشکل دارد..

با تشکر

کیوان علی محمدی

سلام مجدد. بسته به نسخه های php و هم چنین سیستم عامل ممکنه این مشکل پیش بیاد. ترجیحا سعی کنید از نسخه های php 5.5به بعد استفاده کنید. با نسخه php 5.6 تست کردیم و مشکلی نداره. هم چنین برای دریافت لیست فایل ها از تابع glob خود php استفاده شده.در زیر نمونه کد تست شده رو قرار میدیم(البته این کد ربطی به آموزش این جلسه نداره).

class FileBrowser
{
public function __construct()
{
$this->getCurrentDirectoryFiles();
}

private function getCurrentDirectoryFiles()
{
foreach (glob('*.txt') as $file){
echo $file.'
';
}
}
}
new FileBrowser();

Star

سلام وقت بخیر،
چطور می شه فایل های فارسی در یک فولدر را نشان داد؟ file manager ای که شما زحمت کشیدید نوشتید با کلمات فارسی مشکل دارد..

کیوان علی محمدی

سلام تابع mb_convert_encoding رو تست کنید برای نمایش متن ها.

لقمان آوند

پاسخ داده شد
موفق باشید

لقمان آوند

یکم دقت می خواد
این تابع برای هر دیرکتوری یک بار صدا زده میشه و به صورت بازگشتی فایل های درونش رو باز میکنه. وقتی به ازای هر dir یکبار صدا زده بشه بعد از بازگشت از اجرای تابعی که در اون مرحله صدا زده میشه اجرای کد از خط بعد از صدا زدن بازگشتی از سر گرفته میشه! و در واقع در نهایت برای هر فولدر اون خط آخر که rmdir هست اجرا میشه و همه فولدرها حذف میشه!
امیدوارم که متوجه شده باشید. یکم توضیح اجرای توابع بازگشتی سخته.
خیلی راحت با اضافه کردن دو تا خط به کد می تونستی متوجه شی :

function rmDirectory($dir)
{
 foreach (glob($dir . '/*') as $file) {
  if (is_dir($file)) {
   rmDirectory($file);
  } else {
   echo "file: $file<br>";
   unlink($file);
  }
 }
 echo "dir : $dir<br>";
 rmdir($dir);
}

یکم تجربتون بالاتر بره این موارد رو بهتر متوجه میشید.
کلا هر جا ابهامی در نحوه و مراحل اجرای کد داشتید می تونید یه سری اکو اینطوری اضافه کنید. (لاگ کنید!)

لقمان آوند

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

پایان زمان پشتیبانی

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

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

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.
گزارش مشکل