PDA

View Full Version : آموزش: اموزش وسورس کد اپلود



abasfar
دوشنبه 20 دی 1389, 16:05 عصر
ایجاد فرم برای آپلود فایل

برای آپلود فایل ها از فرم ها استفاده می شود.

به فرم 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 فرم تعیین می کند که چه نوع اطلاعاتی باید ارسال شود. "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" کپی می کند.


منبع

abasfar
سه شنبه 21 دی 1389, 11:43 صبح
سلام خواستم اینم بزارم این یکی از ajax هم استفاده شده ودارای نوار وضعیت هم است
64874

icegirl_f2r
جمعه 20 اسفند 1389, 18:41 عصر
فوری فوری فوری فوری فوری فوری فوری فوری
بچه ها این کدی که نوشتین روی هاست هم جواب میده؟ یعنی آدرس سرور را تشخیص میده یا باید تازه آدرس سرور را بدست بیاریم؟؟

abasfar
جمعه 20 اسفند 1389, 18:43 عصر
سلام نه ادرسو تشخیص میده خودش انشا الله که مشکلت حل بشه

icegirl_f2r
جمعه 20 اسفند 1389, 19:05 عصر
خطا میده!!!
باید چیکار کنم:گریه:

abasfar
جمعه 20 اسفند 1389, 19:10 عصر
دوست عزیز شما لطف دارید
اما حداقل خطا تون را بنویسید تا بتونیم کمکتان کنیم

abasfar
جمعه 20 اسفند 1389, 19:14 عصر
دوست عزیز من نگاه کردم به سایت شما کجا مشکل دارید

icegirl_f2r
جمعه 20 اسفند 1389, 19:27 عصر
این صفحه وقتی روی ادامه مطلب میزنم میاد.درصورتیکه باید فایل مورد نظر باز بشه.این سمت کاربران سایت.

Not Found

The requested document was not found on this server.

Web Server at cngo.ir

