تابع file_get_contents در php یک از توابع مدیریت فایل ها در این زبان اسکریپت نویسی است . تابع file_get_contents تمام اطلاعات داخل فایل منبع یا url پاس داده شده را به عنوان یک داده رشته ای می خواند .
تابع file_get_contents
یکی از پر استفاده ترین توابع در میان تابع هایی که برای خواندن فایل استفاده می شود ، است برای مثال تابع file()
، fread()
و غیره … .
سینتکس تابع file_get_contents در php
ما باید تابع file_get_contents در اسکریپت php را به ترتیب و syntax زیر به کار ببریم .
1 |
file_get_contents(string $file_name, bool $use_include_path = false, resource $context, int $start = -1, int $limit) |
پارامتر های تابع file_get_contents در php
حالا ، نگاهی به جزئیات تابع file_get_contents() می اندازیم .
$file_name
– نام یا آدرس فایل منبع که تعریف آن اجباری است$use_include_path
– این یک فلگ (flag) است و فقط مقادیر boolean را می پذرید .اگر TRUE باشد ، مقدار ثابتFILE_USE_INCLUDE_PATH
هنگام جستجو در فایل استفاده خواهد شد . در ورژن های php5.5 به بالا باید مقدارFILE_USE_INCLUDE_PATH
را به جای TRUE قرار بدیم.$context
– اگر یک سری پارامتر برای آدرس مقصد فایل بخواهیم ارسال کنیم ، از این پارامتر می توانیم استفاده کنیم.$start
– این پارامتر برای ست کردن offset فایل برای اینکه از کجا خواندن اطلاعات فایل شروع شود ، مورد استفاده قرار می گیرد.$limit
– این مقدار برای ست کردن مقدار محدودیت خواندن کاراکتر های فایل استفاده می شود.
نکته :
- Offset های
$start
و$limit
برای دریافت قسمت های خاصی از فایل به جای خواندن کل محتوای فایل مورد استفاده قرار می گیرد. - مقدار پیش فرض مقدار start همان نقطه شروع فایل و limit مقدار طول کل فایل را میگیرد
مثال تابع file_get_contents در php
دو مثال از دریافت محتوای کل فایل و محتوای قسمتی از فایل را با هم بررسی می کنیم .
دریافت محتوای فایل توسط تابع file_get_contents در php
در این کد php ، از تابع file_get_contents()
برای خواندن سورس کامل فایل title_form.html استفاده می کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<html> <head> <title>Importing HTML</title> </head> <body> <form name="frmTitle"> <tr> <td>Title</td> <td> <input type="text" name="title" /> <input type="submit" value="Submit" /> </td> </tr> <tr> </form> </body> </html> |
حالا ، با استفاده از کد php زیر محتوای سورس خوانده شده را به عنوان خروجی در مرورگر چاپ می کنیم.
1 2 3 4 5 6 7 8 9 10 11 |
<?php $file_name = "title_form.html"; $file_content = file_get_contents($file_name); echo $file_content . "<br/>"; /* Printing file content including HTML tags */ $html_content = str_replace("<","<",$file_content); $html_content = str_replace(">",">",$html_content); $html_content = str_replace("\r\n","<br/>",$html_content); echo $html_content; ?> |
برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود
اولین دستور echo
برای نمایش خروجی فایل با نمایش فرم html و فیلد های آن استفاده شده است و همچنین از دستور str_replace
برای جایگزین کردن کاراکترهای تگ باز و بسته html با کاراکترهای رزرو شده html استفاده شده است.
همچنین کاراکتر های رفتن به خط جدید در php را با line breaks های html یا همان <br> برای نمایش بهتر نتیجه ، جایگزین کردیم.
نمایش محدود بایت های محتوای فایل
حالا ، قصد داریم قسمت خاصی از محتوای فایل را با مشخص کردن دو پارامتر start و پایان limit با تابع file_get_contents در php ، دریافت و نمایش دهیم .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $file_name = "title_form.html"; $head_content = file_get_contents($file_name,FALSE,NULL,7,48); printHTMLContent($head_content); $form_content = file_get_contents($file_name,FALSE,NULL,62,157); printHTMLContent($form_content); /* Printing file content including HTML tags */ function printHTMLContent($content) { $content = str_replace("<","<",$content); $content = str_replace(">",">",$content); $content = str_replace("\r\n","<br/>",$content); echo $content . "<br/>"; } ?> |
با استفاده از اسکریپت php بالا ، می توانیم قسمت HEAD اچ تی ام ال و قسمت FORM را با ست کردن مقدار start و limit در تابع file_get_contents دریافت کنیم
همچنین می توانید به جای فایل ، آدرس url یک سایت یا صفحه خاصی را به تابع بدهید و اطلاعات آن را دریافت و انواع ویرایش ها با آن انجام بدید .
احتیاط
- زمانی که آدرس یا اسم یک فایل اشتباه را در تابع file_get_contents() مشخص می کنید ، در اینصورت تابع یک خطای PHP file not found نمایش می دهد . برای آشنایی با انواع خطاها در php کلیک کنید.
- همچنین اگر مقدار پارامتر های
$start
و$limit
را به درستی ست نکنید ، در این صورت هم تابع file_get_contents در php یک خطای Notice در مرورگر چاپ می کند.
نکته
در بعضی سرورها بنابر دلایل امنیتی مانند جلوگیری از اکسپلویت شدن باگ های LFI و RFI مقدار allow_url_fopen
را غیرفعال می کنند که در اینصورت نمی توانید از تابع file_get_contents
استفاده کنید.
برای اینکه اسکریپت شما به مشکل برنخورد نیاز است که فعال/غیر فعال بودن این تابع را قبل از استفاده بررسی کنید .برای اینکار از شرط زیر می توانید بهره ببرید
1 2 3 |
if( ini_get('allow_url_fopen') ) { exit('You Can\'t Use file_get_contens() . Instead Use cURL'); } |
در این شرط اجرای برنامه را متوقف کردیم ولی شما به جای این خط کد می توانید تابع مربوط به اجرای درخواست به آدرس URL موردنظر را با cURL انجام بدید (آموزش cURL در PHP)
جمع بندی
توابع کار با فایل ها و آدرس های URL بسیار پرکاربرد هستند و به صورت های مختلف استفاده می شوند.
فرض کنید سایتی دارید که قصد دریافت اطلاعات بروز سکه ، ارز را از بانک یا سایت معتبر دریافت کنید یا آخرین ساعات پرواز و حرکت هواپیما ، قطار یا اینکه اطلاعات آب و هوا یا حتی نتایج بازی هایی مثل فوتبال و والیبال و غیره .. را در قسمتی از سایت خود یا حتی اپ اندروید برای کاربران نمایش دهید .
اینجاست که باید از تابع file_get_contents یا کتابخانه بی نظیر cURL استفاده کنید تا نتابج بروز و آپدیت شده و لحظه ای را نمایش بدید
برای اینکه قدرت این توابع را درک کنید حتما مقاله آموزش cURL در php را مطالعه کنید.
بنابراین برای فایل های داخلی سرور از file_get_contents و برای انجام تنظیمات بیشتر مثل ارسال پارامترها,ست کردن هدر و غیره… بر روی آدرس های URL خارجی از cURL استفاده کنید.
هرگونه مشکلی در پیاده سازی کد ها داشتید از قسمت نظرات ارسال کنید . سریعا پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید .
سلام لطفا آموزش دریافت اطلاعات از سایت دیگر رو بااستفاده از این کد قرار بدین ممنونم میشم هرچی میزنم نمیشه
ممنونم میشم
سلام. کافیه که آدرس صفحه رو به تابع بدید خروجی همان کل صفحه است.
اگر سایت خروجی نمیده مطمینا فایروال سرور اجازه دسترسی نمیده که در این صفحه یک سری کد برای دورزدن این موارد هست:
استخراج کل url های یک صفحه توسط php
همچنین در نظرات آن پست یک سری راهکار داده شده
موفق باشید.
من میخوام یک قسمت از سایت رو دریافت کنم یعنی یک قسمت مثلا جدول لیگ میشه راهنمایی کنید
سلام. باید با مفهوم اسکرپینگ آشنا باشید و php را هم متوسط به بالا یاد بگیرید
آموزش scrapping در php
کتاب آموزش php صفر تا صد
همچنین توجه کنید که ایمیل www. ندارد و بدون www ثبت کنید
سلام لطفا آموزش استفاده از Preg_match_all در سایت قرار بدین ممنونم میشم
سلام.
تابع preg_match_all همان تابع preg_match با آپشن /g هست که به جای پیدا کردن یک نتیجه همه نتایج را برگشت می دهد.
در این مقالات آموزش ها مربوطه موجود هست :
آموزش Regular Expression در php (عبارت باقاعده)
توابع کار با رشته ها در php
سلام ، من برنامه نویس APPLICATION با سی شارپ هستم و دارم میام سمت وب با HTML و CSS و PHP تا حدی آشنا هستم به خصوص که یه زمانی برنامه های خوبی با سی و سی پلاس پلاس می نوشتم..
از مقالاتت خوشم میاد ادامه بده ممنون
با تشکر از مطالب خوبتون
سلام. بسیار خوشحالیم که مورد رضایت شما قرار گرفته. چشم حتما سعیمان بر این است که هر روز مطالب جدید در حوزه وب را منتشر کنیم.
موفق باشید.