hgfhjgjh
دوشنبه 06 خرداد 1398, 11:12 صبح
با عرض سلام و خسته نباشید خدمت شما دوستان عزیز ...
من در کدنویسی سایت بدلیل اینکه سرعت سایت بالاتر باشه یک هاست خیلی قدرتمند با سرعت و کیفیت بالا برای خود سایت دارم و یک هاست عادی با فضای زیاد برای ذخیره فایل ها؛ اینجوری هم هزینه کمتر میشه و هم اینکه سرعت سایت بالاتر هست چون هاست کم حجم اما با کیفیت بالا برای خود سایت گرفتم. (اینجا برای اینکه مشخص باشه اون هاست حجم بالا که میخوام فایل ها در اون آپلود بشه را با نام "هاست فایل" نوشتم)
در زمان آپلود در سمت سرور ابتدا فرمت فایل رو با یک لیست فرمت های مجاز چک میکنم، اگر اوکی نبود از آپلود اون فایل صرفنظر میشه و بعد از اون حجم فایل رو هم بررسی میکنم که مناسب باشه و کم و زیاد نباشه؛ حالا مشکل من در انتقال فایلهای آپلود شده به "هاست فایل" این هست که در سایت نمیتونم فقط فایل رو بدون تغییرات به هاست فایل انتقال بدم مثلاً بصورت ftp و ... و پس از آپلود (یک فایل باشد یا بصورت گروهی و چندین فایل باشد فرقی ندارد و هر دو به یک شکل زیپ و ذخیره میشوند) تمام فایل ها رو با کلاس ZipArchive زیپ میکنم و ذخیره میکنم و بعدش اسم و مسیر رو توی یک جدول در دیتابیس ذخیره میکنم و شناسه ردیف رو میگیرم و برمیگردونم؛ اما با استفاده از ftp نمیتونم این زیپ کردن رو انجام بدم و حتماً باید از روش دیگه ای مثل curl یا ... برای این کار استفاده بشه
کد زیر را مشاهده بفرمایید، با استفاده از این کد اگر نیازی به انتقال فایل از یک سرور به یک سرور دیگه نباشد براحتی آپلود و زیپ کردن انجام میشه:
if(isset($_FILES['attachment']['tmp_name'])){
$Zip=new ZipArchive();
if($Zip->open($Path.$ZipName,false?ZIPARCHIVE::OVERWRITE:ZI PARCHIVE::CREATE)===true){
for($i=0;$i<count($_FILES['attachment']['tmp_name']);$i++){
$iName=$_FILES['attachment']['name'][$i];
$iSize=$_FILES['attachment']['size'][$i];
$iType=strtolower(pathinfo($iName,PATHINFO_EXTENSI ON));
// بررسی فرمت فایل اگر اوکی بود ادامه میده
// بررسی حجم فایل اگر اوکی بود ادامه میده
if(move_uploaded_file($_FILES['attachment']['tmp_name'][$i],($Path.$RandomFileName))){
$Zip->addfile($Path.$RandomFileName,basename($h));
// حذف فایل پس از انتقال به فایل زیپ
}
// محدودیت حداکثر ارسال 10 فایل آپلود شده موفق
}
}
$Zip->close();
if($ZipItem===0){$attachment=0;}else{
// ذخیره اطلاعات در دیتایس و دریافت شناسه رکورد
$attachment='شناسه رکورد ذخیره شده';
}
}else{$attachment=0;}
بخش های اضافه در کد بالا رو حذف کردم که مرتب تر باشه و راحت تر بتونید کد را بررسی کنید. حالا وقتی بخوام فایلها رو به یک سرور دیگر انتقال بدم دو راه وجود داره:
1- راه اول انتقال فایل زیپ نهایی به سرور جدید : این کار خوب نیست چون کاربر در زمان آپلود یک مرتبه باید منتظر بمونه تا فایل آپلود بشه و بعد همچنان منتظر بمونه تا فایل به یک سرور دیگر آپلود و منتقل شود و زمان زیادی کاربر معطل خواهد شد (مثلاً با متد ftp انتقال انجام شود و ...)
2- فایلها را بصورت خام بدون اعمال هیچ تغییری (یعنی فایلهایی که پست شده) را به یک سرور دیگر انتقال دهم و در آن سرور تغییرات لازم مثل بررسی و تغییر نام و زیپ کردن انجام بشه و مشکل من دقیقاً همینه که چطور میتونم یک فایل PHP در سرور دیگه داشته باشم و این فایلها رو برای اون بفرستم که با استفاده از کد بالا در سرور جدید آپلود و تغییرات و زیپ کردن انجام بشه ؟ متدهای ftp فقط فایل رو منتقل میکنند و امکان ارسال اطلاعات به یک فایل php در یک سرور دیگر در ftp وجود ندارد
لازمه این رو هم بگم که چون فرم های مختلفی برای بخش های مختلف وجود دارند، باید این مقادیر را هم برای سرور دیگر ارسال کنم جهت بررسی های لازم
- عدد : ماکسیمم حجم مجاز هر فایل جهت آپلود : جهت بررسی های لازم
- لیست : لیست فرمت های مجاز آپلود فایل : جهت بررسی های لازم
- مسیر : آدرس فولدر مقصد در سرور دیگر
لطفاً من رو راهنمایی بفرمایید که به چه صورت میتونم این اطلاعات و فایل ها رو برای سرور دیگری ارسال کنم که آپلود و زیپ انجام بشه در اون
اگر با متد Curl هست خواهش میکنم روشش را برام بفرستید چون خیلی گشتم اما کدهایی که پیدا کردم عمل نمیکنند و نادرست هستند
اگر با روش دیگه ای انجام میشه و یا اینکه راه های بهتری برای این انتقال وجود دارد من رو راهنمایی کنید لطفاً
ممنونم از شما
من در کدنویسی سایت بدلیل اینکه سرعت سایت بالاتر باشه یک هاست خیلی قدرتمند با سرعت و کیفیت بالا برای خود سایت دارم و یک هاست عادی با فضای زیاد برای ذخیره فایل ها؛ اینجوری هم هزینه کمتر میشه و هم اینکه سرعت سایت بالاتر هست چون هاست کم حجم اما با کیفیت بالا برای خود سایت گرفتم. (اینجا برای اینکه مشخص باشه اون هاست حجم بالا که میخوام فایل ها در اون آپلود بشه را با نام "هاست فایل" نوشتم)
در زمان آپلود در سمت سرور ابتدا فرمت فایل رو با یک لیست فرمت های مجاز چک میکنم، اگر اوکی نبود از آپلود اون فایل صرفنظر میشه و بعد از اون حجم فایل رو هم بررسی میکنم که مناسب باشه و کم و زیاد نباشه؛ حالا مشکل من در انتقال فایلهای آپلود شده به "هاست فایل" این هست که در سایت نمیتونم فقط فایل رو بدون تغییرات به هاست فایل انتقال بدم مثلاً بصورت ftp و ... و پس از آپلود (یک فایل باشد یا بصورت گروهی و چندین فایل باشد فرقی ندارد و هر دو به یک شکل زیپ و ذخیره میشوند) تمام فایل ها رو با کلاس ZipArchive زیپ میکنم و ذخیره میکنم و بعدش اسم و مسیر رو توی یک جدول در دیتابیس ذخیره میکنم و شناسه ردیف رو میگیرم و برمیگردونم؛ اما با استفاده از ftp نمیتونم این زیپ کردن رو انجام بدم و حتماً باید از روش دیگه ای مثل curl یا ... برای این کار استفاده بشه
کد زیر را مشاهده بفرمایید، با استفاده از این کد اگر نیازی به انتقال فایل از یک سرور به یک سرور دیگه نباشد براحتی آپلود و زیپ کردن انجام میشه:
if(isset($_FILES['attachment']['tmp_name'])){
$Zip=new ZipArchive();
if($Zip->open($Path.$ZipName,false?ZIPARCHIVE::OVERWRITE:ZI PARCHIVE::CREATE)===true){
for($i=0;$i<count($_FILES['attachment']['tmp_name']);$i++){
$iName=$_FILES['attachment']['name'][$i];
$iSize=$_FILES['attachment']['size'][$i];
$iType=strtolower(pathinfo($iName,PATHINFO_EXTENSI ON));
// بررسی فرمت فایل اگر اوکی بود ادامه میده
// بررسی حجم فایل اگر اوکی بود ادامه میده
if(move_uploaded_file($_FILES['attachment']['tmp_name'][$i],($Path.$RandomFileName))){
$Zip->addfile($Path.$RandomFileName,basename($h));
// حذف فایل پس از انتقال به فایل زیپ
}
// محدودیت حداکثر ارسال 10 فایل آپلود شده موفق
}
}
$Zip->close();
if($ZipItem===0){$attachment=0;}else{
// ذخیره اطلاعات در دیتایس و دریافت شناسه رکورد
$attachment='شناسه رکورد ذخیره شده';
}
}else{$attachment=0;}
بخش های اضافه در کد بالا رو حذف کردم که مرتب تر باشه و راحت تر بتونید کد را بررسی کنید. حالا وقتی بخوام فایلها رو به یک سرور دیگر انتقال بدم دو راه وجود داره:
1- راه اول انتقال فایل زیپ نهایی به سرور جدید : این کار خوب نیست چون کاربر در زمان آپلود یک مرتبه باید منتظر بمونه تا فایل آپلود بشه و بعد همچنان منتظر بمونه تا فایل به یک سرور دیگر آپلود و منتقل شود و زمان زیادی کاربر معطل خواهد شد (مثلاً با متد ftp انتقال انجام شود و ...)
2- فایلها را بصورت خام بدون اعمال هیچ تغییری (یعنی فایلهایی که پست شده) را به یک سرور دیگر انتقال دهم و در آن سرور تغییرات لازم مثل بررسی و تغییر نام و زیپ کردن انجام بشه و مشکل من دقیقاً همینه که چطور میتونم یک فایل PHP در سرور دیگه داشته باشم و این فایلها رو برای اون بفرستم که با استفاده از کد بالا در سرور جدید آپلود و تغییرات و زیپ کردن انجام بشه ؟ متدهای ftp فقط فایل رو منتقل میکنند و امکان ارسال اطلاعات به یک فایل php در یک سرور دیگر در ftp وجود ندارد
لازمه این رو هم بگم که چون فرم های مختلفی برای بخش های مختلف وجود دارند، باید این مقادیر را هم برای سرور دیگر ارسال کنم جهت بررسی های لازم
- عدد : ماکسیمم حجم مجاز هر فایل جهت آپلود : جهت بررسی های لازم
- لیست : لیست فرمت های مجاز آپلود فایل : جهت بررسی های لازم
- مسیر : آدرس فولدر مقصد در سرور دیگر
لطفاً من رو راهنمایی بفرمایید که به چه صورت میتونم این اطلاعات و فایل ها رو برای سرور دیگری ارسال کنم که آپلود و زیپ انجام بشه در اون
اگر با متد Curl هست خواهش میکنم روشش را برام بفرستید چون خیلی گشتم اما کدهایی که پیدا کردم عمل نمیکنند و نادرست هستند
اگر با روش دیگه ای انجام میشه و یا اینکه راه های بهتری برای این انتقال وجود دارد من رو راهنمایی کنید لطفاً
ممنونم از شما