با استفاده از فرم های وب می توان فایل های مختلف از جمله فایل های تصویری را آپلود کرد، زبان php دارای دستورات و امکاناتی برای دریافت این فایل ها از کلاینت و ذخره کردن روی سرور است.
آپلود فایل ها
با استفاده از PHP امکان آپلود فایل ها به سرویس دهنده وجود دارد. برای آپلود فایل ها از فرم ها استفاده می شود. به فرم HTML زیر برای آپلود فایل دقت کنید:
تگ های HTML برای آپلود فرم:
<html>
<body>
<form action="upload_file.php" method="post>
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /><br />
<input type="submit" name="submit" value="Submit" />
</form>
در مورد فرم فوق به نکات زیر توجه کنید.
خاصیت enctype فرم تعیین می کند که چه نوع اطلاعاتی باید ارسال شود.
“multipart/form-data” وقتی استفاده می شود که فرم برای آپلود فایل استفاده شود.
خاصیت type=”file” از تگ <input> تعیین می کند که ورودی باید بصورت فایل باشد. بعنوان مثال وقتی فرم فوق در مرورگر نمایش داده شود یک دکمه “browse” برای انتخاب فایل نشان داده خواهد شد.
توجه : اجازه دادن به کاربر برای ارسال فایل یک ریسک امنیتی بزرگی است. تنها به کاربران شناخته شده و مطمئن اجازه این کار را بدهید.
ایجاد اسکریپت آپلود
فایل “upload_file.php”دستوراتی برای آپلود فایل دارا می باشد :
<?php
if ($_FILES["file"]["error"]> 0) {
echo "Error: " . $_FILES["file"]["error"] ;
}
else
{
echo "Upload: " . $_FILES["file"]["name"] ;
echo "Type: " . $_FILES["file"]["type"] ;
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>;
با استفاده از آرایه سراسری $_FILES می توان فایل های ارسال شده به سرویس دهنده را آپلود کرد.
اولین پارامتر در این آرایه نام ورودی فرم است و دومین اندیس می تواند یکی از اندیس های “name”، “type” ، “size”، “tmp_name” یا “error” باشد. مشابه زیر:
متغیر |
توصیف |
$ _FILES[“file”][“name”] |
نام فایل آپلود شده |
$ _FILES[“file”][“size”] |
اندازه فایل آپلود شده بر حسب بایت |
$ _FILES[“file”][“type”] |
نوع فایل آپلود شده |
$ _FILES[“file”][” tmp_name “] |
نام کپی موقتی فایل که بر روی سرویس دهنده ذخیره شده است |
$ _FILES[“file”][“error”] |
کد خطای تولید شده در حین آپلود فایل |
مثال فوق یک روش ساده و ابتدایی برای آپلود فایل را نشان می دهد. به دلایل امنیتی باید محدودیت هایی تعیین شود و کاربر را برای آپلود فایل های خاصی محدود کنیم.
محدودیت ها برای آپلود
در اسکریپت زیر محدودیت هایی برای آپلود فایل تعیین شده است. کاربر تنها می تواند فایل های gifیا jpeg و با اندازه کمتر از 20 کیلوبایت را آپلود کند:
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)) {
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] ;
}
else
{
echo "Upload: " . $_FILES["file"]["name"] ;
echo "Type: " . $_FILES["file"]["type"] ;
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}}
else{
echo "Invalid file";
}
?>
توجه:در مرورگر IE برای تشخیص فایل های .jpg نوع آن باید pjpeg نوشته شود ، برای مرورگر FireFox باید jpeg.
ذخیره کردن فایل آپلود شده
مثال های فوق یک کپی موقت از فایل آپلود شده در پوشه موقت PHP روی سرور ایجاد می کنند.کپی موقت بلافاصله پس از پایان یافت اجرای اسکریپت از بین خواهد رفت. برای ذخیره کردن فایل آپلود شده ، باید آن را به مکان دیگری کپی کنیم:
<?php
move_uploaded_file($_FILES[‘file’][‘tmp_name’], ‘upload/’. $_FILES[‘file’][‘name’]);
echo "Stored in: " . ‘upload/’ . $_FILES[‘file’][‘name’];
?>
اسکریپت فوق فایل آپلود شده را در پوشه مشخص شده (مثلاً پوشه upload) کپی می کند.