PDA

View Full Version : upload



mostafa612003
دوشنبه 21 مهر 1382, 10:53 صبح
سلام
من به یک کد که بتواند فایلی را روی سرور uplode کند احتیاج دارم


متشکرم

houtanal
دوشنبه 21 مهر 1382, 11:42 صبح
upload.htm
<html>

<form action="myupload.php" method=post enctype="multipart/form-data">
submit this file: <input type=file name="userfile"><br>
<input type=submit><br>
</form>
</html>


Main upload Manengment file:

myupload.php
<html>
<?
// In PHP earlier then 4.1.0, $HTTP_POST_FILES should be used instead of $_FILES.
if(!empty($_FILES["userfile"])) {
$uploaddir = "/upload/" // set this to wherever
//copy the file to some permanent location
if (move_uploaded_file($_FILES["userfile"]["tmp_name"], $uploaddir . $_FILES["userfile"]["name"])) {
echo("file uploaded");
} else {
echo ("error!");
}
}
?>
</html>


یرای کار با فایل آپلود شده از

$_FILE[]
استفاده می کنیم که چند ورودی آنرا برای شما می نویسم توجه کنید این آرایه خلاصه همان آرایه http_post_files است و در ضمن یک آرایه دو بعدی است.




$_FILES["userfile"]["name"]
نام اصلی فایل روی سیستم کاربر


$_FILES['userfile']['type']
نوع فایل که در صورت پشتیبانی مرورگر نمایش داده می شود مثل"image/gif"

$_FILES['userfile']['size']
اندازه فایل

$_FILES['userfile']['tmp_name']
نام موقتی فایل روی سرور



بعد از اینکه فایل با موفقیت آپلود شد می توانید از تابع

move_uploaded_file()
برای انتقال آن به مکان دلخواه استفاده کنید

برای اطمینان از موفقیت در آپلود فایل نیز می توانید از تابع


[b]is_uploaded_file()[/b]

Tells whether the file was uploaded via HTTP POST (PHP 3>= 3.0.17, PHP 4 >= 4.0.3)
bool is_uploaded_file ( string filename )

استفاده کنید که مثال آنرا نیز در زیر برایتان می آورم


<?php
/* Userland test for uploaded file. */
function is_uploaded_file($filename) {
if (!$tmp_file = get_cfg_var('upload_tmp_dir')) {
$tmp_file = dirname(tempnam('', ''));
}
$tmp_file .= '/' . basename($filename);
/* User might have trailing slash in php.ini... */
return (ereg_replace('/+', '/', $tmp_file) == $filename);
}

/* This is how to use it, since you also don't have
* move_uploaded_file() in these older versions: */
if (is_uploaded_file($HTTP_POST_FILES['userfile']) ) {
copy($HTTP_POST_FILES['userfile'], "/place/to/put/uploaded/file");
} else {
echo "Possible file upload attack: filename '$HTTP_POST_FILES[userfile]'.";
}
?>


در مرجع کامل php در php.netنیز این مطلب با عنوان
Handling file uploads
بیان شده است

در ضمن درwww.zend.comنیز مقالات بسیار جالب و کاملی در این زمینه وجود دارد
آدرس یکی از مقالات که کمک زیادی به شما خواهد کرد

http://www.zend.com/zend/spotlight/uploading.php

mostafa612003
دوشنبه 21 مهر 1382, 14:46 عصر
سلام

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


Warning: SAFE MODE Restriction in effect. The script whose uid is 610 is not allowed to access /var/www/html owned by uid 0 in /home/virtual/site107/fst/var/www/html/upload.php on line 8
error!

در صورتی که من می توانم از طریق ftp در این پوشه فایل بریزم

houtanal
دوشنبه 21 مهر 1382, 14:55 عصر
توجه کنید در این اسکریپت از آدرس دهی های یونیکس استفاده شده ولی به هر حال من تا کنون به چنین مشکلی بر نخورده ام .فکر کنم سئوال شما راDelphiAssistantبتواند پاسخ دهد و یا با واحد پشتیبانی سرورتان تماس بگیرید
این اسکریپت تنها یک مثال است توصیه می کنم حتما مقاله ای را که آدرسش را برایتان گذاشته ام مطالعه کنید :o

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

