PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : کمک برای آپلود در php



webhosts
December 6th, 2016, 23:31
سلام
روشی سراغ دارید که بتونیم با استفاده از یک اسکریپت Php که روی یک سرور نصب هست ، فایل ها را در سروری دیگر آپلود کنیم؟ بر روی هر دو سرور SSL نصب هست.
یعنی کاربر پس از اینکه وارد اکانتش شد و فایلش را انتخاب کرد ، آن فایل بر روی سرور دیگری آپلود شود.
با تشکر

taksis
December 6th, 2016, 23:37
باید از FTP استفاده کنید
http://php.net/manual/en/ref.ftp.php

JeyServer
December 6th, 2016, 23:38
سلام
http://ir1.php.net/ftp
http://ir1.php.net/manual/en/function.ssh2-scp-send.php

webhosts
December 6th, 2016, 23:50
شما این روش ها را اجرا کردید؟
مطمئن هستید که به درستی کار می کنند؟ و فایل های حجیم را هم آپلود می کنند؟


ما حتی روش زیر را هم اجرا کردیم ولی باز به مشکل برخوردیم:
وقتی کاربر دکمه browse رو می زنه، همونجا ما میاییم محتوای فایل رو بدون رفرش شدن صفحه می خونیم،
اونم به صورت base64 که عملا یه متن هست و نه باینری،
بعد میاییم این متن رو به صورت پست ارسال می کنیم و سمت سرور اون رو دوباره به همون فایل مبدا تبدیل می کنیم. یعنی به جای این که فایل رو باینری بفرستیم، تبدیل به متن می کنیم و می فرستیم. حالا این حالت یه مقدار تداخل داره با حالتی که کار شده بوده که بر مبنای ارسال خود فایل بوده.
وقتی حجم فایل یه مقدار زیاد باشه مشکلی رخ می ده در برنامه که داریم درستش می کنیم.

Rezash
December 6th, 2016, 23:52
سلام
روشی سراغ دارید که بتونیم با استفاده از یک اسکریپت Php که روی یک سرور نصب هست ، فایل ها را در سروری دیگر آپلود کنیم؟ بر روی هر دو سرور SSL نصب هست.
یعنی کاربر پس از اینکه وارد اکانتش شد و فایلش را انتخاب کرد ، آن فایل بر روی سرور دیگری آپلود شود.
با تشکر

اگر یک فایل منیجر آماده php با قابلیت کار با ftp میخواید میتونم extplorer رو معرفی کنم.
https://extplorer.net

JeyServer
December 6th, 2016, 23:54
شما این روش ها را اجرا کردید؟
مطمئن هستید که به درستی کار می کنند؟ و فایل های حجیم را هم آپلود می کنند؟


تا یک گیگابایت من تست کردم، مشکلی نداشته، بیشترش هم مشکلی نخواهد داشت!


وقتی کاربر دکمه browse رو می زنه، همونجا ما میاییم محتوای فایل رو بدون رفرش شدن صفحه می خونیم،
اونم به صورت base64 که عملا یه متن هست و نه باینری،
بعد میاییم این متن رو به صورت پست ارسال می کنیم و سمت سرور اون رو دوباره به همون فایل مبدا تبدیل می کنیم. یعنی به جای این که فایل رو باینری بفرستیم، تبدیل به متن می کنیم و می فرستیم. حالا این حالت یه مقدار تداخل داره با حالتی که کار شده بوده که بر مبنای ارسال خود فایل بوده.
وقتی حجم فایل یه مقدار زیاد باشه مشکلی رخ می ده در برنامه که داریم درستش می کنیم.

دلیل اینکارتون چیه؟لقمه رو چند بار دور سرتون چرخوندید!

Rezash
December 7th, 2016, 00:44
شما این روش ها را اجرا کردید؟
مطمئن هستید که به درستی کار می کنند؟ و فایل های حجیم را هم آپلود می کنند؟


