PDA

View Full Version : اشکال در Upload کردن فایل به هاست از طریق کد نویسی



ealvandi
سه شنبه 07 فروردین 1386, 18:37 عصر
با سلام

من برای Upload کردن فایل به هاست از کد زیر استفاده کردم .

در دستگاه درست کار میکنه ولی در روی هاست جواب نمیده
* پوشه ای که قرار است فایلها در آن قرار گیرد ( myfiles ) نیز در هاستم ایجاد کرده ام.


لطفا کمکم کنید.



<?php
function upload_form()
{
global $PHP_SELF;
?>
<FORM METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA"
ACTION="<? echo $PHP_SELF ?>">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="upload">
Upload file!
<INPUT TYPE="FILE" NAME="userfile">
<INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="upload">
</FORM>
<?php
}
//********************************
function upload_file()
{
$archive_dir = "./myfiles";
$userfile = $_FILES['userfile']['tmp_name'];
$userfile_name = $_FILES['userfile']['name'];
$userfile_size = $_FILES['userfile']['size'];
$userfile_type = $_FILES['userfile']['type'];
$userfile_error = $_FILES['userfile']['error'];
$filename = basename($userfile_name);
if($userfile_size <= 0) echo ("$filename is empty.");
if(!@copy($userfile, "$archive_dir/$filename"))
{
echo("Can't copy $userfile_name to $filename.");
exit;
}
echo "$filename has been successfully uploaded.<BR>";
echo "Filesize: " . number_format($userfile_size) . "<BR>";
echo "Filetype: $userfile_type<BR>";
}
$action = $_POST['action'];
if($action == 'upload') upload_file();
else upload_form();
?>

moslem-visual
سه شنبه 07 فروردین 1386, 18:42 عصر
ACTION="<? echo $PHP_SELF ?>">

چرا اینو مستقیم از متغیر نگرفتی؟ دیگه نیازی به echo نداره، در ضمن باید اینجوری استفاده کنی:


Action="$_SERVER['PHP_SELF']"

ealvandi
سه شنبه 07 فروردین 1386, 19:13 عصر
مسلم جان کد رو اصلاح کردم ولی جواب نداد

netspc
سه شنبه 07 فروردین 1386, 19:20 عصر
میتونی اینکار رو بکنی :


