آموزش PHP قسمت پنجم

  • September 23, 2022 8:41 pm
  1. تاریخ و زمان در PHP
  2. کار با فایلها در PHP
  3. باز کردن/خواندن/بستن فایل
  4. ایجاد/نوشتن فایل
  5. آپلود فایل

۲۳. تاریخ و زمان در PHP

تابع date() PHP برای قالب بندی تاریخ و یا زمان استفاده می شود.

تابع ()Date

تابع ()date یک timestamp را به تاریخ و زمان قابل خواندن تر فرمت می کند.
 
سینتکس:
date(format,timestamp)
پارامتر شرح
format
ضروری. فرمت مهر زمانی را مشخص می کند
timestamp
اختیاری. مهر زمانی را مشخص می کند. پیش فرض تاریخ و زمان فعلی است

نکته: مهر زمانی timestamp مجموعه ای از کاراکترها است که نشان دهنده تاریخ و/یا زمانی است که در آن یک رویداد خاص رخ داده است.

تاریخ

پارامترهای تابع ()date نحوه قالب بندی تاریخ (یا زمان) را مشخص می کنند.
 
در اینجا برخی از کاراکترهایی که معمولاً برای تاریخ استفاده می شوند آورده شده است:
  • d – نشان دهنده روز ماه (01 تا 31) است.
  • m – نشان دهنده یک ماه (01 تا 12)
  • Y – یک سال را نشان می دهد (در چهار رقم)
  • l – (حرف کوچک “L”) – نشان دهنده روز هفته است
کاراکترهای دیگر، مانند”/”، “.”، یا “-” را نیز می‌توان بین کاراکترها برای افزودن قالب‌بندی اضافه کرد.
 
مثال زیر تاریخ امروز را به سه روش مختلف قالب‌بندی می‌کند:
<?php

echo "Today is " . date("Y/m/d") . "<br>";
echo "Today is " . date("Y.m.d") . "<br>";
echo "Today is " . date("Y-m-d") . "<br>";
echo "Today is " . date("l");

?>
flesh

Today is 2022/09/22
Today is 2022.09.22
Today is 2022-09-22
Today is Thursday

استفاده از تابع ()Date برای درج خودکار تاریخ حق چاپ:

&copy; 2010-<?php echo date("Y");?>
flesh

© 2010-2022

زمان

در اینجا چند کاراکتر وجود دارد که معمولاً برای زمان ها استفاده می شوند:
  • H – فرمت 24 ساعته یک ساعت (00 تا 23)
  • h – قالب 12 ساعته یک ساعت با صفرهای ابتدایی (01 تا 12)
  • i – دقیقه با صفرهای ابتدایی (00 تا 59)
  • s – ثانیه با صفرهای ابتدایی (00 تا 59)
  • a – حروف کوچک Ante meridiem و Post meridiem (صبح یا بعد از ظهر am و pm)
مثال زیر زمان جاری را در قالب مشخص شده خروجی می دهد:
<?php

echo "The time is " . date("h:i:sa");

?>
flesh

The time is 09:31:53am

نکته: توجه داشته باشید که تابع ()date تاریخ/زمان فعلی سرور را برمی گرداند!

منطقه زمانی

اگر زمان دریافت کد صحیح نیست، احتمالاً به این دلیل است که سرور شما در کشور دیگری است یا برای منطقه زمانی دیگری تنظیم شده است.
 
بنابراین، اگر به زمان مناسب نیاز دارید، می‌توانید منطقه زمانی را که می‌خواهید استفاده کنید تنظیم کنید.
مثال زیر منطقه زمانی را روی “America/New_York” تنظیم می کند، سپس زمان فعلی را در قالب مشخص شده خروجی می دهد:
<?php

date_default_timezone_set("America/New_York");
echo "The time is " . date("h:i:sa");

?>
flesh

The time is 03:41:36am

ایجاد یک تاریخ با تابع ()mktime

پارامتر زمان اختیاری در تابع ()date یک مهر زمان ( timestamp ) را مشخص می کند. در صورت حذف، از تاریخ و زمان فعلی استفاده می شود (مانند مثال های بالا).
 
