PDA

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



zootos
یک شنبه 18 دی 1390, 08:27 صبح
سلام

یه شمکلی که دارم اینکه که وقتی با move_uploaded_file کار می کنم اسم فایل اگه فارسی باشه درس کپی توی فولدرش نمی سازه یا کپی نمی کنه من چیکار باید بکنم که اسمشو فارسی بزاره.

خواهشا بچه سریع جوابمو بدید ممنون

zootos
یک شنبه 18 دی 1390, 10:15 صبح
کسی نمی دونه چکار کنم

zootos
یک شنبه 18 دی 1390, 10:41 صبح
بابا کسی جواب بده کسی نیست ای بابا

mtchabok
یک شنبه 18 دی 1390, 11:20 صبح
البته خودم هنوز تست نکردم ولی یادمه که دوستان به این شیوه اسامی فارسی رو به عنوان نام فایل قرار میدادن :

move_uploaded_file($tempFile, $path . '/' .mb_convert_encoding($fileName, 'UTF-8'))

mbf5923
یک شنبه 18 دی 1390, 11:58 صبح
دوست عزیز این روشی که گفتید کار نکرد

zootos
یک شنبه 18 دی 1390, 12:38 عصر
البته خودم هنوز تست نکردم ولی یادمه که دوستان به این شیوه اسامی فارسی رو به عنوان نام فایل قرار میدادن :

move_uploaded_file($tempFile, $path . '/' .mb_convert_encoding($fileName, 'UTF-8'))


آقا کار نمی کنه تو رو خدا یکی کمک کنه

هادی2020
یک شنبه 18 دی 1390, 23:37 عصر
move_uploaded_file با utf-8 سازگار نیست و یه مشکل دیگه برای همه درت کرده خودمم چند وقته دنبال راه حلم کدهایی هم که دیدم همشون از یکی از دو کد زیر با توجه به سیستم عامل سرور اجرا شده اند. از دوستان میخوام تا راهنمایی کنن


move_uploaded_file($_FILES['myfile']['tmp_name'], iconv("utf-8", "big5", $filename))
یا

$this->name=mb_convert_encoding($_FILES['myfile']['name'],"UTF-8","auto");

البته پارامترهای big5 و auto برای تعیین فرمت خروجی هستش نمی دونم utf-8 رو باید با چی نشون بدیم

mtchabok
دوشنبه 19 دی 1390, 10:40 صبح
خیلی جستجو کردم ولی ظاهرا که نمیشه فایل رو با نام فارسی ذخیره کرد اصلا کلا با utf-8 نمیشه ذخیره کرد و این مشکل رو زبانهای دیگه که از این کدگذاری استفاده میکنن هم دارن .
بهترین راه اینه که یه جدول بسازین و نام فارسی رو قرار بدین و نام واقعی رو جلوش و در هنگام درخواست فایل از جدول نام واقعی رو در بیارین .

zootos
سه شنبه 20 دی 1390, 11:22 صبح
آخرش هم همین کارو کردم ولی می خواستم که یه فیلد الکی اضافه نکنم.
حالا بازم به فکرش باشید ببینید کسی می تونه حلش کنه

eshpilen
سه شنبه 20 دی 1390, 12:54 عصر
ایده ای که بنظر بنده میرسه تبدیل نام فایل به فرمت Base64 یا Quoted-printable است.
این کد رو برای چک کردنش نوشتم:

<?php
header('Content-Type: text/html; charset=utf-8');

if(isset($_POST['submit'])) {

//move_uploaded_file($_FILES["file"]["tmp_name"], base64_encode($_FILES["file"]["name"]));

move_uploaded_file($_FILES["file"]["tmp_name"], quoted_printable_encode($_FILES["file"]["name"]));

}

?>

<html>
<body>

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

</body>
</html>

مزیت Base64 اینه که اگر نام فایل فارسی باشه طول رشتهء خروجی کمتر از Quoted-printable است.

مزیت Quoted-printable اینه که اگر نام فایل با حروف انگلیسی باشه به همون شکل خروجی میده و بنابراین نام این فایلها که روی هارد ذخیره میشن برای انسان هم خواناست؛ و ضمنا بنابراین طول خروجی اون برای نامهای لاتین کوتاهتر از Base64 میشه.

با توجه به این خواص، فکر میکنم Quoted-printable برای سیستم آپلود بهتر باشه، چون بطور معمول فایلهای با نام فارسی نسبت به فایلهای با نام لاتین خیلی کمتر هستن. ضمنا خیلی از فایلهای فارسی ممکنه کاراکترهای انگلیسی هم در نام خودشون داشته باشن که استفاده از Quoted-printable باعث تشخیص راحتتر اونا میشه چون اون کاراکترهای انگلیسی رو میشه در نام فایل با چشم هم تشخیص داد.

راستی برای تبدیل نام فایل های ذخیره شده هم که حتما میدونید باید از توابع quoted_printable_decode (http://www.php.net/manual/en/function.quoted-printable-decode.php) و base64_encode استفاده کنید.
موقعی که میخواید فایلی پیدا کنید باید اول اسم فایلها رو تبدیل کنید.

-------------------------------

البته یک نکتهء دیگه که الان بنظرم رسید اینه که برای استفاده از Quoted-printable باید محدودیت های طول نام فایل در سیستم عاملهای مختلف رو هم بررسی کرد. چون طول نامهای فارسی که با این تابع تبدیل بشن چند برابر میشه و اگر نام فارسی اولیه طولانی باشه ممکنه بعد از تبدیل اونقدر طولانی تر بشه که با محدودیت طول نام فایل در سیستم عامل سرور برخورد بکنه. اگر چنین مشکلی پیش بیاد و احتمالش زیاد باشه اونوقت مجبورید از راهکار دیگری مثل Base64 استفاده کنید. البته Base64 هم طول نامهای فارسی رو افزایش میده (و همچنین طول نامهای انگلیسی رو)، ولی مقدارش کمتر از Quoted-printable است.
یک راه حل دیگه هم میتونه چک کردن این مسئله قبل از انجام عملیات باشه و به کاربر اطلاع داده بشه که طول فایل خودش رو به مقدار مجاز کاهش بده. حداکثر طول نام فایل باید به اندازهء معقولی باشه و بیش از حد کم نباشه که در بیشتر موارد مشکل ایجاد کنه.
در ارتباط با محدودیت نام فایل ها در سیستم فایلهای مختلف بنظرم ذکر این منبع مفید باشه: http://en.wikipedia.org/wiki/Comparison_of_file_systems

رضا قربانی
چهارشنبه 30 فروردین 1391, 18:17 عصر
استفاده از Base64 برخی از کلمات فارسی رو با کاراکتر / کد می کنه.
یادتون باشه اگر از Base64 استفاده می کنید حتما کاراکتر / رو با تابع str_replace از بین ببرید . در غیر این صورت به مشکل بر می خورید . ( هر / نشانه ی یک فولدر جداست) که در پست قبل هیچ اشاره ای به آن نشده و بدون اطلاع ایجاد شد.

موفق باشید