houtanal
سه شنبه 22 مهر 1382, 01:25 صبح
به شما قول یک کلاس را داده بودم ولی وقتی روی آن کار میکردی دیدم می توان آنرا برای تمامی پردازش های فایل گسترش داد .سعی میکنم آنرا تا آخر این هفته تمام کنم تا بتوانید به صورت یک نرم افزار سورس باز و آموزشی از آن استفاده کنید.

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

فرم html من با نام fileuploading.htm



My HTML form it name is fileuploading.htm

<form enctype="multipart/form-data" action="fileuploading.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>



برنامه php من با نام fileuploading.php





<?php

/*-------------------------------------------
This is educational file handeling in post method writen with houtanal

Usage function:
1- bool move_uploaded_file ( string filename, string destination )
2- bool isset ( mixed var [, mixed var [, ...]] )
3- bool file_exists ( string filename )
4- int fileatime ( string filename )
5- int filemtime ( string filename )
6- int filesize ( string filename )
7- string date ( string format [, int timestamp ] )
8- bool print_r ( mixed expression [, bool return] )

Usage keword:
1- $_FILES[][] = $HTTP_POST_FILES[][]

Information about $_FILES[][]:

1-1: $_FILES['userfile']['name']
The original name of the file on the client machine.

1-2: $_FILES['userfile']['type']
The mime type of the file, if the browser provided this information. An example would be "image/gif".

1-3: $_FILES['userfile']['size']
The size, in bytes, of the uploaded file.

1-4: $_FILES['userfile']['tmp_name']
The temporary filename of the file in which the uploaded file was stored on the server.

1-5: $_FILES['userfile']['error']
The error code associated with this file upload. ['error'] was added in PHP 4.2.0

2- @ This character is for error handeling

-------------------------------------------*/

//note : you can change the php.ini for select the
//defult tmp address and defult maximum size and
//Whether or not to allow HTTP file uploads.


Main program starting:


$uploaddir = 'C:/apache2/htdocs/'; //yo path address which want upload file save in that

$uploadfile = $uploaddir. $_FILES['userfile']['name']; // the uploaded file destenision

if(isset($_FILES['userfile'])) //userfile is you form filed name
{
if(file_exists($_FILES['userfile']['name'])){
echo "this file has been exists in &<b>".$uploaddir."</b>&with this information:<p>";

echo "File name is:&".$_FILES['userfile']['name']."&<p>";

echo $_FILES['userfile']['name']."&&> &Was <b>last accessed</b> in:& "
.date("D M j G:i:s T Y", fileatime($_FILES['userfile']['name']))."<p>";

echo $_FILES['userfile']['name']."&&> &Was <b>last modified</b>:& "
. date ("D M j G:i:s T Y", filemtime($_FILES['userfile']['name']))."<p>";

echo $_FILES['userfile']['name']."&&> &<b>Size</b> is:& "
.filesize($_FILES['userfile']['name'])."Bytes<p>";

echo "<a href='test.htm'>Back to file choose!</a>";
}
else{
print "<pre>";
if (@move_uploaded_file($_FILES['userfile']['tmp_name '], $uploadfile)) {
print "File is valid, and was successfully uploaded. ";
print "Here's some more information:\n";
print_r($_FILES);
echo "<a href='test.htm'>Back to file choose!</a>";
}
else {
print "Possible file upload attack! Here's some debugging info:\n";
print_r($_FILES) //Print_r() print the arrays data;
}
print "</pre>";
}
}

?>

mostafa612003
سه شنبه 22 مهر 1382, 08:32 صبح
خیلی متشکرم
من از این کد استفاده کردم ظاهرا فایل را منتقل کرده ولی وقتی به سرور وصل می شوم می بینم که فایل نیست

houtanal
سه شنبه 22 مهر 1382, 12:09 عصر
این دو خط مسئول آدرس دهی هستند


$uploaddir = 'C:/apache2/htdocs/'; //yo path address which want upload file save in that

$uploadfile = $uploaddir. $_FILES['userfile']['name']; // the uploaded file destenision


همان طور گه گفتم این کد را بنا به نیاز های خود باید تغییر دهید

mostafa612003
سه شنبه 22 مهر 1382, 12:59 عصر
سلام
خوب چون من فایلها را روی سرور می گذارم مسیر کامل را ندارم
گزارشی که بعد از اجرای برنامه به من می دهد نشان دهنده انتقال فایل است


به هر حال خیلی متشکرم