تابع ()mktime زمان یونیکس را برای یک تاریخ برمی گرداند. timestamp یونیکس حاوی تعداد ثانیه‌های بین دوره یونیکس (1 ژانویه 1970 ساعت 00:00:00 GMT) و زمان مشخص شده است.
 
سینتکس:
mktime(hour, minute, second, month, day, year)
مثال زیر یک تاریخ و زمان با تابع ()date از تعدادی پارامتر در تابع ()mktime ایجاد می کند:
<?php

$d=mktime(11, 14, 54, 8, 12, 2014);
echo "Created date is " . date("Y-m-d h:i:sa", $d);

?>
flesh

Created date is 2014-08-12 11:14:54am

ایجاد تاریخ از یک رشته با ()strtotime

تابع ()strtotime برای تبدیل یک رشته تاریخ قابل خواندن توسط انسان به یک مهر زمانی یونیکس (تعداد ثانیه از 1 ژانویه 1970 ساعت 00:00:00 GMT) استفاده می شود.

سینتکس:

strtotime(time, now)
مثال زیر یک تاریخ و زمان از تابع ()strtotime ایجاد می کند:
<?php

$d=strtotime("10:30pm April 15 2014");
echo "Created date is " . date("Y-m-d h:i:sa", $d);

?>
flesh

Created date is 2014-04-15 10:30:00pm

PHP در مورد تبدیل رشته به تاریخ بسیار هوشمندانه عمل می کند، بنابراین می توانید مقادیر مختلفی را وارد کنید:
<?php

$d=strtotime("tomorrow");
echo date("Y-m-d h:i:sa", $d) . "<br>";

$d=strtotime("next Saturday");
echo date("Y-m-d h:i:sa", $d) . "<br>";

$d=strtotime("+3 Months");
echo date("Y-m-d h:i:sa", $d) . "<br>";

?>
flesh

2022-09-23 12:00:00am
2022-09-24 12:00:00am
2022-12-22 10:28:44am

با این حال، ()strtotime کامل نیست، بنابراین به یاد داشته باشید که رشته هایی را که در آنجا قرار داده اید بررسی کنید.

حل چند مثال از DATE

 

مثال زیر تاریخ های شش شنبه آینده را نشان می دهد:
<?php

$startdate = strtotime("Saturday");
$enddate = strtotime("+6 weeks", $startdate);

while ($startdate < $enddate) {
  echo date("M d", $startdate) . "<br>";
  $startdate = strtotime("+1 week", $startdate);
}

?>
flesh

Sep 24
Oct 01
Oct 08
Oct 15
Oct 22
Oct 29

مثال زیر تعداد روزهای تا 4 جولای را نشان می دهد:
<?php

$d1=strtotime("July 04");
$d2=ceil(($d1-time())/60/60/24);
echo "There are " . $d2 ." days until 4th of July.";

?>
flesh

There are -80 days until 4th of July.

۲۴. Include کردن فایل در PHP

عبارت include (یا require) تمام متن/کد/نشانه گذاری موجود در فایل مشخص شده را می گیرد و آن را در فایلی کپی می کند که از عبارت include استفاده می کند.
 
گنجاندن فایل‌ها زمانی استفاده می شود که می‌خواهید یک فایل PHP، HTML یا متن را در چندین صفحه از یک وب‌سایت قرار دهید.
 
 

دستورات Include و Require

این امکان وجود دارد که محتوای یک فایل PHP را در یک فایل PHP دیگر (قبل از اجرای سرور) با عبارت include یا require وارد کنید.
 

دستورات Include و Require یکسان هستند، به جز در صورت ارور و اعلان خطا:

  • require یک خطای مهلک (E_COMPILE_ERROR) ایجاد می کند و اسکریپت را متوقف می کند.
  • include فقط یک هشدار (E_WARNING) تولید می کند و اسکریپت ادامه می یابد.