ما حتی روش زیر را هم اجرا کردیم ولی باز به مشکل برخوردیم:
وقتی کاربر دکمه browse رو می زنه، همونجا ما میاییم محتوای فایل رو بدون رفرش شدن صفحه می خونیم،
اونم به صورت base64 که عملا یه متن هست و نه باینری،
بعد میاییم این متن رو به صورت پست ارسال می کنیم و سمت سرور اون رو دوباره به همون فایل مبدا تبدیل می کنیم. یعنی به جای این که فایل رو باینری بفرستیم، تبدیل به متن می کنیم و می فرستیم. حالا این حالت یه مقدار تداخل داره با حالتی که کار شده بوده که بر مبنای ارسال خود فایل بوده.
وقتی حجم فایل یه مقدار زیاد باشه مشکلی رخ می ده در برنامه که داریم درستش می کنیم.
مشکلی بابت انتقال فایل های حجیم تا حالا نداشتیم و تا چند گیگ براحتی اپلود شده
روش base64 بخصوص برای فایل های حجیم منطقی نیست و احتمالا باعث هنگ کردن مرورگر کاربر میشه. با روش معمولی اپلود کنید فقط معیاز های کلی مانند max post size و max upload و time limit رو در دو سرور چک کنید کم نباشند

Sent from my LG-D724 using Tapatalk

webhosts
December 7th, 2016, 10:58
اگر یک فایل منیجر آماده php با قابلیت کار با ftp میخواید میتونم extplorer رو معرفی کنم.
https://extplorer.net

مشکل فایل منجر نداریم.
مشکل آپلود فایل در سرورهای دیگر با https داریم...

- - - Updated - - -


تا یک گیگابایت من تست کردم، مشکلی نداشته، بیشترش هم مشکلی نخواهد داشت!
دلیل اینکارتون چیه؟لقمه رو چند بار دور سرتون چرخوندید!

با کدام روش تا یک گیگابایت آپلود کردید؟

Rezash
December 7th, 2016, 11:43
مشکل فایل منجر نداریم.
مشکل آپلود فایل در سرورهای دیگر با https داریم...

- - - Updated - - -




با کدام روش تا یک گیگابایت آپلود کردید؟

دوست عزیز با همون ftp ساده میتوتید فایل های حجیم رو آپلود کنید.
فقط دقت کنید پارامترهای زیر مقادیر مورد نیاز در هر دو سرور باشند :


php_value upload_max_filesize 50M
php_value post_max_size 50M
php_value max_execution_time 200
php_value max_input_time 200

و از توابع ftp_put و ... که متداول هست میتونید استفاده کنید.
فقط اگر فایل هاتون حجیم هست احتمالا memory usage بالایی داشته باشه اسکریپت. بهتر هست از روش های ترکیبی و Chunking استفاده کنید.

webhosts
December 7th, 2016, 13:59
از ftp نمیتونیم استفاده کنیم. استفاده از ftp محدودیت زیاد داره. قابل کنترل نیست. نمی شه بایت هایی که ارسال می شه رو چک کرد که مثلا یه فایل ده مگی آیا کامل رفته یا نه

JeyServer
December 7th, 2016, 14:59
با کدام روش تا یک گیگابایت آپلود کردید؟

هر دو



از ftp نمیتونیم استفاده کنیم. استفاده از ftp محدودیت زیاد داره. قابل کنترل نیست. نمی شه بایت هایی که ارسال می شه رو چک کرد که مثلا یه فایل ده مگی آیا کامل رفته یا نه



http://ir1.php.net/ftp_size

Rezash
December 7th, 2016, 15:14
از ftp نمیتونیم استفاده کنیم. استفاده از ftp محدودیت زیاد داره. قابل کنترل نیست. نمی شه بایت هایی که ارسال می شه رو چک کرد که مثلا یه فایل ده مگی آیا کامل رفته یا نه
دو روش به ذهنم میرسه
1. اپلود با curl که مشابه ftp میشه
2. دانلود از سرور دوم. فایل ها در سرور اول دارای لینک محدود به سرور دوم باشند و به جای اپلود از سرور 1 به 2 مستقیم توسط 2 از 1 دانلود شوند. در این روش برای نوشتن کلاینت دانلود روی سرور 2 بهتر هست از زبان های برنامه نویسی قوی تر برای کار با فایل ها استفاده کنید

Sent from my LG-D724 using Tapatalk

webhostfa
December 7th, 2016, 15:24
یک روشی هست عمومی نمیشه توضیح داد.
بیا پ.خ تا بگم

webhosts
December 7th, 2016, 16:48
یک روشی هست عمومی نمیشه توضیح داد.
بیا پ.خ تا بگم

ممنون میشم اگر روشتون را از پیام خصوصی ارسال کنید.

lizard.tiny
December 7th, 2016, 16:48
سلام

