با استفاده از PHP امکان آپلود فایل ها به سرویس دهنده وجود دارد.
ایجاد فرم برای آپلود فایل
برای آپلود فایل ها از فرم ها استفاده می شود.
به فرم 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 />
</html>
<input type="submit" name="submit" value="Submit" />
</form></body>
در مورد فرم فوق به نکات زیر توجه کنید.
- خاصیت enctype فرم تعیین می کند که چه نوع اطلاعاتی باید ارسال شود. “multipart/form-data” وقتی استفاده می شود که فرم برای آپلود فایل استفاده شود.
- خاصیت type=”file” از تگ <input> تعیین می کند که ورودی باید بصورت فایل باشد. بعنوان مثال وقتی فرم فوق در مرورگر نمایش داده شود یک دکمه “browse” برای انتخاب فایل نشان داده خواهد شد.
توجه : اجازه دادن به کاربر برای ارسال فایل یک ریسک امنیتی بزرگی است. تنها به کاربران شناخته شده و مطمئن اجازه این کار را بدهید.
ایجاد اسکریپت آپلود
فایل “upload_file.php”دستوراتی برای آپلود فایل دارا می باشد :
<?php if ($_FILES[“file”][“error”] > 0) { echo “Error: ” . $_FILES[“file”][“error”] . “<br />”; } else { echo “Upload: ” . $_FILES[“file”][“name”] . “<br />”; echo “Type: ” . $_FILES[“file”][“type”] . “<br />”; echo “Size: ” . ($_FILES[“file”][“size”] / 1024) . ” Kb<br />”; echo “Stored in: ” . $_FILES[“file”][“tmp_name”]; } ?> |
با استفاده از آرایه سراسری FILES_$ می توان فایل های ارسال شده به سرویس دهنده را آپلود کرد.
اولین پارامتر در این آرایه نام ورودی فرم است و دومین اندیس می تواند یکی از اندیس های “name”، “type” ، “size”، “tmp_name” یا “error” باشد. مشابه زیر:
كاربرد | متغير |
نام فایل آپلود شده | $_FILES[“file”][“name”] |
نوع فایل آپلود شده | $_FILES[“file”][“type”] |
اندازه فایل آپلود شده | $_FILES[“file”][“size”] |
نام کپی موقتی فایل که بر روی سرویس دهنده ذخیره شده است | $_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”] . “<br />”; } else { echo “Upload: ” . $_FILES[“file”][“name”] . “<br />”; echo “Type: ” . $_FILES[“file”][“type”] . “<br />”; echo “Size: ” . ($_FILES[“file”][“size”] / 1024) . ” Kb<br />”; echo “Stored in: ” . $_FILES[“file”][“tmp_name”]; } } else { echo “Invalid file”; } ?> |
توجه:در مرورگر IE برای تشخیص فایل های .jpg نوع آن باید pjpeg نوشته شود ، برای مرورگر FireFox باید jpeg.
ذخیره کردن فایل آپلود شده
مثال های فوق یک کپی موقت از فایل آپلود شده در پوشه موقت PHP روی سرور ایجاد می کنند.
کپی موقت بلافاصله پس از پایان یافت اجرای اسکریپت از بین خواهد رفت. برای ذخیره کردن فایل آپلود شده ، باید آن را به مکان دیگری کپی کنیم:
<?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 “Return Code: ” . $_FILES[“file”][“error”] . “<br />”; } else { echo “Upload: ” . $_FILES[“file”][“name”] . “<br />”; echo “Type: ” . $_FILES[“file”][“type”] . “<br />”; echo “Size: ” . ($_FILES[“file”][“size”] / 1024) . ” Kb<br />”; echo “Temp file: ” . $_FILES[“file”][“tmp_name”] . “<br />”;if (file_exists(“upload/” . $_FILES[“file”][“name”])) { echo $_FILES[“file”][“name”] . ” already exists. “; } else { move_uploaded_file($_FILES[“file”][“tmp_name”], “upload/” . $_FILES[“file”][“name”]); echo “Stored in: ” . “upload/” . $_FILES[“file”][“name”]; } } } else { echo “Invalid file”; } ?> |
اسکریپت فوق بررسی می کند که فایل وجود دارد یا خیر، اگر موجود نبود آنرا را در پوشه مشخص شده کپی می کند.
توجه : این مثال فایل را در پوشه جدیدی بنام “upload” کپی می کند.