بنابراین، اگر می‌خواهید اجرا ادامه پیدا کند و خروجی را به کاربران نشان دهد، حتی اگر فایل include وجود نداشته باشد، از عبارت include استفاده کنید. در غیر این صورت، در مورد FrameWork، CMS، یا برنامه نویسی پیچیده PHP، همیشه از دستور require برای گنجاندن یک فایل کلیدی در جریان اجرا استفاده کنید. زیرا در صورتی که یک فایل کلیدی به طور تصادفی گم شده باشدبه جلوگیری از به خطر افتادن امنیت و یکپارچگی برنامه شما کمک می کند .
 
گنجاندن فایل ها باعث صرفه جویی در کار می شود. این بدان معناست که شما می توانید یک فایل هدر، فوتر یا منوی استاندارد برای تمام صفحات وب خود ایجاد کنید. سپس، زمانی که هدر باید به روز شود، کافی است فایل شامل هدر را به روز کنید.
 
سینتکس:
include 'filename';

or

require 'filename';

مثالهای Include:

مثال ۱ :

فرض کنید یک فایل پاورقی استاندارد به نام “footer.php” داریم که به شکل زیر است:
<?php

echo "<p>Copyright &copy; 1999-" . date("Y") . " raiatec.com</p>";

?>
برای گنجاندن فایل فوتر در یک صفحه، از عبارت include استفاده کنید:
<html>
<body>

<h3>Welcome to my home page!</h3>
<p>Some text.</p>
<p>Some more text.</p>
<?php include 'footer.php';?>

</body>
</html>
flesh

Welcome to my home page!

Some text.

Some more text.

Copyright © 1999-2022 raiatec.com

مثال۲:

فرض کنید یک فایل منوی استاندارد به نام “menu.php” داریم:
<?php

echo '<a href="/default.asp">Home</a> -
<a href="/html/default.asp">HTML Tutorial</a> -
<a href="/css/default.asp">CSS Tutorial</a> -
<a href="/js/default.asp">JavaScript Tutorial</a> -
<a href="default.asp">PHP Tutorial</a>';

?>
همه صفحات در وب سایت باید از این فایل منو استفاده کنند. در اینجا نحوه انجام این کار آمده است (ما از عنصر <div> استفاده می کنیم تا بعداً بتوان منو به راحتی با CSS استایل دهی کرد):
<html>
<body>

<div class="menu">
<?php include 'menu.php';?>
</div>

<h3>Welcome to my home page!</h3>
<p>Some text.</p>
<p>Some more text.</p>

</body>
</html>
flesh

Home – HTML Tutorial – CSS Tutorial – JavaScript Tutorial – PHP 7 Tutorial

Welcome to my home page!

Some text.

Some more text.

مثال ۳ :

فرض کنید فایلی به نام “vars.php” داریم که در آن چند متغیر تعریف شده است:
<?php
$color='red';
$car='BMW';
?>
سپس، اگر فایل “vars.php” را فراخوانی کنیم، می توان از متغیرها در فایل فراخوانی استفاده کرد:
<html>
<body>

<h3>Welcome to my home page!</h3>
<?php include 'vars.php';
echo "I have a $color $car.";
?>

</body>
</html>
flesh

Welcome to my home page!

I have a red BMW.

مقایسه include و require

دستور require همچنین برای گنجاندن یک فایل در کد PHP استفاده می شود.
 
با این حال، یک تفاوت بزرگ بین include و require وجود دارد. هنگامی که یک فایل با عبارت include اضافه می شود و PHP نمی تواند آن را پیدا کند، اسکریپت به اجرای خود ادامه می دهد:
<html>
<body>

<h3>Welcome to my home page!</h3>
<?php include 'noFileExists.php';
echo "I have a $color $car.";
?>

</body>
</html>
flesh

Welcome to my home page!

I have a .

اگر همین مثال را با استفاده از دستور require انجام دهیم، دستور echo اجرا نخواهد شد زیرا اجرای اسکریپت پس از اینکه دستور require یک خطای مهلک را برگرداند می میرد:
<html>
<body>