بهترین راه این هست که شما 2 فایل PHP داشته باشید یکی در سرور اول و یکی در سرور دوم

فایل سرور اول بصورت FTP فایل رو در سرور دوم آپلود کنه و بعد از آپلود از طریق CURL فایل PHP سرور دوم رو اجرا کنه و فایل موجود در سرور اول و دوم رو از نظر حجم و نام برسی کنه, اگه مشابه بود که کاری انجام نده یا نهایتاً یه log ثبت کنه

اگه مشابه نبود فایل در سرور دوم unlink بشه و درخواست آپلود مجدد داده بشه

راه های زیادی برای این کار وجود داره

میشه کل عمیات رو بصورت دانلود انجام داد, یعنی بجای اینکه فایل رو روی سرور دوم آپلود کنید, اونو از سرور اول دانلود کنید

webhosts
December 7th, 2016, 16:53
سلام
بهترین راه این هست که شما 2 فایل PHP داشته باشید یکی در سرور اول و یکی در سرور دوم
فایل سرور اول بصورت FTP فایل رو در سرور دوم آپلود کنه و بعد از آپلود از طریق CURL فایل PHP سرور دوم رو اجرا کنه و فایل موجود در سرور اول و دوم رو از نظر حجم و نام برسی کنه, اگه مشابه بود که کاری انجام نده یا نهایتاً یه log ثبت کنه
اگه مشابه نبود فایل در سرور دوم unlink بشه و درخواست آپلود مجدد داده بشه
راه های زیادی برای این کار وجود داره
میشه کل عمیات رو بصورت دانلود انجام داد, یعنی بجای اینکه فایل رو روی سرور دوم آپلود کنید, اونو از سرور اول دانلود کنید

چندتا هدف داریم:
1- کاربرها بتونن فایل هایی با حجم بالای 2 گیگ را آپلود کنند.
2- فایل ها کامل و بدون مشکل آپلود شوند.
3- مشکل امنیتی وجود نداشته باشد.
4- سرور اول که اسکریپت روی اون نصب است ، هیچ فایلی روی آن آپلود نشود. فایل ها مستقیم روی سرور دوم آپلود شوند.

lizard.tiny
December 7th, 2016, 17:01
چندتا هدف داریم:
1- کاربرها بتونن فایل هایی با حجم بالای 2 گیگ را آپلود کنند.
2- فایل ها کامل و بدون مشکل آپلود شوند.
3- مشکل امنیتی وجود نداشته باشد.
4- سرور اول که اسکریپت روی اون نصب است ، هیچ فایلی روی آن آپلود نشود. فایل ها مستقیم روی سرور دوم آپلود شوند.


با این وجود بهترین راه استفاده از تابع ftp_put هست, بهتره برای اینکار یک وب سرویس rest بنویسید که بعد از آپلود صحت فایل آپلود شده رو به اسکریپت برگردونه تا اطمینان داشته باشید که فایل به درستی و کامل آپلود شده باشه

در خصوص امنیت هم میتونید موقع آپلود فایل در هاست اصلی که اسکریپت آپلودر روش هست موارد امنیتی رو برسی کنید, مواردی مثل نام فایل, پسوند

همچنین برای بالاتر رفتن امنیت میتونید یک دیتابیس ایجاد کنید که اطلاعات فایل های آپلودی رو ذخیره کنه و موقع آپلود نام و پسوند فایل رو تغییر بده, مثلاً اگه کاربری فایل milad.mp3 رو آپلود کرد این فایل تبدیل بشه به یک فایل بدون پسوند به نام 541f98322eaea41f2b2e3d023972f098 و این نام + نام و پسوند اصلی اون در دیتابیس ذخیره بشه, وقتی کاربر لینک دانلود رو داد سیستم فایل 541f98322eaea41f2b2e3d023972f098 رو مجدداً تغییر نام میده به milad.mp3 و دانلود میشه

همچنین در سرور دانلود میتونید از طریق تنظیمات سروری یا فایل htaccess خروجی فایل های مشخص کنید, یعنی تایین کنید فایل هایی مثل php, html و ... حتی اگه آپلود هم شدن امکان دانلود و اجرا نداشته باشن

البته در این حالت برای اینکه فشاری به سرور نیاد پیشنهاد میشه از ماژول های سمت سرور مثل XSendFile و ... استفاده کنید

در کل در PHP راه کارهای خیلی زیادی برای اجرای یک عملیات وجود داره که نحوه پیاده سازی اونها به تجربه و سلیقه برنامه نویس بستگی داره

