بستن منو
۱۶۵
تعداد کلیدهای این موضوع
لیست همه کلیدهای این موضوع
مباحث اولیه برای آشنایی با PHP
15
آرایه ها در PHP
11
انواع متغیرها و تبدیلات متغیرها در PHP
11
رشته ها (متن ها - strings) و کاراکترها در PHP
24
توابع در PHP
2
کوکی ها (cookie) در PHP
3
تاریخ و زمان در PHP
3
عملیات های ریاضی در PHP
13
فرم ها در PHP
4
کار با عکس ها در PHP
7
کار با فایل ها و پوشه ها (folder) در PHP
35
کار با ایمیل در PHP
1
برنامه نویسی شیء گرا (OOP) در PHP
4
پردازش فایل های XML ، در PHP
1
امنیت در PHP
1
پیاده سازی درگاه های پرداخت آنلاین، با کدهای PHP
1
خطاها و خطایابی، در PHP
1
کار با نرم افزار شبیه ساز سرور wampserver
1
کار با نرم افزار شبیه ساز سرور XAMPP
1
کتابخانه CURL در PHP
2
ساختار JSON ، در PHP
2
مباحث عمومی در PHP
22
×

دانلود فروشگاه اندروید کلیدستان

458

نویسنده

علیرضا گلمکانی ( admin )

شماره کلید
دسته کلید - دسته بندی

آپلود (upload) یک فایل، در PHP

معمولا سایت های کاربردی مختلف، قسمتی را برای آپلود (upload) فایل توسط کاربر قرار می دهند تا کاربر بتواند یک عکس، فایل فشرده شده (zip) یا هر نوع فایلی که مد نظر بوده است را بر روی سرور سایت، آپلود نماید. باید دقت داشت که هنگامی که به کاربر اجازه می دهیم که فایلی را بر روی سرور سایت ما آپلود کند، عملا راهی برای نفوذ به سایت خود، در اختیار وی قرار داده ایم، بنابراین برای اینکه از سوء استفاده های احتمالی جلوگیری کنیم، باید یک سری محدودیت را برای آپلود فایل اعمال نماییم. ابتدا یک کد ساده را برای آپلود فایل معرفی می کنیم، اما این کد به درد استفاده واقعی نمی خورد و تنها برای این است که با چگونگی کدنویسی برای آپلود فایل آشنا بشوید، پس از آن، یک کد حرفه ای تر را معرفی می کنیم که با اعمال یک سری محدودیت، امنیت را بیشتر می کند.

برای قسمت آپلود، ابتدا یک فرم HTML می سازیم و سپس اطلاعات حاصل از فرم را به یک فایل PHP می فرستیم تا بر روی آن اطلاعات، پردازش کند (این شیوه کلی ساخت فرم ها است). بنابراین یک فایل با نامی دلخواه می سازیم و کدهای زیر را درون آن می نویسیم (چون یک فرم HTML است، پس می تواند پسوند فایل، html یا php باشد) :


<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>

همان طور که از کد بالا مشخص است، این فرم، اطلاعات را با روش POST ، به فایل upload_file.php می فرستد تا این فایل، بر روی اطلاعات دریافتی، پردازش کند. مشخصه enctype برای فرم، مشخص می کند که نوع اطلاعاتی که کاربر ارسال می کند، چه می باشد. با انتخاب multipart/form-data برای این مشخصه، اعلام کرده ایم که اطلاعات ارسالی، به صورت اطلاعات دودویی (binary data) است.

درون تگ input ، مشخصه type را برابر file قرار داده ایم تا اعلام کنیم که نوع ورودی، به صورت فایل می باشد. بنابراین درون فرم، یک دکمه browse به کاربر نمایش داده می شود تا با آن بتواند فایل مورد نظر را از کامپیوتر خود انتخاب نماید.

ظاهر فرم، به صورت زیر خواهد بود :

آپلود (upload) یک فایل، در PHP

یک فایل با نام 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 ، یک متغیر فوق سراسری (superglobal) می باشد.

ایجاد یک سری محدودیت برای آپلود فایل :

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

این بار، کدهای فایل upload_file.php را به صورت زیر می نویسیم :


<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts)){
    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";
}
?>

