هر برنامه بر اساس نیاز باید داده ها را منبع های متفاوتی بخواند. پایگاه داده های رابطه ای، پایگاه داده های NoSQL، فایل های متنی ساده، فایل متنی نیمه ساخت یافته (Semi Structure) مانند JSON و XML، داده های وب سایت ها که بوسیله وب اسکرپینگ بدست می آیند و حتی شیوه های نوین تر مانند RDF و به کارگیری Sparql، همگی شیوه هایی ها و منابع داده ای هستند که یک برنامه می تواند آنها را خونده یا روی آنها بنویسد.

در این مطلب می خواهیم در مورد چگونگی خواندن فایل های متنی ساده در پی اچ پی صحبت کنیم و در مطلبهای پیش رو و در ادامه خواندن از منابع متفاوت، چگونگی خواندن فایل های JSON از وب، تعامل با پایگاه داده رابطه ای بوسیله PDO و چگونگی وب اسکرپینگ در پی اچ پی را برای بدست آوردن داده های وب سایت ها را آموزش داده ایم. همچنین اگر به وب اسکرپینگ (Web Scraping) علاقه مند هستید، می توانید دوره ویژه وب اسکرپینگ به زبان پایتون را نیز بخوانید.

استخراج داده های وب با پایتون

خواندن فایل متنی از سیستم فایل

پی اچ پی زبانی با تابع های درونی بسیاری برای انجام کارهای متفاوت است. یک دسته از این تابع ها در ارتباط با سیستم فایل و انجام درخواست هایی رو سیستم فایل است. تمامی آن چیزی که شما برای تعامل با سیستم فایل مانند خواندن و نوشتن فایل ها، دسترسی به ویژگی های یک فایل مانند اندازه فایل، مالک و گروه مالک فایل و تغییر مالک و گروه مالک فایل، خواندن یک دایرکتوری، تغییر از یک دایرکتوری به دایرکتوری دیگر، بررسی وجود یک فایل در مسیری از سیستم فایل، دریافت واپسین زمان دسرسی (Access Time یا atime) و واپسین زمان تغییر (Change Time یا ctime) و دیگر درخواست ها را می توانید با پی اچ پی انجام دهید. در این مطلب بوسیله تابع های file_get_contents و file_put_contents می خواهیم یک فایل را خوانده و بر روی آن بنویسیم.

تابع ()file_get_content

تابع ()file_get_content مسیر یک فایل یا متغیری که مسیر یک فایل را در خود دارد را دریافت و سپس یک رشته برمی گرداند که رشته برگشتی همان محتوای درون فایل است. در شکل زیر نخست بوسیله تابع ()file_exists بررسی شده که آیا فایلی در مسیر درون متغیر filename$ وجود دارد و اگر وجود داشته باشد مقدار true برگشت داده می شود. در صورتی که فایل پیدا نشود، در خط ۱۴ یک Exception (یا استثنا) با پیغام File not found نشان داده خواهد شد.

سپس بررسی می شود که آیا مسیر، به یک فایل اشاره دارد. (شاید مسیر مربوط به یک دایرکتوری – فولدر باشد) در صورتی که فایل باشد، پس نخست محتوای فایل بوسیله تابع ()get_file_content خوانده شده و سپس یک پیغام ساده نشان داده می شود و در پایان خود محتوای فایل که درون متغیر file_content$ ریخته شده است، نمایش داده خواهد شد. در صورتی که مسیر یک فایل نباشد، پس در خط ۱۱ نیز یک استثنا با پیغام دلخواه نشان داده می شود.

تابع ()file_put_contents

تابع ()file_put_contents در برابر تابع تابع ()file_get_contents قرار دارد و آن را برای نوشتن یک رشته به درون یک فایل به کار می بریم. در شکل زیر یک آرایه داریم که شامل نام برخی از سیستم عامل ها است و می خواهیم آنرا به یک رشته تبدیل کنیم، برای این منظور می بایست تابع ()implode را به کار ببریم.

تابع ()implode در پی اچ پی

همانطور که گفتیم کاربرد تابع  ()implode تبدیل یک آرایه به یک تک رشته است، سپس این تک رشته باید برای نوشته شدن به درون یک فایل به تابع ()file_put_contents فرستاده شود. همانطور که در کد زیر می بینید، آرگومان یکم تابع ()file_get_content مسیر یک فایل متنی و آرگومان دوم آن داده یا رشته ای است که باید نوشته شود.

تابع ()file در پی اچ پی

در کنار تابع ()file_get_contents تابع دیگری به نام ()file در پی اچ پی هست که تا اندازه ای همانند یکدیگر هستند با این تفاوت که مقدار برگشتی تابع ()file_get_contents تمامی محتوای یک فایل به صورت یک رشته ایت ولی مقدار برگشتی تابع ()file تمامی محتوای یک فایل به صورت یک آرایه ای است، که هر عنصر آن برابر با یک خط در فایل است.

در شکل زیر نخست فایل مشخص شده بوسیله متغیر filename$ خوانده شده و خروجی آن که یک آرایه است درون متغیر file_content$ نگهداری می شود. سپس بوسیله تابع ()gettype گونه متغیر file_contenr$ که یک array است نمایش داده شده و در پایان و بوسیله یک حلقه foreach و در هر گام هر عنصر آرایه که برابر با یک خط آرایه است، نشان داده می شود. توجه کنید آرایه برگشتی، به صورت معمولی است، پس در هر گام متغیر line$ به یک عدد اندیس (Index) اشاره دارد که از عدد صفر آغاز می شود. همچنین متغیر content$ نیز در هر گام به یک خط یا عنصر آرایه اشاره دارد.

بنابراین اگر بخواهیم تمام یک فایل را به صورت یک رشته بخوانیم، پس باید تابع ()file_get_contents را به کار ببریم ولی اگر بخواهیم محتوای یک فایل را خط به خط و درون یک آرایه بخوانیم، باید تابع ()file را به کار ببریم. در مطلب های دوره فریم ورک لاراول رو کاربردهای دیگری از تابع ()file_get_contents برای خواندن فایل json از وب و پردازش آن برای نمایش اب و هوا را آموزش داده ایم.

دریافت وضعیت آب و هوا در لاراول – معرفی JSON

دریافت وضعیت آب و هوا در لاراول – محتوای JSON

دریافت وضعیت آب و هوا در لاراول – کنترل گر