webhosts
December 7th, 2016, 20:07
با این وجود بهترین راه استفاده از تابع ftp_put هست, بهتره برای اینکار یک وب سرویس rest بنویسید که بعد از آپلود صحت فایل آپلود شده رو به اسکریپت برگردونه تا اطمینان داشته باشید که فایل به درستی و کامل آپلود شده باشه
در خصوص امنیت هم میتونید موقع آپلود فایل در هاست اصلی که اسکریپت آپلودر روش هست موارد امنیتی رو برسی کنید, مواردی مثل نام فایل, پسوند
همچنین برای بالاتر رفتن امنیت میتونید یک دیتابیس ایجاد کنید که اطلاعات فایل های آپلودی رو ذخیره کنه و موقع آپلود نام و پسوند فایل رو تغییر بده, مثلاً اگه کاربری فایل milad.mp3 رو آپلود کرد این فایل تبدیل بشه به یک فایل بدون پسوند به نام 541f98322eaea41f2b2e3d023972f098 و این نام + نام و پسوند اصلی اون در دیتابیس ذخیره بشه, وقتی کاربر لینک دانلود رو داد سیستم فایل 541f98322eaea41f2b2e3d023972f098 رو مجدداً تغییر نام میده به milad.mp3 و دانلود میشه
همچنین در سرور دانلود میتونید از طریق تنظیمات سروری یا فایل htaccess خروجی فایل های مشخص کنید, یعنی تایین کنید فایل هایی مثل php, html و ... حتی اگه آپلود هم شدن امکان دانلود و اجرا نداشته باشن
البته در این حالت برای اینکه فشاری به سرور نیاد پیشنهاد میشه از ماژول های سمت سرور مثل XSendFile و ... استفاده کنید
در کل در PHP راه کارهای خیلی زیادی برای اجرای یک عملیات وجود داره که نحوه پیاده سازی اونها به تجربه و سلیقه برنامه نویس بستگی داره

احتمال زیاد با برنامه های فایل منیجر کار کردید. می دونید که حتی وقتی یه فایل رو از طریق برنامه فایل منیجر آپلود می کنید، ممکنه فایل درست انتقال پیدا نکنه. حتی با فرض استفاده از این روش، باید کل فایل ابتدا روی سرور خود اسکریپت بره و بعد منتقل بشه به سرور اصلی از طریق اف تی پی. حالا شما فرض کنید که یه فایل حجم بالا این اتفاق براش بیافته. اگر از rest استفاده کنیم ، در آن واحد ممکنه ده ها فایل با هم آپلود بشه، اصلا نمیشه با اف تی پی هندل کرد. امنیت هم که اصلا مبحث فرق می کنه! تغییر پسوند فایل که ابتدایی ترین هست و اگر انجام نشه که کلا انگار سرور ما حیات خلوت هکرهای تازه کار هست.

lizard.tiny
December 7th, 2016, 20:24
احتمال زیاد با برنامه های فایل منیجر کار کردید. می دونید که حتی وقتی یه فایل رو از طریق برنامه فایل منیجر آپلود می کنید، ممکنه فایل درست انتقال پیدا نکنه. حتی با فرض استفاده از این روش، باید کل فایل ابتدا روی سرور خود اسکریپت بره و بعد منتقل بشه به سرور اصلی از طریق اف تی پی. حالا شما فرض کنید که یه فایل حجم بالا این اتفاق براش بیافته. اگر از rest استفاده کنیم ، در آن واحد ممکنه ده ها فایل با هم آپلود بشه، اصلا نمیشه با اف تی پی هندل کرد. امنیت هم که اصلا مبحث فرق می کنه! تغییر پسوند فایل که ابتدایی ترین هست و اگر انجام نشه که کلا انگار سرور ما حیات خلوت هکرهای تازه کار هست.
این مورد به نوع معماری کد نویسی شما داره

نیازی نیست فایل روی سرور اول آپلود بشه, کافیه موقعی که کاربر فایل رو Select میکنه واسه آپلود اطلاعات فایل رو در دیتابیس ذخیره کنید و بعد از آپلود برسی کنید

راه دیگه اینکه همه کدهای مربوط به آپلود رو روی سرور دوم بنویسید و سرور اول فقط یک فرم HTML ساده باشه که فایل رو Select کنه و سمت سرور دوم POST کنه