در کد بالا تعیین کرده ایم که نوع فایلی که کاربر آپلود می کند، تنها می تواند gif یا jpeg یا png باشد و حداکثر حجم آن نیز باید 20 کیلوبایت (kB) باشد (فایل های بزرگتر، آپلود نخواهند شد). اگر کاربر، فایلی را انتخاب کند که در شرایط فوق صدق نکند، آنگاه یک پیام با عنوان Invalid file به وی نمایش داده می شود.

ذخیره فایل آپلود شده :

با کد قبل، تنها یک کپی از فایل، به صورت موقت نگهداری می شود. عمر این نسخه کپی از فایل، تنها تا پایان اجرای کدها می باشد، بنابراین باید کدهایمان را به گونه ای تغییر بدهیم که بتوانیم فایل را در یک فولدر از سایت، ذخیره نماییم. کدهای فایل upload_file.php را به صورت زیر تکمیل می کنیم :


<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts)){
    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 بسازیم تا فایل درون آن ذخیره شود (در صورت عدم وجود فولدر upload ، یک پیام خطا نمایش داده می شود).

کد بالا ابتدا چک می کند که آیا فایل درون فولدر upload وجود دارد یا خیر و چنانچه فایل وجود نداشته باشد، یک کپی از آن را در فولدر upload ذخیره خواهد کرد. در صورتی که فایلی با آن نام درون فولدر upload وجود داشته باشد، یک پیام نمایش داده می شود که فایل هم اکنون وجود دارد و بنابراین فایل جدید، ذخیره نخواهد شد.

نکته

چنانچه بخواهیم که بجای نام اصلی فایل، یک نام دیگر برای آن انتخاب کنیم، باید به جای این بخش از کدها :


move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];

کد زیر را بنویسیم :


$new_name="myImage.png";
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $new_name);
echo "Stored in: " . "upload/" . $new_name;

البته من تنها به عنوان مثال، نام myImage.png را انتخاب کردم تا بدانید که کدام قسمت را باید تغییر بدهید، در صورتیکه یک کد کامل، باید شامل تشخیص نوع فایل نیز باشد تا نام جدید فایل، دارای پسوند مناسب باشد.

نکته

اگر بخواهیم که فایل در فولدری غیر از فولدر upload ذخیره شود، باید کلمه upload را در کدها، به نام فولدر مورد نظرمان تغییر بدهیم.

توضیحات بیشتر در مورد کدها :

در ادامه، نکاتی را در مورد کدها ذکر خواهیم کرد.

نکته

با استفاده از کدهای زیر، پسوند فایل را تشخیص داده و در یک متغیر ذخیره می کنیم :


$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

تابع explode یک علامت و یک رشته (string) را دریافت می کند و سپس، رشته مورد نظر را بر اساس علامتی که تعیین کرده ایم، به چندین رشته تجزیه کرده و به صورت یک آرایه رشته ای بر می گرداند. دقت کنید که متغیر فوق سراسری $_FILES ، حاوی اطلاعات فایل در حال آپلود می باشد، بنابراین، عبارت زیر، نام فایل در حال آپلود را به ما می دهد :


$_FILES["file"]["name"]

بنابراین به تابع explode ، نام فایل در حال آپلود را داده ایم و همچنین علامت نقطه (.) را به عنوان علامت مورد نظرمان برای تجزیه رشته (string) انتخاب نموده ایم، بنابراین مثلا فرض کنید که کاربر فایلی با نام myFile.number2.png را برای آپلود انتخاب کند، آنگاه تابع explode ، یک آرایه رشته ای، حاوی سه رشته زیر را بر می گرداند :


myFile
number2
png

این آرایه رشته ای، در $temp ذخیره می شود. سپس با تابع end ، آخرین عنصر تابع را در متغیر $extension ذخیره می کنیم، زیرا پسوند فایل، همان آخرین رشته قرار گرفته در آرایه رشته ای می باشد. بنابراین پسوند را در متغیر $extension خواهیم داشت و با آن، می توانیم نوع فایل انتخاب شده توسط کاربر را تشخیص بدهیم.

نکته

یکی از شرط هایی که برای چک کردن صحیح بودن فایل انتخاب شده برای آپلود، در کدها نوشته ایم، به صورت زیر می باشد :


in_array($extension, $allowedExts))