<h3>Welcome to my home page!</h3>
<?php require 'noFileExists.php';
echo "I have a $color $car.";
?>

</body>
</html>
flesh

Welcome to my home page!

 

Warning: require(noFileExists.php): Failed to open stream: No such file or directory in C:\xampp\htdocs\phptest.com\public_html\index.php on line 5

Fatal error: Uncaught Error: Failed opening required ‘noFileExists.php’ (include_path=’C:\xampp\php\PEAR’) in C:\xampp\htdocs\phptest.com\public_html\index.php:5 Stack trace: #0 {main} thrown in C:\xampp\htdocs\phptest.com\public_html\index.php on line 5

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

۲۵. کار با فایلها در PHP

مدیریت فایل بخش مهمی از هر برنامه وب است. شما اغلب نیاز به باز کردن و پردازش یک فایل برای کارهای مختلف دارید.
 

ایجاد تغییرات در فایلها

PHP چندین تابع برای ایجاد، خواندن، آپلود و ویرایش فایل ها دارد.

هنگام دستکاری فایل ها مراقب باشید!
اگر کار اشتباهی انجام دهید می توانید آسیب های زیادی وارد کنید. خطاهای رایج عبارتند از: ویرایش فایل اشتباه، پر کردن هارد دیسک با داده های زباله (garbage) ، و حذف محتوای یک فایل به صورت تصادفی.

تابع ()readfile

تابع ()readfile یک فایل را می خواند و آن را در بافر خروجی می نویسد.
 
فرض کنید ما یک فایل متنی به نام “webdictionary.txt” داریم که در سرور ذخیره شده است که به شکل زیر است:
AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language
کد PHP برای خواندن فایل و نوشتن آن در بافر خروجی به صورت زیر است (تابع ()readfile تعداد بایت های خوانده شده را برمی گرداند):
<?php
echo readfile("webdictionary.txt");
?>
flesh

AJAX = Asynchronous JavaScript and XML CSS = Cascading Style Sheets HTML = Hyper Text Markup Language PHP = PHP Hypertext Preprocessor SQL = Structured Query Language SVG = Scalable Vector Graphics XML = EXtensible Markup Language236

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

۲۶. باز کردن/خواندن/بستن فایل

در این فصل نحوه باز کردن، خواندن و بستن یک فایل در سرور را به شما آموزش خواهیم داد.

باز کردن فایل با تابع ()fopen

یک روش بهتر برای باز کردن فایل ها با تابع ()fopen است. این تابع گزینه های بیشتری نسبت به تابع ()readfile در اختیار شما قرار می دهد.
 
ما از فایل متنی “webdictionary.txt” در طول تمرینات استفاده خواهیم کرد:
AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language
پارامتر اول ()fopen حاوی نام فایلی است که باید باز شود و پارامتر دوم مشخص می کند که فایل در چه حالتی باید باز شود. در مثال زیر اگر تابع ()fopen نتواند فایل مشخص شده را باز کند، یک پیام ایجاد می کند:
<?php

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fread($myfile,filesize("webdictionary.txt"));
fclose($myfile);

?>
flesh

AJAX = Asynchronous JavaScript and XML CSS = Cascading Style Sheets HTML = Hyper Text Markup Language PHP = PHP Hypertext Preprocessor SQL = Structured Query Language SVG = Scalable Vector Graphics XML = EXtensible Markup Language

