PDA

View Full Version : اپلود فایل با پی اچ پی به صورت خودکار



irwebir
جمعه 03 بهمن 1393, 13:26 عصر
سلام دوستان من یه کد پی اچ پی دارم میخوام که کاری بکنمم که این کد به صورت خودکار از یه ادرس توی سیستم یه فایل رو اپلود کنه



<?php

$valid_formats = array("jpg", "png", "gif", "zip", "bmp");
$max_file_size = 1024*100; //100 kb
$path = "uploads/"; // Upload directory
$count = 0;

if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
// Loop $_FILES to execute all files
foreach ($_FILES['files']['name'] as $f => $name) {
if ($_FILES['files']['error'][$f] == 4) {
continue; // Skip file if any error found
}
if ($_FILES['files']['error'][$f] == 0) {
if ($_FILES['files']['size'][$f] > $max_file_size) {
$message[] = "$name از حجمی بالاتر از مقدار مجاز برخوردار است.";
continue; // Skip large files
}
elseif( ! in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats) ){
$message[] = "$name از فرمت فایلی مجاز برای آپلود برخوردار نیست.";
continue; // Skip invalid file formats
}
else{ // No error found! Move uploaded files
if(move_uploaded_file($_FILES["files"]["tmp_name"][$f], $path.$name)) {
$count++; // Number of successfully uploaded files
}
}
}
}
}
?>

<!doctype html>
<html lang="fa-IR">
<head>
<meta charset="UTF-8" />
<title>اسکريپت آپلود فايل</title>
<link href="style.css" rel="stylesheet">

</head>
<body>
<div class="wrap">
<?php
# error messages
if (isset($message)) {
foreach ($message as $msg) {
printf("<p class='status'>%s</p></ br>\n", $msg);
}
}
# success message
if($count !=0){
printf("<p class='status'>%d فایل با موفقیت اضافه شد.</p>\n", $count);
}
?>
<p>بيشترين سایز آپلود فایل 100 کیلوبایت و فرمت های مجاز عبارتند از jpg، png و gif</p>
<br />
<br />
<!-- Multiple file upload html form-->
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="files[]" multiple="multiple" accept="image/*">
<input type="submit" value="آپلود کن!">
</form>
</div>
</body>
</html>


چطوری کار کنم به صورت خودکار اپلود کنه ؟؟

davidrobert
جمعه 15 اسفند 1393, 19:23 عصر
سلام دوست عزیز ممنون بابت سورست میشه کاری هم کرد که فایلی که آپلود میشه اسمش رو به تکس باکس داد تا اسم فایل رو داخل دیتابیس ذخیره کرد ممنون میشم میخوام وقتی فایل معتبربود فایل رو آپلود کنه و اسمش رو داخل کادر متن بریزه ممنون میشم این کد رو به هم بدید.

MMSHFE
شنبه 16 اسفند 1393, 08:05 صبح
دوست عزیز، شما به هیچ عنوان، هیچ گونه کنترلی روی سیستم کلاینت ندارین. این مهمترین اصل در بخش امنیت کاربران توی پروتکل HTTP محسوب میشه. هرگونه اطلاعاتی که منجر به فاش شدن هویت کلاینت بشه و حریم خصوصی اون رو نقض کنه، اجازه انتقال ازطریق HTTP رو نداره و مرورگرها هم حق ندارن اون رو در اختیار اسکریپتها بگذارن (حتی JS که سمت کلاینت اجرا میشه). شما اگه توی آپلود دستی هم وقتی فایل انتخاب میشه، با JS محتوای المنت مربوطه رو بررسی کنید، میبینید که فقط اسم فایل اومده و خبری از آدرسش نیست. اگه اینطوری بود که دیگه هیچ کسی جرأت نمیکرد سایتها رو باز کنه. خود شما اگه سرور لینوکس داشتین و وارد سایتی میشدین و میدیدین فایل etc/passwd/ شما رو برای خودش آپلود کرده چه حالی بهتون دست میداد؟!

davidrobert
شنبه 16 اسفند 1393, 17:09 عصر
یعنی شما میگید این کد که برای آپلود تصویر هستش هیچ گونه امنیتی برای آپلود نداره چون اطلاعات کاربر به صورت ایمن اپلود نمیشه اگه امکانش هستش که کدی برای اپلود بدید که اسم فایل رو بده برای آپلود یا آدرس فایل آپلود رو بده برای نمایش تصویر در سایت.

MMSHFE
شنبه 16 اسفند 1393, 17:47 عصر
متوجه منظورتون نشدم. من گفتم نمیشه شما کامپیوتر کلاینت رو مجبور به کاری کنید یا اطلاعاتی مثل آدرس فیزیکی فایل رو ازش بدست بیارین.

davidrobert
شنبه 16 اسفند 1393, 18:57 عصر
پس برای به دست آوردن نام فایل برای نمایش داده باید چیکار کرد.

MMSHFE
شنبه 16 اسفند 1393, 19:02 عصر
شما با کمک اندیس name از آرایه مربوط به فایل آپلود شده در FILES_$ میتونید اسم فایل (نه مسیرش) رو بدست بیارین. مثال:

echo $_FILES['photo']['name'];