تابع in_array برای چک کردن وجود یک مقدار در یک آرایه می باشد. اگر مقدار ذخیره شده در متغیر $extension که همان پسوند فایل انتخاب شده می باشد، در آرایه $allowedExts موجود باشد، آنگاه تابع in_array ، مقدار 1 را برمی گرداند و در غیر این صورت، مقدار 0 را برمی گرداند. آرایه $allowedExts همان آرایه حاوی پسوندهای مجاز برای آپلود فایل می باشد که قبلا آن را به این صورت تعریف کردیم :


$allowedExts = array("gif", "jpeg", "jpg", "png");

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

منبع کدهای این آموزش :

http://www.w3schools.com/php/php_file_upload.asp

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

خوانده شد
مبحث بالا، مفید بود و سایت کلیدستان را دوست داشتم :
محبوب کردن این مبحث در گوگل :
اون چیزی که میخواستم نبود :
سوال دارم :
ارسال نظر :
نظرات 10 10 0
وحید
۱۳۹۵/۰۴/۰۵
۱۴:۲۴

تشکر ویژه
واقعا بدرد بخور بود
کامل و بی نقص[عکس: smiley_1.png]

shahab.es
۱۳۹۵/۰۴/۰۷
۰۶:۱۹

خسته نباشید هموطن
لذت بردم از بیانتون
خدا قوت :gol:

مصطفی
۱۳۹۵/۰۵/۰۲
۰۳:۴۰

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

siavash
۱۳۹۵/۰۵/۰۳
۱۲:۴۲

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

admin
۱۳۹۵/۰۵/۰۳
۱۷:۰۰

سلام.
آپلود عکس که با همان کدها انجام می شود (باید فرمت های مجاز برای عکس مثل jpeg و jpg و png و gif و ... را در لیست فرمت های مجاز برای فایل قرار دهید)، بعد باید در صورت موفقیت آمیز بودن آپلود عکس، آن را توسط یک تگ img نمایش بدهیم.
در مشخصه src از تگ img ، آدرس نسبی عکس نسبت به صفحه PHP را می نویسیم.
مثلا در بخشی از کدهای مبحث، آدرس فایل آپلود شده را با کد زیر تعیین کرده ایم :

کد پی‌اچ‌پی:
"upload/" $_FILES["file"]["name"

بنابراین آدرس نسبی فایل آپلود شده را به صورت بالا داریم (یا ممکن است آن را به دلخواه تغییر داده باشید). بنابراین در صورت موفقیت آمیز بودن آپلود، می توانیم با کد زیر، عکس آپلود شده را نمایش بدهیم :

کد پی‌اچ‌پی:
<img src="<?php echo "upload/" . $_FILES["file"]["name"]; ?>" /> 


Flower

شفق
۱۳۹۵/۰۶/۱۱
۱۲:۱۵

بسیار عالی و اموزنده

همیشه سلامت
باشید
[عکس: smiley_20.png]

رضا
۱۳۹۵/۰۸/۱۱
۱۶:۳۳

واقعا ممنونم ، خیلی عالی بود

اگر ممکنه اینهم بفرمایید ، میخواستم یک فیلد هم برای دریافت لینک به فرم اضافه کنم و به همراه بنر به ایمیلم ارسال بشه ، لطفا راهنمایی کنید ، مرسی

رضا
۱۳۹۵/۰۸/۱۲
۱۵:۰۷

coffee

admin
۱۳۹۵/۰۸/۱۴
۲۳:۴۱

سلام.
کلیدهای دو دسته کلید (دسته بندی) زیر را در مورد ساخت فرم و پردازش اطلاعات دریافتی از آن، بخوانید (تنها باید یک فیلد (field) جدید را بر اساس جزئیات ذکر شده، به همان فرم ساخته شده اضافه نمایید) :

دسته کلید شماره 227

دسته کلید شماره 146

مخصوصا دو کلید زیر را بخوانید :

کلید شماره 511

کلید شماره 399

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

Flower

sami
۱۳۹۵/۰۸/۲۸
۱۰:۲۸

سلام چراواسه من  این کدو تو خروجی نشون میده؟

کد پی‌اچ‌پی:
t0) { echo "error:".$_FILES["file"]["error"]."

"
; } else{ echo "بروزرسانی شد:".$_FILES["file"]["name"]; move_uploaded_file($_FILES["file"]["tmp_name"], "uploadzivar/" $_FILES["file"]["name"]); echo "Stored in: " "uploadzivar/" $_FILES["file"]["name"]; } ?>