icegirl_f2r
جمعه 20 اسفند 1389, 19:31 عصر
ببینید من توی مدیریت امکان آپلود فایل دارم که در نتیجه این فایل باید در مسیر سایتم و همچنین اسمش تو بانک ذخیره بشه.اسمش که ذخیره میشه اما فایل آپلود نمیشه.اینم خطاش:
Warning: move_uploaded_file(..\file\حسابداری.htm) [function.move-uploaded-file (http://cngo.ir/admin/function.move-uploaded-file)]: failed to open stream: Permission denied in C:\inetpub\vhosts\cngo.ir\httpdocs\admin\save.php on line 83

Warning: move_uploaded_file() [function.move-uploaded-file (http://cngo.ir/admin/function.move-uploaded-file)]: Unable to move 'C:\WINDOWS\Temp\phpBCBB.tmp' to '..\file\حسابداری.htm' in C:\inetpub\vhosts\cngo.ir\httpdocs\admin\save.php on line 83

آدرس سرور را نگرفته!

کدمم اینه:
move_uploaded_file($_FILES['upload']["tmp_name"],"..\\file\\".$_FILES['upload']["name"]);

abasfar
جمعه 20 اسفند 1389, 19:32 عصر
دوست عزیز باید اسم شو تغییر بدی
نام صفحه را تغییر بده به


1.html

ببین مشکلت حل میشه

icegirl_f2r
جمعه 20 اسفند 1389, 19:41 عصر
دوست عزیز باید اسم شو تغییر بدی
نام صفحه را تغییر بده به


1.html

ببین مشکلت حل میشه
ولی من اینطور فکر نمیکنم .چون خطای
Unable to move 'C:\WINDOWS\Temp\phpBCBB.tmp' to '..\file\حسابداری.htm' in C:\inetpub\vhosts\cngo.ir\httpdocs\admin\save.php on line 83
میده و این یعنی رو هاست ذخیره نمیکنه!!!

رضا قربانی
جمعه 20 اسفند 1389, 20:32 عصر
نه حاجی - شمایی که میایید آموزش می دید ، پس دقیق و واضح آموزش بدید

دوست عزیزی که روی هاست با مشکل روبرو شدید . این رو هم در نظر داشته باشید که روی هاست باید به پوشه ی خود امکان ورود و خروج اطلاعات رو بدید
برای مثال اگر پوشه شما به اسم upload باشد باید از هاست خودتون پرومیژن پوشه رو روی 777 ست کنی.!!!!!
یه مشکل دیگه اینه که نباید اسم فایلی که آپلود می کنید فارسی باشه!!!!!

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

abasfar
جمعه 20 اسفند 1389, 20:38 عصر
دوست عزیز تا انجایی که من میدانم اون محدودیت به خاطر پروتکل http است که همه هم میدونند که ftp مشکلو حل کرده اما بازم با کد نویسی میشه این مشکل و حل کرد

وراستشو بخواین سرم خیلی شلوغ است وزیاد نمیتونم اینجا باشم

icegirl_f2r
جمعه 20 اسفند 1389, 20:56 عصر
"اگر پوشه شما به اسم upload باشد باید از هاست خودتون پرومیژن پوشه رو روی 777 ست کنی.!!!!!"
اینجا که گفتین کجاست؟؟؟
من رو پرمیژن پوشه ام رفتم و چک باکس هایی داشت که دسترسی ها را مشخص میکرد و خواندن و نوشتن هم تیک خورده بود.
اما جایی واسه وارد کردن 777 ندیدم.

رضا قربانی
جمعه 20 اسفند 1389, 21:35 عصر
"اگر پوشه شما به اسم upload باشد باید از هاست خودتون پرومیژن پوشه رو روی 777 ست کنی.!!!!!"
اینجا که گفتین کجاست؟؟؟
من رو پرمیژن پوشه ام رفتم و چک باکس هایی داشت که دسترسی ها را مشخص میکرد و خواندن و نوشتن هم تیک خورده بود.
اما جایی واسه وارد کردن 777 ندیدم.

یه کاری کن - همه رو تیک دار کن - یعنی همش تیک داشته باشن . در این صورت 777 می شه . روی هاست خودم به این صورت هست و فکر می کنم تمامی هاست ها به این صورت باشن

icegirl_f2r
جمعه 20 اسفند 1389, 21:56 عصر
یه کاری کن - همه رو تیک دار کن - یعنی همش تیک داشته باشن . در این صورت 777 می شه . روی هاست خودم به این صورت هست و فکر می کنم تمامی هاست ها به این صورت باشن

همه اشون تیک داره اما غیرفعال اند.
یعنی مطمئن باشم اشکال از همین جاست؟؟؟؟

رضا قربانی
جمعه 20 اسفند 1389, 22:20 عصر
خطای خودتون رو دوباره بذارید

خطای قبلی که گذاشتید Permission پرومیژن رو خطا گرفته که من بهتون گفتم چی کار کنید

icegirl_f2r
جمعه 20 اسفند 1389, 22:38 عصر
خطای خودتون رو دوباره بذارید

خطای قبلی که گذاشتید Permission پرومیژن رو خطا گرفته که من بهتون گفتم چی کار کنید

همون خطا را میداد. دیگه خطایی غیر این ک نداده فعلا.
فردا بپرسیم پرمیژن را چیکار کنیم اگه نشد بازم مزاحمتون میشم

رضا قربانی
جمعه 20 اسفند 1389, 22:46 عصر
همون خطا را میداد. دیگه خطایی غیر این ک نداده فعلا.
فردا بپرسیم پرمیژن را چیکار کنیم اگه نشد بازم مزاحمتون میشم

فایلت رو اینجا واسم قرار بده تا واست درستش کنم -

icegirl_f2r
جمعه 20 اسفند 1389, 23:14 عصر
خوب کدوم فایل را بفرستم؟

رضا قربانی
شنبه 21 اسفند 1389, 00:14 صبح
اینم کل فایل ها و دیتا بیسمم که داخلش هست.
ممنون


واستون خوبش کردم و اول روی لوکال بالا بیار بعد بفرست به هاست - فعلا فایل هایی که آپلود می کنی رو با حجم کم آپلود و تست کن

فایل هایی که دستکاریش کردم - فایل ایندکس صفحه اصلی شما و فایل save.php صفحه ادمین

ولی این چیزی که نوشتید کامل نیست - الان شما فقط آپلود می کنید و از طرف دیگه دانلودش می کنید ولی باید فایل رو هم پاک کنید و همراه فایل یه ساعتی - تاریخی - چیزی بفرستید که اسم فایل هایی که می فرستید با هم قر و قاطی نشه و به مشکل بر بخورید:متفکر:

خلاصه بازم کمک خواستی من در خدمتم

موفق باشی دوست من

icegirl_f2r
شنبه 21 اسفند 1389, 09:21 صبح
ممنون مثل اینکه اشکال از همین پرمیژنه بود.
یه سوال اگه فایلی ک آپلود میشه قبلا وجود داشته باشه روش نوشته نمیشه ؟ یعنی جا قبلیه قرار نمیگیره؟؟؟

icegirl_f2r
شنبه 21 اسفند 1389, 09:35 صبح
ممنون. این ک شما درستش کردین با اونی ک خودم نوشتم فرقی نمیکنه. چون قبلا امتحان کرده بودم.
بازم تشکر.
فعلا این واسه 1 الی 2 ماه کاربرد داره. قراره کاملترش را بنویسم واسه همین خیلی روش هزینه نمیکنم.
به نظر شما تا یکی دوماه ک ب مشکل بر نمیخورم؟؟

رضا قربانی
شنبه 21 اسفند 1389, 11:45 صبح
دوست من این سورسی که واست نوشتم و تست کردم مشکلی نداره و اگر به مشکلی بر خوردید مربوط به هاست و پرومیژن فولدر شما می شه.

صفحه ادمین شما یه کم کاربر رو گم می کنه - باید طوری طراحی کنی که کاربر زمانی که وارد سایت می شه احساس امنیت و سردر گمی نکنه و به کاراش برسه. شما توی پست قبلی گفتید هزینه !! چه هزینه ای ، مگه خودتون طراحی نمی کنید . به نظر من دو ماه روش وقت بذاری خوبه ولی این ملاک نمی شه - یه برنامه نویسی میاد همین کار دوماهه شما رو طی 2 هفته انجام می ده .

این صفحه ادمین رو نگاه کن :
http://mehresobhan.com/sama/samamehr/
یوزر و پسووردش 1 هست

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

به این صورت توی کارهات همیشه موفق می شی.

رضا قربانی
شنبه 21 اسفند 1389, 11:48 صبح
یه سوال دیگه ای هم کردید که گفتید اگر فایل تکراری باشه - برای این کار منم بهتون جواب دادم و گفتم که باید یه ساعتی ، تاریخی به نام فایل بچسبونید
. می تونی از این کد استفاده کنی


if(!empty($_FILES["file"]['name']))
{
$name=strtolower( $_FILES['file']['name']);
$ext=$name[strlen($name)-3].$name[strlen($name)-2].$name[strlen($name)-1];
$time = time();
$reza=$name."_".$time.".".$ext;
if(!file_exists("../download/".$reza))
{
move_uploaded_file($_FILES['file']['tmp_name'],"../download/".$reza) or die ("Could not move_uploaded_file");

}


}

icegirl_f2r
شنبه 21 اسفند 1389, 12:32 عصر
ممنون شما درست میگین.
منم این پروژه را یه هفته ای نوشتم.منظورم این بود ک فقط 1 الی 2 ماه از این سایتی ک نوشتم استفاده میشه.
راستی این صفحه ادمین را ک گفتین
http://mehresobhan.com/sama/samamehr/ (http://mehresobhan.com/sama/samamehr/)
نگاه کردم اما نمیتونم یکی از فیلدهاش را پر کنم!!!

رضا قربانی
شنبه 21 اسفند 1389, 15:47 عصر
نگاه کردم اما نمیتونم یکی از فیلدهاش را پر کنم!!!
کدوم قسمت - چه فیلدی ؟

راستی این فقط آزمایشی رفت توی نت و در حال تکمیل شدن هست.

farshad sepehri
شنبه 21 اسفند 1389, 16:37 عصر
واقعا سایت خوبی زدی

icegirl_f2r
شنبه 21 اسفند 1389, 18:45 عصر
کدوم قسمت - چه فیلدی ؟

راستی این فقط آزمایشی رفت توی نت و در حال تکمیل شدن هست.

تو قسمت login من نمیتونم نام کاربری وارد کنم مگه راست کلیک کنم و paste را بزنم.
اصلا انگار موس توش نمیره.
اما بهر طریقی شده وارد شدم. قسمت مدیریتش جالب تر از خود سایت است.

رضا قربانی
یک شنبه 22 اسفند 1389, 13:51 عصر
تو قسمت login من نمیتونم نام کاربری وارد کنم مگه راست کلیک کنم و paste را بزنم.
اصلا انگار موس توش نمیره.
اما بهر طریقی شده وارد شدم. قسمت مدیریتش جالب تر از خود سایت است.
:لبخند:

اون قسمت یه کم امنیتی روش کار کردم که با بعضی از مرورگر ها به این صورت می شه. (مرورگرتون)

موفق باشی دوست من

shahriyar3
یک شنبه 22 اسفند 1389, 14:36 عصر
آقاي galiken_it (http://barnamenevis.org/member.php?151175-galiken_it) گرامي
اين قسمت و كه شما ننوشتيد . نه؟
http://78.38.78.19/
اگر نوشتيد كه بگيد حدودا چقدر براش پول دريافت كرديد ممنون ميشم . من يه پيشنهادي داشتم در اين سطح ميخوام ببينم تو چه رنج قيمتي بود براي شما.

رضا قربانی
یک شنبه 22 اسفند 1389, 14:51 عصر
ببینید - اون قسمت مربوط می شه به سیستم اتوماسیون و ما چنین اجازه نداریم که اون رو بسازیم ، چون هر کسی این سیستم رو طراحی می کنه ، باید جواز و پروانه خاصی داشته باشه که از کشور تایید شده باشه . اگر شما خودتون این رو بنویسید و یکی بیاد گیر بده کارت ساخته است و تمام زحماتت بر باد می ره

این چیزی که شما دیدی که بیشتر دانشگاه های آزاد ازش استفاده می کنن و قیمتش هم تا 10 تومن هست و اسمش هم سیستم سیدا هست که با aspx طراحی شده .

اطلاعاتی دیگه ای خواستی در خدمتم

موفق باشی دوست من

shahriyar3
یک شنبه 22 اسفند 1389, 15:38 عصر
ببینید - اون قسمت مربوط می شه به سیستم اتوماسیون و ما چنین اجازه نداریم که اون رو بسازیم ، چون هر کسی این سیستم رو طراحی می کنه ، باید جواز و پروانه خاصی داشته باشه که از کشور تایید شده باشه . اگر شما خودتون این رو بنویسید و یکی بیاد گیر بده کارت ساخته است و تمام زحماتت بر باد می ره

این چیزی که شما دیدی که بیشتر دانشگاه های آزاد ازش استفاده می کنن و قیمتش هم تا 10 تومن هست و اسمش هم سیستم سیدا هست که با aspx طراحی شده .

اطلاعاتی دیگه ای خواستی در خدمتم

موفق باشی دوست من
خودم كه مستقيم قرار نبود انجام بدم . يه شركتي مناقصه دانشگاه يرنده شده بودن براي اين كار به من هم پيشنهاد همكاري دادن .

رضا قربانی
یک شنبه 22 اسفند 1389, 21:22 عصر
خودم كه مستقيم قرار نبود انجام بدم . يه شركتي مناقصه دانشگاه يرنده شده بودن براي اين كار به من هم پيشنهاد همكاري دادن .
اگه حقوقش بالای 1 تومن هست برو ، خیلی خوبه