function upload_form()
{
global $PHP_SELF;
$PHP_SELF = $_SERVER['PHP_SELF'];

?>

و اینکه حالت درست استفاده از inline php اینطور هست:


<FORM METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA"
ACTION="<?php echo $PHP_SELF; ?>">

netspc
سه شنبه 07 فروردین 1386, 19:21 عصر
شما برای اینکه بتونی از متغیر php_self استفاده کنی باید از object سرور استفاده کنی توی اون آبجکت میتونی از متغیرهای HTTP هم بهره ببری.
خوش باشی

ealvandi
سه شنبه 07 فروردین 1386, 20:04 عصر
من کد رو باز هم اصلاح کردم ولی باز هم فایده نداشت .
لطفا یک فر اون رو اصلاح کنه یا اگه کسی کد آماده داره که روی هاست هم کار کنه لطفا برام
بذاره .

من به این کد احتیاج فوری دارم.

خیلی ممنون میشم از لطفتون.

cybercoder
سه شنبه 07 فروردین 1386, 20:16 عصر
به ابتدای تابع Upload این خط رو اضافه کن:


global $HTTP_POST_VARS

البته من دقیق نگاه نکردم این اشکال رو در گذر سطحی دیدم
موفق باشی.

netspc
سه شنبه 07 فروردین 1386, 20:17 عصر
دوست عزیز من از کد شما استفاده کردم
همین الان هم دوباره تست کردم جواب داد
لطفاً برای رفع مشکلت دقیق خطای مورد نظر رو بنویس
و یه چیز دیگه از ویندوز استفاده میکنی یا لینوکس؟

netspc
سه شنبه 07 فروردین 1386, 20:21 عصر
اگر از php 4.10 یا پایین تر استفاده میکنی اون کدی که آقا وحید گفته رو باید اول فایلت اضافی کنی در غیر اینصورت مشکلی نیست

netspc
سه شنبه 07 فروردین 1386, 20:23 عصر
من کد شما را بطور کامل به اینصورت درآوردم
(البته تغییرات همان دوخطی بود که در بالا به آن اشاره کردم):


<?php
function upload_form()
{
global $PHP_SELF;
$PHP_SELF = $_SERVER['PHP_SELF'];

?>
<FORM METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA"
ACTION="<?php echo $PHP_SELF; ?>">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="upload">
Upload file!
<INPUT TYPE="FILE" NAME="userfile">
<INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="upload">
</FORM>
<?php
}
//********************************
function upload_file()
{
$archive_dir = "./myfiles";
$userfile = $_FILES['userfile']['tmp_name'];
$userfile_name = $_FILES['userfile']['name'];
$userfile_size = $_FILES['userfile']['size'];
$userfile_type = $_FILES['userfile']['type'];
$userfile_error = $_FILES['userfile']['error'];
$filename = basename($userfile_name);
if($userfile_size <= 0) echo ("$filename is empty.");
if(!@copy($userfile, "$archive_dir/$filename"))
{
echo("Can't copy $userfile_name to $filename.");
exit;
}
echo "$filename has been successfully uploaded.<BR>";
echo "Filesize: " . number_format($userfile_size) . "<BR>";
echo "Filetype: $userfile_type<BR>";
}
$action = $_POST['action'];
if($action == 'upload') upload_file();
else upload_form();

?>

ealvandi
سه شنبه 07 فروردین 1386, 21:02 عصر
من کد اصلاح شده را upload کرم روی هاست ولی جواب نداد

((( کد مورد نظر روی دستگاه درست کار میکنه ولی روی هاست نه )))

من اون رو روی هاست گذاشتم لطفا حتما ببینیدش
http://www.dr-givehei.ir/ch.php

منتظر جواب شما اساتید هستم
با تشکر

netspc
سه شنبه 07 فروردین 1386, 22:07 عصر
سلام دوست عزیز
این چیزهایی که در زیر به آنها اشاره میکنم را بطور دقیق چک کن:
در صفحه ای که به آن اشاره کردی 2 مدل از آپلود قرار دادی :
(اگر دقیقاً کدی که برای شما فرستاده ام را بدون تغییر کپی کرده ای)
1-ببین فولدر مورد نظر رو در جای مناسب آن ساخته ای (در ضمن اگر از لینوکس استفاده میکنی حتماً به بزرگی و کوچکی حروف توجه کن)
2- premission فولدر موردنظر که قرار است فایلهای در آن قرار گیرد را به حال rw-rw-rw و یا حالت rwx-rwx-rwx (777) قرار بده چون کاربر اینترنتی با نام کاربری anonymous وارد میشود.
من همین الان روی سرور خودم برروی اینترنت هم قرار دادم و کار کرد.

ealvandi
سه شنبه 07 فروردین 1386, 23:14 عصر
دوست عزیز و گرامیم netspc

طبق گفته شما عمل کردم و نتیجه گرفتم

امیدوارم موفق و موید باشید.

be_kh
چهارشنبه 08 فروردین 1386, 00:37 صبح
سلام
من هم مشکلی مثل دوستمون دارم و منوجه شدم که اصلا ایندکس userfile وجود ندارد و خطا میده والله ما هم گیچ شدیم

cybercoder
چهارشنبه 08 فروردین 1386, 13:33 عصر
کد کاملشو براتون میذارم
آرگومان ها

$file_id نام فیلد ورودی شامل نام فایل. $folder مسیری که باید فایل قرار بگیره (باید قابل نوشته باشه) و Optional. $types پسوندهای مختلف با کاما جدا می شن در صورتی که خالی باشه هر نوع فایلی آپلود میشه. (Optional)بازگشت

یک ارایه با دو مقدار

بدنه تابع :


<?php
/**
* A function for easily uploading files. This function will automatically generate a new
* file name so that files are not overwritten.
* Arguments: $file_id- The name of the input field contianing the file.
* $folder - The folder to which the file should be uploaded to - it must be writable. OPTIONAL
* $types - A list of comma(,) seperated extensions that can be uploaded. If it is empty, anything goes OPTIONAL
* Returns : This is somewhat complicated - this function returns an array with two values...
* The first element is randomly generated filename to which the file was uploaded to.
* The second element is the status - if the upload failed, it will be 'Error : Cannot upload the file 'name.txt'.' or something like that
*/
function upload($file_id, $folder="", $types="") {
if(!$_FILES[$file_id]['name']) return array('','No file specified');

$file_title = $_FILES[$file_id]['name'];
//Get file extension
$ext_arr = split("\.",basename($file_title));
$ext = strtolower($ext_arr[count($ext_arr)-1]); //Get the last extension

//Not really uniqe - but for all practical reasons, it is
$uniqer = substr(md5(uniqid(rand(),1)),0,5);
$file_name = $uniqer . '_' . $file_title;//Get Unique Name

$all_types = explode(",",strtolower($types));
if($types) {
if(in_array($ext,$all_types));
else {
$result = "'".$_FILES[$file_id]['name']."' is not a valid file."; //Show error if any.
return array('',$result);
}
}

//Where the file must be uploaded to
if($folder) $folder .= '/';//Add a '/' at the end of the folder
$uploadfile = $folder . $file_name;

$result = '';
//Move the file from the stored location to the new location
if (!move_uploaded_file($_FILES[$file_id]['tmp_name'], $uploadfile)) {
$result = "Cannot upload the file '".$_FILES[$file_id]['name']."'"; //Show error if any.
if(!file_exists($folder)) {
$result .= " : Folder don't exist.";
} elseif(!is_writable($folder)) {
$result .= " : Folder not writable.";
} elseif(!is_writable($uploadfile)) {
$result .= " : File not writable.";
}
$file_name = '';

} else {
if(!$_FILES[$file_id]['size']) { //Check if the file is made
@unlink($uploadfile);//Delete the Empty file
$file_name = '';
$result = "Empty file found - please use a valid file."; //Show the error message
} else {
chmod($uploadfile,0777);//Make it universally writable.
}
}

return array($file_name,$result);
}


مثال برای اشاره


if($_FILES['image']['name']) {
list($file,$error) = upload('image','uploads/','jpeg,gif,png');
if($error) print $error;
}

قسمت HTML


<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="image" /><input type="submit" value="Upload" name="action" />
</form>

موفق باشید.
[/code]

netspc
چهارشنبه 08 فروردین 1386, 16:00 عصر
سلام
من هم مشکلی مثل دوستمون دارم و منوجه شدم که اصلا ایندکس userfile وجود ندارد و خطا میده والله ما هم گیچ شدیم

دوست عزیز userfile اسم فیلدی هست که شما در فایل html تعریف میکنید .
برنامه ای که بنده بعد از تغییرات گذاشته ام به راحتی کار میکند لطفاً تمامی نکات رو رعایت کنید.