*** نظر بدهید

دسترسی سریع

×

شماره کلید


کلید
×

شماره دسته کلید


دسته کلید
×

جستجو


جستجو

راهنمای توابع PHP

راهنمای توابع PHP بر اساس حرف اول تابع :

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

بستن منو
۵۳۶
تعداد کلیدهای این موضوع
لیست همه کلیدهای این موضوع
مجموعه ویدئوهای آموزشی PHP - مجموعه PHP Tutorials - از thenewboston.com
200
مجموعه ویدئوهای آموزشی PHP - مجموعه PHP Tutorials
69
مجموعه ویدئوهای آموزشی PHP برای مبتدیان - مجموعه PHP beginners tutorials
55
مجموعه ویدئوهای آموزشی ساخت دانلودر اینستاگرام با استفاده از PHP - مجموعه PHP Instagram Downloader Tutorial - از thenewboston.com
10
مجموعه ویدئوهای آموزشی PHP Stock Market Analyzer - مجموعه PHP Stock Market Analyzer - از thenewboston.com
20
مجموعه ویدئوهای آموزشی امنیت در PHP - مجموعه PHP Security
10
مجموعه ویدئوهای آموزشی امنیت در PHP - مجموعه PHP Security
6
مجموعه ویدئوهای آموزشی برنامه نویسی شیء گرا (OOP) در PHP - مجموعه PHP Object Oriented Programming (OOP)
13
مجموعه ویدئوهای آموزشی ساخت شبکه اجتماعی، با استفاده از PHP - مجموعه Social Network with PHP
37
مجموعه ویدئوهای آموزشی ساخت سیستم شناسایی کاربران، با استفاده از PHP - مجموعه PHP Authentication System
33
مجموعه ویدئوهای آموزشی ساخت آپلودر فایل (برای چندین فایل) با امکان نمایش پیشرفت آپلود، با استفاده از AJAX و بر اساس PHP - مجموعه AJAX Multiple File Uploader & Progress Bar
10
مجموعه ویدئوهای آموزشی ثبت نام و ورود و خروج کاربران، در PHP - مجموعه Register & Login
47
مجموعه ویدئوهای آموزشی PHP و MySQL ، با استفاده از MySQLi - مجموعه PHP and MySQL with MySQLi
9
مجموعه ویدئوهای آموزشی ساخت فایل PDF از HTML و CSS ، در PHP - مجموعه Generating PDF files from HTML and CSS
7
بستن منو
۵۰
تعداد کلیدهای این موضوع
لیست همه کلیدهای این موضوع
مباحث اولیه برای آشنایی با MySQL
13
خواندن اطلاعات کلی پایگاه های داده (databases)، در MySQL
3
خواندن اطلاعات از جدول ها (tables)، در MySQL
13
تغییر دادن اطلاعات جدول ها (tables)، در MySQL
4
شیوه های اشاره به ردیف های (rows) جدول (table)، در MySQL
1
تبدیل های مرتبط با پایگاه داده MySQL
1
query های آماده برای ساخت جدول های دارای اطلاعات، برای تست های کدنویسی، در MySQL
2
کار با اعداد، در MySQL
3
استفاده از کلاس mysqli در PHP ، برای کار با پایگاه داده MySQL
4
برنامه phpMyAdmin ، برای کار با پایگاه داده MySQL
2
مباحث عمومی در MySQL
4
بستن منو
۳۳
تعداد کلیدهای این موضوع
لیست همه کلیدهای این موضوع
مجموعه ویدئوهای آموزشی پایگاه داده MySQL - مجموعه MySQL Database Tutorial - از thenewboston.com
33
بستن منو
۵۸
تعداد کلیدهای این موضوع
لیست همه کلیدهای این موضوع
مباحث اولیه برای آشنایی با HTML
24
نمایش متن، در HTML
5
نمایش عکس، در HTML
5
لینک ها (Link)، در HTML
1
لیست ها (List)، در HTML
1
جدول ها (Table)، در HTML
2
فرم ها (Form)، در HTML
10
مباحث عمومی، در HTML
10

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)