سبد (0)

تبلیغات

ارسال فایل در PHP

ارسال یا آپلود فایل در PHP

Wiki

برای ارسال فایل از Client به Server مراحل زیر را طی کنید:

1- ایجاد یک فرم 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>

</body>
</html>

  • خاصیت enctype در تگ <form>: هنگامی که یک فرم، داده های دودویی، مثل محتوای یک فایل را برای ارسال شدن نیاز دارد، این خاصیت با مقدار "multipart/form-data" پر می شود، در حقیقت مشخص می کند که چه نوع محتوایی هنگام ارائه ی فرم استفاده می شود.
  • خاصیت action در تگ <form>: اگر submit اتفاق افتاد، اطلاعات فرم HTML به صفحه ای که در این خصوصیت  مشخص شده ارسال می شود.(به صورت پیش فرض صفحه جاری در نظر گرفته می شود)
  • خاصیت type در تگ <input>: با مقدار "file" پر شده است و مشخص می کند که ورودی کاربر، باید به عنوان یک فایل پردازش شود.(یک تکس باکس به همراه دکمه Browse، جهت جستجوی فایل از کامپیوتر کاربر)

نکته: دادن سطح دسترسی ارسال فایل به کاربران ریسک بزرگی برای امنیت است، بنابراین تنها به کاربران مورد اعتماد اجازه ی ارسال فایل بدهید.


2- ایجاد یک اسکریبت ارسالی

Wiki

 فایل "upload_file.php" که در فرم HTML بالا در تگ <form> مشخص کردیم، می تواند چیزی شبیه زیر باشد:

<?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_$ می توانید فایل های مشخص شده توسط کاربر را از client به Server ارسال کنید، در حقیقت FILES_$ یک آرایه دوبعدی از پیش تعریف شده است که با استفاده از ایندکس مقداری آن می توانید به مقادیر زیر دسترسی داشته باشید:

  • $_FILES["file"]["name"] : نام فایل ارسالی
  • $_FILES["file"]["type"] : نوع فایل ارسالی
  • $_FILES["file"]["size"] : اندازه فایل ارسالی با واحد بایت
  • $_FILES["file"]["tmp_name"] : نام کپی موقت از فایل که روی سرور ذخیره شده
  • $_FILES["file"]["error"] : کد خطا که از ارسال فایل به وجود آمده

توجه: به دلایل امنیتی٫ باید محدودیتی را روی آنچه که کاربر ارسال می کند قرار دهیم.


3- محدودیت های ارسال

Wiki

دراین اسکریپت چند شرط را برای ارسال فایل اضافه می کنیم. کاربر فقط قادر است فایل های "jpg." یا "gif." را ارسال کند و اندازه ی فایل باید کمتر از "20KB" باشد:

<?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 را بشناسد، باید نوع pjpg باشد و برای FireFox باید jpeg باشد.


4- ذخیره فایل های ارسالی

Wiki

مثال های بالا یک کپی موقت از فایل های ارسال شده در پوشه ی موقت 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";
  }
?>

در اسکریبت بالا در قسمت if چک می شود که آیا فایل ارسال شده در پوشه "upload" قبلاً وجود داشته یا نه، اگر موجود نباشد، آن را به پوشه مشخص شده منتقل یا کپی می کند.

نکته: این مثال فایل را در یگ پوشه ی جدید به نام "upload" ذخیره می کند، احتمالاً شما نیاز خواهید داشت که نام فایل و مسیر آن را در پایگاه داده خود ذخیره کنید بنابراین در ادامه مثال بالا به راحتی می توانید با استفاده از دستور insert اینکار را انجام دهید.

برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

دیدگاه‌ها  

+4 # آرمان 1396-01-24 15:32
سلام خداقوت. درمثال بالا اگر بجای عکس بخوام فایل متنی با پسوند txt بفرستم تو قسمت if اول نوع فایل رو چجوری باید تعیین کنم؟ممنون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+4 # احسان عباسی 1396-01-25 10:42
سلام. برای انجام این کار به صورت زیر عمل کنید:

<?php
if (
($_FILES["file"]["type"] == "text/plain")
&& ($_FILES["file" ]["size"] < 20000))
{
if ($_FILES["file" ]["error"] > 0)
...
?>

برای دانلود کدها، بر روی لینک زیر کلیک کنید:
http://beyamooz.com/images/PHP/questionFiles/phpExample.zip
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+3 # آرمان 1395-12-16 17:52
سلام و خداقوت. من از ویرایشگر متن sublime text استفاده میکنم .یک مشکل دارم . من کدهای قبلی که برای مثالهای قبلتون بود رو پاک کردم و این کدهای ارسال فایل رو فرستادم اما وقتی از طریق لوکال هاستم فایل اچ تی ام الی رو که میخواد فایل بفرسته به صفح پی اچ پی, بازش میکنم همون محتویات قبلی رو همچنان نشون میده.نمیدونین مشکل از چی هست؟ ممنون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+4 # امیر پهلوان صادق 1395-12-17 16:47
سلام، برای رفع مشکل از CTRL+F5 استفاده کنید تا Cache مروگر خالی شود.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+3 # Bahar12 1395-09-10 20:04
آموزش ارسال فایل در PHP عالی بود.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # مجید 1395-04-13 14:00
سلام ، من میخوام برای آ÷لود چند فایل از دستور multiple استفاده کنم اما وقتی به input فایل اضافه میکنم پیغام invalid file میده
چه تغییراتی رو در کدتون باید ایجاد کنم ؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+3 # مهرداد صلاحی 1395-04-14 22:58
سلام.
برای اپلود فایل شما باید خصوصیت enctype فرم رو به صورت multipart/form- data مقداردهی کنید.
بعد از این کار برای آپلود فایل چه یه دونه و چه بیشتر مشکلی نخواهید داشت، فقط باید در سمت PHP فایلها رو از طریق متغیر سراسری FILES_$ بخونید.
با نوشتن کد echo '' . print_r($_FILES , 1) . ''; //comment می‌تونید متوجه بشید که فایل به سمت سرور ارسال شده یا خیر. این کد رو در جایی بذارید که می‌خواید فایلها رو دریافت کنید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # مجید 1395-04-11 18:25
سلام ، باسه انتقال به پوشه ی دیگه گفتید که از insert استفاده کنیم ، اما نمیدونیم دقیقا چطوری و کجا باید از دستور insert استفاده کنیم ؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+3 # امیر پهلوان صادق 1395-04-14 12:36
سلام لطفا برای Insert کردن داده ها در جدول مطلب زیر را مطالعه فرمایید:
http://beyamooz.com/php/97-database/3267-%D8%AF%D8%B1%D8%AC-%DA%86%D9%86%D8%AF%DB%8C%D9%86-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D8%AF%D8%B1-mysql
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # ehsan123 1395-01-20 21:05
سلام
در رابطه با اپلود پی دی اف و فایل متنی و تصاویر در PHP توضیحات کافی بود ممنون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+3 # فرید 1395-01-20 10:04
if ($_FILES["file" ]["error"] > 0)
بزرگتر از صفر یعنی چی ؟ اگه ارور بده که مقدارش یک رشته هست و اگه ارور نده مقدارش 0 همینطور نیست!
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+4 # مهرداد صلاحی 1395-01-21 11:07
در صورتی که error داشته باشه مقدار عددی بزرگتر از صفر برمیگردونه و در صورتی که بدون خطا باشه، مقدار صفر رو بر میگردونه.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+3 # sina2 1394-12-09 18:46
سلام من از کد زیر برای اپلود عکس استفاده کردم و جواب گرفتم اگه بخوام این کد رو برای فایل های .txt یا pdf استفاده کنم باید چکار کنم؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+4 # مهرداد صلاحی 1394-12-10 21:24
با سلام.
برای چک کردن پسوند فایل، راه‌های مختلفی هست. اما تو این کد شما می‌تونی به جای عبارت image/gif از عبارت application/pdf برای فایل‌های pdf و عبارت text/plain برای فایل‌های txt استفاده کنید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # Guest 1394-12-03 13:02
سلام .
من کد html بالا در نود پد++ نوشتم و در پوشه C:\xampp\htdocs \new ذخیره کردم و کد php هم به همین طریق با پسوند php همونجا ذخیره کردم و همونجا یک پوشه ساختم upload ولی نمیتونم جواب بگیرم اول اینکه اگه به جای عکس فایل دیگه ای رو اپلود کنم مثل موزیک هم Invalid file پیام میده ولی اگه از حجم مربوطه بیشتر بشه خطا میده دوم هم اینکه اصلا فایل مربوطه در پوشه C:\xampp\htdocs \new\upload ذخیره نمیشه به نظرتون مشکل چی میتونه باشه...ممنون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+3 # مهرداد صلاحی 1394-12-06 22:44
با سلام.
دوست عزیز اینطوری نمیشه فهمید مشکل از کجاست. به احتمال قوی مشکل در کدنویسی هست.
اگر کد و متن خطا رو بذارید، بهتر میشه راهنمایی کرد.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # raghb 1394-09-27 13:30
تشکر و خسته نباشید

مشکل من اینکه وقتی ی فایل آپلود می کنم بر روی ومپ
ومپ من در پوشه wamp/tmp
فایل آپلود شده موقت را نشان نمی دهد
ولی در کد بعدی که مینویسم آن move_uploaded_file
میکنم فایل در پوشه تعریف شده پیدا میشود

حتی با تابع
file_exists
هم چک کردم وجود تمپ مورد نظر یا عبارتی فایل آپلود شده را در پوشه tmp ومپ تایید میکنه
ولی من نمی بینمش بجز چند تا سکشن
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # مهرداد صلاحی 1394-09-27 23:20
با سلام.
تا زمانی از تابع move_uploaded_f ile استفاده نکنید، فایل در دسترس قرار نمی‌گیره.
منظورتون از این سؤال واضح نیست. لطفا بیشتر توضیح بدید، تا بشه دقیق فهمید، چه قصد و منظوری دارید و اینکه بهتر بشه راهنمایی کرد.

موفق باشید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # raghb 1394-10-07 01:44
منظورم اینکه چرا فایل تمپ اون قبل از اینکه move بشه در دسترس نیست ودیده نمیشه کجاست؟
ممنون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # مهرداد صلاحی 1394-10-16 10:09
خب اون مراحل سیستمی هست و طبیعی هست که نباید در دسترس باشه. در واقع اون فایل سیستم برای استفاده خود سیستم هست و زمانی که درخواست از سوی شما کامل شد، فایل با نام اصلی خودش در اختیار شما قرار میگیره.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # azadeh ahmadi 1394-08-12 09:11
سلام و خسته نباشید
یه ide خوب برای کار با php به من معرفی میکنید...
مرسی.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # مهرداد صلاحی 1394-08-12 09:31
با سلام.
یکی از بهترین IDEها نت بینز هست. NetBeans!!!

خود من از این IDE استفاده میکنم و خیلی راضی هستم. امکاناتش زیاد و محیط کاربری خوبی داره.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # azadeh ahmadi 1394-08-01 09:07
سلام
چرا میگیم اگه
$_FILES["file"]["error"]
بزرگتر از صفر باشه پیام ارور رو چاپ کنه؟!
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # مهرداد صلاحی 1394-08-01 09:31
با سلام.
اگر به هر دلیل آپلود فایل با موفقیت انجام نشه و خطایی رخ بده، کد این خطا در بخش FILES['files'][ 'error'];/comme nt درج میشه. با نمایش این کد هم به کاربر و هم خود ما متوجه میشیم که مشکل اپلود فایل از کجا و چطور بوده است.

با فهمیدن مشکل، حل کردن مشکل آسون‌تر خواهد بود.
برای همین هست که اگر error بزرگتر از صفر باشه، پیام خطا رو چاپ می‌کنیم. خطا == 0 یعنی مشکلی در آپلود نیست و فایل با موفقیت می‌تونه آپلود بشه.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # افسانه 1394-06-22 12:36
آموزش ارسال فایل در PHP عالی بود.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
-1 # Davood F-A 1394-03-05 11:48
سلام تو فایل آپلود
خط اول جلوی ارور چرا بزرگتر از 0 گذاشتید؟؟؟؟؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # مهرداد صلاحی 1394-08-01 09:34
با سلام.
اگر به هر دلیل آپلود فایل با موفقیت انجام نشه و خطایی رخ بده، کد این خطا در بخش FILES['files'][ 'error'];/comme nt درج میشه. با نمایش این کد هم به کاربر و هم خود ما متوجه میشیم که مشکل اپلود فایل از کجا و چطور بوده است.

با فهمیدن مشکل، حل کردن مشکل آسون‌تر خواهد بود.
برای همین هست که اگر error بزرگتر از صفر باشه، پیام خطا رو چاپ می‌کنیم. FILES['file'][' error'] == 0 یعنی مشکلی در آپلود نیست و فایل با موفقیت می‌تونه آپلود بشه.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # افسانه 1394-02-22 03:23
با سلام و احترام
بابت آموزش خوبتون سپاسگزارم.
فقط يک سوال من ميخوام وقتي روي دکمه ي choose file کليک ميکنم و عکسي رو انتخاب ميکنم و بد گزينه open رو مي زنم عکسم قبل از اين که روي دکمه ي ثبت کليک کنم بياد و در قسمت image که براش تعريف کردم به من نشون بده يعني همزمان با زدن open عکسم نمايش بده و بعد عکسم رو ثبت کنم. ممنون ميشم کمکم کنيد.

با سپاس
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # امیر پهلوان صادق 1394-02-22 08:17
سلام
جواب سوالتون و به زیبایی در لینک زیر پیدا خواهید کرد:
stackoverflow.com/questions/4459379/preview-an-image-before-it-is-uploaded
و برای راهنمایی بیشتر شما، کافی بود واژه ی "display image before upload" رو در گوگل جستجو می کردید ...!
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # افسانه 1394-02-22 14:54
سلام. از راهنمایی شما بی نهایت سپاسگزارم
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # mahdi.bbox 1393-11-28 18:47
سلام ممنون از زحماتتون
براى امنيت فرموده بودين که پسوند فايل هارو به gif,jpeg محدود ميکنيم.
اگر بعضى از نفوذگر ها، شل هاشون رو با ىک تصوير بايند کنن و بعد آپلود چى ...!
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # امیر پهلوان صادق 1393-11-29 09:13
سلام، می توانید تمام فایل های آپلود شده را در یک پوشه قرار داده و یک فایل htaccess. با محتوای زیر درون آن قرار دهید:
php_flag engine off دستوراتي كه در فايل htaccess. قرار مي گيرد نه تنها دايركتوري جاري را تحت تاثير خود قرار ميدهد بلكه كليه زيردايركتوري هاي خود را نيز در بر مي گيرد.
کد بالا، علاوه بر اینکه از اجرای کدهای PHP جلوگیری می کند، از اجرای کدهای مخربی که بصورت جاسازی شده در فایل های gif. قرار می گیرند نیز جلوگیری می کند. توجه داشته باشید که زمانی که اجرای PHP غیرفعال می شود، کاربر نهایی در مرورگرش، اسکریبت های PHP را مشاهده خواهد کرد.
برای کسب اطلاعات بیشتر در مورد php_flag به لینک زیر مراجعه کنید:
php.net/manual/en/apache.configuration.php
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # عباس مزرعاوی 1393-11-10 14:48
سلام.
فولدر upload کجا باید ساخته بشه؟
من دارم از xampp استفاده میکنم.
چون همش شرط آخر اجرا میشه.(Invalid file)
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
-1 # امیر پهلوان صادق 1393-11-11 15:27
داخل root اصلی پروژه تون باید فلدر upload را ایجاد کنید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # سلمان 1393-10-22 13:35
سلام
چرااجرا نمیزارید برامثالها
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # mahdi.bbox 1393-11-28 18:52
دوست عزيز يا به قول آقاى پهلوان از برنامه زمپ استفاده کنين و يا داخل هاست خودتون آپلود کنين.تعداد زيادى از سايت ها هاست رايگان در اختيارتون قرار ميدن
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # امیر پهلوان صادق 1393-10-22 15:07
سلام، بیشتر به دلایل امنیتی اینکار انجام نشده ...!
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن

آموزش صوتی PHP

بستن
مدرس:
سوال و جواب:

ابزاری که در پیش روی دارید یکی از ابزارهای بسیار کاربردی سایت بیاموز در زمینه آموزش است، این ابزار برای سهولت یادگیری شما کاربران محترم طراحی شده است.

فقط کافی است روی عنوان پاراگراف مورد نظرتان کلیک کنید تا پخش صدا آغاز شود ...!

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه پرداخت آنلاین - بانک اقتصاد نوین پرداخت آنلاین - بانک سامان
 
دوره های آموزشی راه اندازی کسب و کارهای اینترنتی
تبلیغات اینترنتی