PDA

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



ABZiko
چهارشنبه 05 شهریور 1393, 17:27 عصر
سلام، این کد بنده برای آپلود فایل هست :


<?php

$target='uploads/'.basename($_FILES['file']['tmp_name']);

if(isset($_FILES['file'])){

if(is_uploaded_file($_FILES['file'])){

move_uploaded_file($target);

}

else{

echo "آپلود شما با خطا مواجه شد !";

}

}

?>


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

arash691
چهارشنبه 05 شهریور 1393, 21:35 عصر
بزرگترین مشکلش که میتونه خیلی خطرناک هم باشه عدم اعتبار سنجی موارد زیر:

1- بررسی نوع فایل ( یکسری پسوندهای خاص مجوز اپلود شدن رو داشته باشن )
2 - بررسی حجم فایل ( تعیین محدودیت برای اپلود )
3- جلوگیری از ورود فایل test.php.jpg ( مفسر بدون در نظر گرفتن پسوند این فایل رو اجرا میکنه میتونه حاوی اسکریپت های خطرناک باشه )
4 - بررسی اینکه انتقال فایل از پوشه tmp به مسیر اصلی صورت گرفته با نه

ABZiko
چهارشنبه 05 شهریور 1393, 23:32 عصر
تشکر، فقط این یک ارور می ده :
Undefined index
توی خط 3 ! چرا؟

Mohammadsgh
پنج شنبه 06 شهریور 1393, 00:09 صبح
پشتش@ رو بزار

ABZiko
پنج شنبه 06 شهریور 1393, 09:06 صبح
پشتش!؟؟ منظورتون کد های HTML هست؟ بفرمائید :



<form enctype="multipart/form-data" action="upload.php">

<p class="uploadTitle">آپلود</p>

<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />

<input type="submit" value="ذخیره" />

</form>

arash691
پنج شنبه 06 شهریور 1393, 10:22 صبح
اینطوری بنویس :





<?php if(isset($_FILES['file'])){ if(is_uploaded_file($_FILES['file'])){ $target='uploads/'.basename($_FILES['file']['tmp_name']); move_uploaded_file($target); } else{ echo "آپلود شما با خطا مواجه شد !"; } } ?>

ABZiko
پنج شنبه 06 شهریور 1393, 14:48 عصر
ممنون ولی کار نمی کنه و ارور هم نمی ده. چی کار باید بکنم؟

محسن شامحمدی
پنج شنبه 06 شهریور 1393, 15:08 عصر
پشتش!؟؟ منظورتون کد های HTML هست؟ بفرمائید :



<form enctype="multipart/form-data" action="upload.php">

<p class="uploadTitle">آپلود</p>

<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />
<input type="file" name="file" />

<input type="submit" value="ذخیره" />

</form>


خب این همه upload.قاطی می کنه دیگه
شما فقط یدونه file بذار.درست می شه

arash691
پنج شنبه 06 شهریور 1393, 17:46 عصر
خب این همه upload.قاطی می کنه دیگه
شما فقط یدونه file بذار.درست می شه

مشکلی نیست ... شما باید نام هر کدوم رو متغیر بگیرید file1 , file2 ... بعدشم برای اپلود های چندتایی باید از foreach استفاده بکنی ...



foreach($_FILES as $input_name) {
}

peymang
پنج شنبه 06 شهریور 1393, 20:05 عصر
متد move_uploaded_file دو تا پارامتر داره

php manual (http://php.net/manual/en/features.file-upload.post-method.php) آپلود یه آرایه از فایل ها example #3

کد HTML




<!doctype html>

<html lang="en">
<head>

<meta charset="UTF-8">

<title>Document</title>

</head>

<body>

<form action="upload.php" method="post" enctype="multipart/form-data">

<input type="file" name="file[]"/>
<br/>
<input type="file" name="file[]"/>
<br/>
<input type="file" name="file[]"/>
<br/>
<input type="file" name="file[]"/>
<br/>
<input type="file" name="file[]"/>
<br/>
<input type="file" name="file[]"/>
<br/>
<input type="submit" value="upload"/>
</form>
</body>
</html>




کد PHP





<?php
foreach ($_FILES["file"]["error"] as $key => $error) {

if ($error == UPLOAD_ERR_OK) {

$tmp_name = $_FILES["file"]["tmp_name"][$key];

$name = $_FILES["file"]["name"][$key];

move_uploaded_file($tmp_name, "upload/$name");

}

}



چند تا نکته
آرایه FILES دارای این خونه ها هست
name نام فایل به همراه پسوند فایل (در صورت داشتن)
type نوع فایل که از روی پسوند فایل تشخیص داده میشه
tmp_name آدرس موقتی فایل که معمولا داخل یه پوشه به اسم tmp هست و در هم بر همه مثلا C:\server\tmp\phpBD97.tmp
error اطلاعات بیشتر (http://php.net/manual/en/features.file-upload.errors.php)
size که حجم فایل رو نشون میده

از اینا می تونی برای اعتبار سنجی فایل هات استفاده کنی

مثلا داخل اولین پست لازم نیست از basename استفاده کنی
و tmp_name آدرس موقعتی فایلت هست نه اسم فایلت
و باید از خونه ی name استفاده کنی




$FILES['filename']['name']

ABZiko
جمعه 07 شهریور 1393, 15:05 عصر
سلام، این کدم رو یکم ویرایش کردم البته نه از لحاظ امنیتی ولی باز هم ارور می ده :


<?php

$name=$_FILES['userFile']['name'];
$tmp=$_FILES['userFile']['tmp_name'];

if(isset($_FILES)){

if(is_uploaded_file($tmp)){

if(move_uploaded_file($file,'/uploads/'.$name)){

echo "Your file has uploaded !";

}

else{

echo "Your file didn't uploaded !";

}

}

else{

echo "There is error with your code !";

}

}

else{

echo "You haven't chosen a file !";

}

?>


این هم خطا :



( ! ) Notice: Undefined index: userFile in D:\Wamp\www\ZikoUpload\upload.php on line 3


Call Stack


#
Time
Memory
Function
Location


1
0.0007
248504
{main}( )
..\upload.php:0





( ! ) Notice: Undefined index: userFile in D:\Wamp\www\ZikoUpload\upload.php on line 4


Call Stack


#
Time
Memory
Function
Location


1
0.0007
248504
{main}( )
..\upload.php:0


There is error with your code !

مشکل از چیه؟ فکر می کنم input ها رو نمی تونه پیدا کنه.

peymang
جمعه 07 شهریور 1393, 16:44 عصر
بله داخل پست #5 شما داخل کد html اسم اینپوت رو file دادید و داخل این کد شما userFile دادید

و وقتی که چند تا اینپوت با یک نام دارید بهتون یک آرایه از هر خونه متغییر FILES میده.
مثلا ایندکس name خودش یه آرایه دیگس و همینطور برای tmp_name ، type و ...

پیشنهاد می کنم یه بار این چند تا اینپوت رو پر کنید و ارسال کنید به صفحه ی کدتون
و یه var_dump از متغیر FILES بگیرید تا دستتون بیاد دقیقا دارید با چی کار می کنید.

اون کدی که من گذاشتم هم کار می کنه می تونید از اون استفاده کنید ( تا حالا امتحانش کردید؟)