نکته: توابع ()fread و ()fclose در زیر توضیح داده خواهند شد.
 
 
فایل در یکی از حالت های زیر باز می شود:
حالت ها شرح
r
یک فایل فقط برای خواندن باز می کند. نشانگر فایل از ابتدای فایل شروع می شود
w
یک فایل فقط برای نوشتن باز می کند. محتویات فایل را پاک می کند یا در صورت نبود فایل جدید ایجاد می کند. نشانگر فایل از ابتدای فایل شروع می شود
a
یک فایل فقط برای نوشتن باز می کند. داده های موجود در فایل حفظ می شود. نشانگر فایل از انتهای فایل شروع می شود. در صورت عدم وجود فایل، فایل جدیدی ایجاد می کند
x
یک فایل جدید فقط برای نوشتن ایجاد می کند. FALSE را برمی‌گرداند و اگر فایل از قبل وجود داشته باشد، یک خطا را نشان می‌دهد
+r
یک فایل جدید فقط برای نوشتن ایجاد می کند. FALSE را برمی‌گرداند و اگر فایل از قبل وجود داشته باشد، یک خطا را نشان می‌دهد
+w
یک فایل برای خواندن/نوشتن باز می کند. محتویات فایل را پاک می کند یا در صورت نبود فایل جدید ایجاد می کند. نشانگر فایل از ابتدای فایل شروع می شود
+a
یک فایل برای خواندن/نوشتن باز می کند. داده های موجود در فایل حفظ می شود. نشانگر فایل از انتهای فایل شروع می شود. در صورت عدم وجود فایل، فایل جدیدی ایجاد می کند
+x
یک فایل جدید برای خواندن/نوشتن ایجاد می کند. FALSE را برمی‌گرداند و اگر فایل از قبل وجود داشته باشد، یک خطا را نشان می‌دهد

خواندن فایل با تابع ()fread

تابع ()fread از یک فایل باز را می خواند.
 
پارامتر اول ()fread حاوی نام فایلی است که باید از آن خوانده شود و پارامتر دوم حداکثر تعداد بایت های خواندنی را مشخص می کند.
 
کد PHP زیر فایل “webdictionary.txt” را تا انتها می خواند:
fread($myfile,filesize("webdictionary.txt"));

بستن فایل با تابع ()fclose

تابع ()fclose برای بستن یک فایل باز استفاده می شود.

نکته: این یک تمرین برنامه نویسی خوب است که همه فایل ها را بعد از اتمام کار با آنها ببندید. شما نمی خواهید یک فایل باز در سرور شما در حال اجرا باشد و منابع را اشغال کند!

()fclose به نام فایل (یا متغیری که نام فایل را نگه می دارد) نیاز دارد که می خواهیم ببندیم:
<?php

$myfile = fopen("webdictionary.txt", "r");
// some code to be executed....
fclose($myfile);

?>

خواندن یک خط با تابع ()fgets

تابع ()fgets برای خواندن یک خط از یک فایل استفاده می شود.
 
مثال زیر خط اول فایل “webdictionary.txt” را خروجی می دهد:
<?php

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fgets($myfile);
fclose($myfile);

?>
flesh

AJAX = Asynchronous JavaScript and XML

 
توجه: پس از فراخوانی تابع ()fgets، نشانگر فایل به خط بعدی منتقل می‌شود.

بررسی پایان فایل با تابع ()feof

تابع ()feof بررسی می‌کند که آیا به “انتهای فایل” (EOF) End Of File رسیده است یا خیر.
 
تابع ()feof برای حلقه زدن از طریق داده هایی با طول ناشناخته مفید است.
 
مثال زیر فایل “webdictionary.txt” را خط به خط می خواند تا زمانی که به انتهای فایل برسید:
<?php

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// Output one line until end-of-file
while(!feof($myfile)) {
  echo fgets($myfile) . "<br>";
}
fclose($myfile);

?>
flesh

AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language

خواندن یک کاراکتر با تابع ()fgetc

تابع ()fgetc برای خواندن یک کاراکتر از یک فایل استفاده می شود.
 
مثال زیر کاراکتر به کاراکتر فایل “webdictionary.txt” را می خواند تا زمانی که به انتهای فایل برسد:
<?php

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// Output one character until end-of-file
while(!feof($myfile)) {
  echo fgetc($myfile);
}
fclose($myfile);

?>
flesh

AJAX = Asynchronous JavaScript and XML CSS = Cascading Style Sheets HTML = Hyper Text Markup Language PHP = PHP Hypertext Preprocessor SQL = Structured Query Language SVG = Scalable Vector Graphics XML = EXtensible Markup Language

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

۲۷. ایجاد/نوشتن فایل

