
مقدمة
لم أفكر في هذا من قبل واستخدمت حلاً جاهزًا مثل Drupal لتحميل الملفات ، ولم أكن بحاجة إلى المزيد. حتى قبل بضعة أشهر كان لدي حاجة ملحة ليس فقط لإعطاء الملفات.
هناك الكثير من المعلومات على الإنترنت حول كيفية تنزيل الملفات من الخادم وتحميل الملفات إلى الخادم ، وكذلك بين الخوادم. ولكن لا يوجد حل بسيط سيكون عالميًا إلى حد ما.
لقد قتلت عدة أيام لأتعلم كل أنواع الرؤوس وأشكال استخدام cUrl ، لكن وضع كل شيء معًا لم ينجح. لقد رأيت العديد من الطبقات المتشابهة المختلفة ، ولكن في كل مكان كان هناك حل جزئي أو مربك للغاية أو كليهما.
وفقط بفضل المقالات الفردية ، والمعلومات من المنتديات وجميع أنواع التعليقات ، تمكنا من تجميع اللغز معًا. لا أدعي أن الحل الخاص بي عالمي تمامًا ، ولكنه مناسب جدًا في كثير من الحالات ، رغم أن الأمر متروك لك.
إذا كانت لدى أي شخص رغبة في تحسين حلي لهذه المشكلة ويفتقر إلى المعرفة في هذا الاتجاه ، فعندها سأكون سعيدًا إذا قمت بإجراء أي تصحيحات أو إضافات على الكود المتاح للجمهور على GitHub .
والآن إلى هذه النقطة ، وظائف فئة CargaDes:
- تحميل الملف عبر المتصفح دون إظهار موقع التخزين الخاص به ومع إمكانية الاستئناف ؛
- تحميل ملف إلى الخادم من خلال متصفح مع مؤشر التقدم ؛
- تنزيل الملفات من خادم بعيد إلى الخادم الخاص بك مع مؤشر التقدم ؛
- تحميل الملفات من الخادم الخاص بك إلى خادم بعيد مع مؤشر التقدم.
تحتاج أولاً إلى تنزيل فئة CargaDes وتوصيلها:
1. قم بتحميل الملف عبر المتصفح دون إظهار موقع التخزين الخاص به مع إمكانية الاستئناف والتحكم في السرعة
$realFilePath = dirname( __FILE__ ) . '/file.zip';
هذه الطريقة تشبه إلى حد بعيد دروبال وأمثاله:
$CargaDes = new CargaDes; $client_d = new ClientD($realFilePath);
أضفت المزيد من الرشاوى مع Apache ، ولكن يجب تمكين توجيه XSendFile On
$client_d->apache = false;
فور تنفيذ هذه الطريقة ، سيعرض المتصفح نافذة لحفظ الملف
2. تحميل الملف / الملفات إلى الخادم عبر المتصفح مع مؤشر التقدم
$url_server = "http://_.com/upload.php";
بعد تنفيذ الطريقة ، سيظهر زر لتحديد الملفات وزر لتنزيل الملفات. سيظهر مؤشر لكل ملف محدد على حدة.

3. تنزيل الملفات من خادم بعيد إلى الخادم الخاص بك
$CargaDes = new CargaDes; $server = new Server();
4. نعطي الملف إلى الخادم البعيد من خادمنا
$CargaDes = new CargaDes; $server = new Server();
نتيجة لذلك ، أريد أن أقول
إذا ساعد هذا الفصل شخصًا واحدًا على الأقل ، سأكون سعيدًا جدًا بهذا الأمر. كما قلت في البداية ، سأكون سعيدًا بالنقد البناء والإضافات التي يمكن أن تؤدي إلى تحسين الفصل. رابط إلى CargaDes.class .
تم تغيير طرق استخدام الفصل في المقالة. وأضاف وصفًا لما حدث في الفصل.
انتهى هذا العمل من الأخطاء ، إذا جاز لي أن أسميها.
ما تم القيام به:
- أحضر الرمز إلى نمط واحد باستخدام PHPSTORM وحاول الامتثال ل PSR ؛
- إزالة الشُرَط السفلية من أسماء الوظائف ؛
- مستبعد تماما مسج.
- إزالة جميع الأساليب الساكنة ؛
- صنع فئة كحزمة ملحن.
- صنعت قطعة القدم في طريقة منفصلة ؛
- حاولت الالتزام بـ SRP ؛
- قدمت استثناءات وتغيير طفيف في الناتج خطأ.
- تصحيح الجسم من الصانعين.
- حاول تحسين البناء ،
- أخرج js و html خارج الفصل ؛
- إزالة علامة الإغلاق؟> ؛
- وأضاف القدرة على ترجمة الرسائل.
- إضافة مجلد مع أمثلة قابلة للتنفيذ.
ما لم يتم:
- ترجمة التعليقات إلى الإنجليزية (إذا لم يكن كل هذا ضروريًا لأي شخص ، فلماذا نضيع الوقت) ؛
- لم أغير أسماء الوظائف إلى وظائف أكثر قابلية للفهم (ليس من الواضح بالنسبة لي ، إذا كانت الإنجليزية ، أنظر إلى النقطة N1) ؛
- شاهدت اختبارات تلقائية ، لكنها جيدة جدًا. من الصعب القيام به عالميا منذ ذلك الحين لكل منها سيناريوهات الإجراءات الخاصة به ، على الرغم من أنني قد أكون مخطئًا ، ثم إذا كنت ترى أنه ضروري في فصل لا يحتاجه أحد ، فلديك فرصة لمساعدتي في هذا ؛
- هناك شيء آخر ممكن ، لكنني لا أعرف بالفعل ما لديك من فرصة لإخبارنا بذلك.
بشكل عام ، حاولت إصلاحه ، وما قيل في التعليقات ، إذا تم العثور على أي عيوب أو أخطاء أخرى - الكتابة ، سأحاول إصلاحه.
شكرًا لك على النقد البناء لموقع webdevium و alutskevich ، إذا كان بإمكاني ، فإنني سأضيف لك بالتأكيد.
أنا أيضا أشكر الجميع لأن كان لدي فهم لخطأي الرئيسي ولدت عدة أفكار.