در این فصل نحوه ایجاد و نوشتن فایل روی سرور را بررسی می کنیم.
 

ایجاد فایل با تابع ()fopen

تابع ()fopen نیز برای ایجاد یک فایل استفاده می شود. شاید کمی گیج کننده باشد، اما در PHP، یک فایل با استفاده از همان تابعی که برای باز کردن فایل ها استفاده می شود ایجاد می شود.
 
اگر از ()fopen روی فایلی استفاده کنید که وجود ندارد، با توجه به اینکه فایل برای نوشتن (w) یا الحاق (a) باز شده است، آن را ایجاد می کند.
 
مثال زیر یک فایل جدید به نام “testfile.txt” ایجاد می کند. فایل در همان دایرکتوری که کد PHP در آن قرار دارد ایجاد می شود:
 
مثال:
$myfile = fopen("testfile.txt", "w")
مجوزهای فایل
اگر هنگام تلاش برای اجرای کد زیر با خطا مواجه شدید، بررسی کنید که به فایل PHP خود برای نوشتن اطلاعات روی هارد دیسک دسترسی داده اید.

نوشتن در فایل با تابع ()fwrite

تابع ()fwrite برای نوشتن روی یک فایل استفاده می شود.
 
پارامتر اول ()fwrite شامل نام فایلی است که باید روی آن بنویسید و پارامتر دوم رشته ای است که باید نوشته شود.
 
مثال زیر چند نام را در یک فایل جدید به نام “newfile.txt” می نویسد:
 
<?php

$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "John Doe\n";
fwrite($myfile, $txt);
$txt = "Jane Doe\n";
fwrite($myfile, $txt);
fclose($myfile);

?>
توجه داشته باشید که ما دو بار روی فایل “newfile.txt” نوشتیم. با هر بار نوشتن روی فایل ، رشته txt$ را ارسال می کنیم که ابتدا حاوی “John Doe” و دومی حاوی “Jane Doe” می باشد. پس از پایان نوشتن، فایل را با استفاده از تابع ()fclose می بندیم.
اگر فایل “newfile.txt” را باز کنیم به شکل زیر خواهد بود:
John Doe
Jane Doe

رونویسی

اکنون که “newfile.txt” حاوی مقداری داده است، می توانیم نشان دهیم که وقتی یک فایل موجود را برای نوشتن باز می کنیم چه اتفاقی می افتد.
زمانی که fopen را با  w استفاده کنیم ، تمام داده های موجود پاک می شوند و با یک فایل خالی شروع می کنیم.
 
در مثال زیر ما فایل موجود خود “newfile.txt” را باز می کنیم و داده های جدیدی را در آن می نویسیم:
<?php

$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "Mickey Mouse\n";
fwrite($myfile, $txt);
$txt = "Minnie Mouse\n";
fwrite($myfile, $txt);
fclose($myfile);

?>
اگر اکنون فایل “newfile.txt” را باز کنیم، John و Jane هر دو ناپدید شده‌اند و فقط داده‌هایی که نوشتیم وجود دارد:
Mickey Mouse
Minnie Mouse

اضافه کردن متن

با استفاده از حالت “a” می توانید داده ها را به یک فایل اضافه کنید. حالت “a” متن را به انتهای فایل اضافه می کند، در حالی که حالت “w” محتوای قدیمی فایل را لغو می کند (و پاک می کند).
 
در مثال زیر ما فایل موجود خود “newfile.txt” را باز می کنیم و متنی به آن اضافه می کنیم:
<?php

$myfile = fopen("newfile.txt", "a") or die("Unable to open file!");
$txt = "Donald Duck\n";
fwrite($myfile, $txt);
$txt = "Goofy Goof\n";
fwrite($myfile, $txt);
fclose($myfile);

?>
اگر اکنون فایل “newfile.txt” را باز کنیم، می بینیم که دونالد داک و گوفی گوف به انتهای فایل اضافه شده است:
Mickey Mouse
Minnie Mouse
Donald Duck
Goofy Goof

۲۸. آپلود فایل

با PHP می توانید به آسانی فایل ها را روی سرور آپلود کنید.
همچنین ، به آسانی خطری به وجود می آید، بنابراین همیشه هنگام اجازه آپلود فایل مراقب باشید!

پیکربندی فایل php.ini

ابتدا اطمینان حاصل کنید که PHP به گونه ای پیکربندی شده است که امکان آپلود فایل را فراهم کند.
در فایل “php.ini” خود، دستور file_uploads را جستجو کنید و آن را روی On قرار دهید:
file_uploads = On

ساخت فرم HTML

در مرحله بعد، یک فرم HTML ایجاد کنید که به کاربران امکان می دهد فایل تصویری را که می خواهند آپلود کنند انتخاب کنند:
<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
  Select image to upload:
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>
 
برخی از قوانینی که باید برای فرم HTML بالا رعایت کنید:
 
  • اطمینان حاصل کنید که فرم از متد “post” استفاده می کند
  • فرم همچنین به ویژگی زیر نیاز دارد: enctype=”multipart/form-data”. مشخص می کند که از کدام نوع محتوا هنگام ارسال فرم استفاده شود
بدون الزامات بالا، آپلود فایل کار نخواهد کرد.
 
سایر موارد قابل توجه:
 
  • ویژگی “type=”file تگ <input> فیلد ورودی را به عنوان کنترل انتخاب فایل با دکمه “Browse” در کنار کنترل ورودی نشان می دهد.
    فرم بالا داده ها را به فایلی به نام “upload.php” ارسال می کند که در ادامه آن را ایجاد خواهیم کرد.

ایجاد اسکریپت آپلود فایل

فایل “upload.php” حاوی کد آپلود یک فایل است:
<?php

$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
  $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
  if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "File is not an image.";
    $uploadOk = 0;
  }
}

?>

توضیح کد بالا:

  • “/target_dir = “uploads$ فهرستی را که قرار است فایل در آن قرار گیرد را مشخص می کند
  • target_file$ مسیر فایلی که باید آپلود شود را مشخص می کند
  • 1=uploadOk$ هنوز استفاده نشده است (بعدا استفاده خواهد شد)
  • imageFileType$ پسوند فایل را نگه می دارد (با حروف کوچک)
  • سپس بررسی می نماید که آیا فایل تصویر یک تصویر واقعی است یا یک تصویر جعلی

نکته: شما باید یک دایرکتوری جدید به نام “uploads” در دایرکتوری که فایل “upload.php” در آن قرار دارد ایجاد کنید. فایل های آپلود شده در آنجا ذخیره می شوند.

بررسی کنید که آیا فایل از قبل وجود دارد یا خیر

اکنون می توانیم محدودیت هایی را اضافه کنیم.
ابتدا بررسی می کنیم که آیا فایل از قبل در پوشه “uploads” وجود دارد یا خیر. اگر وجود داشت، یک پیغام خطا نمایش داده می شود و uploadOk$ روی 0 تنظیم می شود:
// Check if file already exists
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}

محدود کردن اندازه فایل

فیلد ورودی فایل در فرم HTML ما “fileToUpload” نام دارد.
 
حال می خواهیم اندازه فایل را بررسی کنیم. اگر فایل بزرگتر از 500 کیلوبایت باشد، یک پیام خطا نمایش داده می شود و uploadOk$ روی 0 تنظیم می شود:
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

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

کد زیر فقط به کاربران اجازه می دهد فایل های JPG، JPEG، PNG و GIF را آپلود کنند. همه انواع فایل های دیگر یک پیغام خطا ایجاد کرده و uploadOk$ روی 0 قرار می دهند:
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
}

تکمیل اسکریپت آپلود فایل

فایل کامل “upload.php” اکنون به شکل زیر است:
<?php

$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
  $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
  if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "File is not an image.";
    $uploadOk = 0;
  }
}

// Check if file already exists
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
  echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
  } else {
    echo "Sorry, there was an error uploading your file.";
  }
}

?>

منبع:

w3schools.com