سؤال

لا أحد يعرف كيفية الحصول على شريط التقدم للتحميل في php?أنا أحاول كتابة رمز ألبوم صور رافع.أود شريط التقدم إلى حين عرض الصور التي يتم تحميلها.

أنا جديدة إلى حد ما php لذلك أنا لا أعرف كل شيء عن ذلك.

هل كانت مفيدة؟

المحلول

وهذا هو إلى حد بعيد (بعد ساعات من غوغلينغ ومحاولة مخطوطات) أبسط لإنشاء ورافع اجمل لقد وجدت

https://github.com/FineUploader/fine-uploader

والأمر لا يتطلب APC أو أي مكتبات PHP الخارجية، يمكنني الحصول على ملاحظات التقدم ملف على استضافة مشتركة، وأنه يدعي لدعم السحب والإسقاط HTML5 (مجربة شخصيا) وتحميل الملفات المتعددة.

نصائح أخرى

إذا كان لديك APC تثبيت، فقد ربط الاستدعاء للتقدم تحميل.

وLerdorf راسموس (الخالق PHP ل) لديه نموذجا هذا YUI باستخدام (أوه، وهنا هو PHP المصدر).

الوثائق هنا .

وأنا آسف أن أقول أن لعلمي محض PHP تحميل شريط التقدم، أو حتى PHP / جافا سكريبت تحميل شريط التقدم غير ممكن بسبب كيفية عمل PHP. أفضل رهان هو استخدام بعض شكل فلاش رافع.

وAFAIK هذا هو لأنه لم يتم تنفيذ السيناريو الخاص بك حتى يتم ملؤها كل superglobals، والذي يتضمن $ _files. بحلول الوقت الذي يحصل على استدعاء النصي PHP، يتم تحميل الملف بالكامل.

وتحرير: هذا لم يعد صحيحا. كان عليه في عام 2010.

وPHP العش واحد (5.2+) وليس فلاش الطريقة التي عملت بشكل جيد بالنسبة لي:

أولا، راجع هذا الرد على شرح كيفية للحصول على "uploadprogress" تمديد وتشغيلها.

وبعد ذلك، في الصفحة التي تحتوي على النموذج الذي يتم تحميل ملف (ق) من، وخلق إطار iframe التالية:

<iframe id="progress_iframe" src="" style="display:none;" scrolling="no" frameborder="0"></iframe>

وبعد ذلك، إضافة هذا الرمز إلى زر "إرسال":

onclick="function set() { f=document.getElementById('progress_iframe'); f.style.display='block'; f.src='uploadprogress.php?id=<?=$upload_id?>';} setTimeout(set);"

والآن لديك IFRAME مخفي في النموذج الخاص بك من شأنها أن تأتي واضحة وتظهر محتويات uploadprogress.php عند النقر فوق "إرسال" لبدء تحميل الملفات. $ يجب upload_id يكون نفس الذي تستخدمه حيث بلغت قيمة خفية الميدان "UPLOAD_IDENTIFIER" في النموذج الخاص بك.

ووuploadprogress.php نفسه يبدو عن مثل هذا (الإصلاح والتكيف مع الاحتياجات الخاصة بك):

<html>
<head>
<META HTTP-EQUIV='REFRESH' CONTENT='1;URL=?id=<?=$_GET['id']?>'>
</head>
<body>
Upload progress:<br />
<?php
    if(!$_GET['id']) die;
    $info = uploadprogress_get_info($_GET['id']);
    $kbytes_total = round($info['bytes_total'] / 1024);
    $kbytes_uploaded = round($info['bytes_uploaded'] / 1024);
    echo $kbytes_uploaded.'/'.$kbytes_total.' KB';
?>
</body>
</html>

لاحظ أن ينعش النفس في كل ثانية. يمكنك بالتأكيد إضافة بعض لطيفة شريط التقدم البصرية هنا (مثل 2 متداخلة

الصورة بألوان مختلفة) إذا أردت. إطار iframe مع التقدم تحميل يعمل بشكل طبيعي فقط في حين أن تحميل قيد التقدم، وينتهي حياتها مرئية بمجرد إرسال النموذج ومتصفح تعيد تحميل إلى الصفحة التالية.

تنفيذ تحميل شريط التقدم هو سهل و لا يتطلب أي إضافية PHP التمديد, جافا سكريبت أو فلاش.ولكن تحتاج PHP 5.4 و أحدث.

لديك لتمكين جمع من تحميل المعلومات تقدم من خلال وضع التوجيه session.upload_progress.enabled إلى On في php.ini.

ثم أضف مدخلا خفية إلى HTML تحميل النموذج فقط قبل وغيرها من المدخلات.السمة HTML name من أن المدخلات خفية يجب أن يكون نفس قيمة التوجيه session.upload_progress.name من php.ini (في نهاية المطاف يسبقه session.upload_progress.prefix).على value السمة متروك لكم ، سيتم استخدامها كجزء من الدورة الرئيسية.

نموذج HTML يمكن أن يبدو مثل هذا:

<form action="upload.php" method="POST" enctype="multipart/form-data">
   <input type="hidden" name="<?php echo ini_get('session.upload_progress.prefix').ini_get('session.upload_progress.name'); ?>" value="myupload" />
   <input type="file" name="file1" />
   <input type="submit" />
</form>

عند إرسال هذه الاستمارة PHP يجب إنشاء مفتاح جديد في $_SESSION superglobal الهيكل الذي سوف يتم ملؤها مع تحميل مركز المعلومات.مفتاح سلسلة name و value الإدخال مخفي.

في PHP يمكنك أن تأخذ نظرة ملؤها تحميل المعلومات:

var_dump($_SESSION[
    ini_get('session.upload_progress.prefix')
   .ini_get('session.upload_progress.name')
   .'_myupload'
]);

الناتج سوف تبدو كما يلي:

$_SESSION["upload_progress_myupload"] = array(
  "start_time" => 1234567890,   // The request time
  "content_length" => 57343257, // POST content length
  "bytes_processed" => 54321,   // Amount of bytes received and processed
  "done" => false,              // true when the POST handler has finished, successfully or not
  "files" => array(
    0 => array(
      "field_name" => "file1",    // Name of the <input /> field
      // The following 3 elements equals those in $_FILES
      "name" => "filename.ext",
      "tmp_name" => "/tmp/phpxxxxxx",
      "error" => 0,
      "done" => false,            // True when the POST handler has finished handling this file
      "start_time" => 1234567890, // When this file has started to be processed
      "bytes_processed" => 54321, // Number of bytes received and processed for this file
    )
  )
);

هناك كل المعلومات اللازمة لخلق شريط التقدم — لديك معلومات اذا كان التحميل لا يزال في التقدم ، المعلومات كم بايت سيكون نقله في المجموع وكم بايت تم نقلها بالفعل.

لتقديم تحميل التقدم إلى المستخدم ، كتابة آخر PHP النصي من تحميل واحد التي سوف ننظر فقط في تحميل المعلومات في الدورة والعودة في تنسيق JSON ، على سبيل المثال.هذا السيناريو يمكن أن يسمى بشكل دوري ، على سبيل المثال في كل ثانية ، باستخدام AJAX و المعلومات المقدمة للمستخدم.

كنت حتى قادرة على إلغاء تحميل من خلال وضع $_SESSION[$key]['cancel_upload'] إلى true.

للحصول على معلومات مفصلة إضافية إعدادات المستخدم التعليقات ترى PHP دليل.

وأنا فقط وجدت ميجا تحميل ( http://www.raditha.com/php/progress فب ) الذي يستخدم بيرل تفعل تحميل وعرض شريط تقدم.

آخر رافع كاملة JS : http://developers.sirika.com/mfu/

  • مجانا ( رخصة BSD )
  • Internationalizable
  • عبر متصفح متوافق
  • لديك خيار تثبيت APC أو لا ( underterminate شريط التقدم مقابل بعوض شريط التقدم )
  • تخصيص نظرة كما أنه يستخدم دوجو قالب آلية.يمكنك إضافة فئة / معرفات في te قوالب وفقا css

المتعة

قدم

تحميل المعهد الذي يسمح لك لمراقبة تقدم تحميل الملف ولكن لالمتصفحات القديمة هناك plupload إطارا التي جعلت خصيصا لرصد تحميل الملفات و إعطاء معلومات عنهم. بالإضافة إلى أنه يمتلك الكثير من الاسترجاعات حتى تتمكن من العمل في جميع المتصفحات

التروس و HTML5 يكون التقدم الذي حدث في HttpRequest كائن لتقديم تحميل الملف عن طريق AJAX.

http://developer.mozilla.org/en/Using_files_from_web_applications

الخيارات الأخرى الخاصة بك كما سبق الرد عليها من قبل الآخرين:

  1. فلاش على أساس رافع.
  2. جافا القائمة رافع.
  3. الثاني المذنب-نمط طلب إلى ملقم ويب أو برنامج نصي التقرير حجم البيانات الواردة.بعض مزودات الويب مثل Lighttpd توفير وحدات للقيام بذلك في عملية لتوفير النفقات العامة من الدعوة خارجي النصي أو عملية.

من الناحية الفنية هناك المنصوص عليها الخيار ، على غرار يوتيوب تحميل مع التروس أو HTML5 يمكنك استخدام النقط تقسيم ملف إلى قطع صغيرة بشكل فردي تحميل كل قطعة.على الانتهاء من كل جزء يمكنك تحديث حالة التقدم.

وأنت سوف تحتاج إلى استخدام جافا سكريبت لإنشاء شريط التقدم. جوجل للبحث بسيط دفعتني إلى هذا المقال: <لأ href = "http://www.webappers.com/2007/07/31/webappers-simple-ajax-progress-bar-with-css/" يختلط = "نوفولو noreferrer "> WebAppers بسيط جافا سكريبت شريط التقدم مع CSS .

الملف دوجو تحميل شريط التقدم القطعة هو خيار آخر باستخدام إطار دوجو جافا سكريبت.

وتحرير: على افتراض الخاص بك تحميل عدد كبير من الصور (مثل ألبوم صور)، ونشرها على النصي PHP الخاص بك، يمكنك استخدام جافا سكريبت لقراءة النتائج مرة أخرى من منصبه وتحديث شريط التقدم على أساس عدد من الصور التي تم تحميلها / العدد الكلي من الصور. وهذا له أثر جانبي للتحديث فقط بعد اكتمال كل وظيفة. تحقق من هنا بعض المعلومات حول كيفية الرد مع JS.

ويمكن أن يتم شريط تقدم اياكس فب /. (الخروج على مكتبة Html_Ajax في الكمثرى). ولكن هذا يتطلب تركيب وحدة مخصصة في بي.

تتطلب

وأساليب أخرى باستخدام iframe، التي من خلالها فب يبدو أن نرى كم من ملف تم تحميله. ولكن هذا الإطار من مخفية، قد يكون قد تم حظره من قبل بعض إضافات المتصفحات لنوافذ الأطر المدمجة خفية غالبا ما تستخدم لإرسال البيانات الخبيثة لمستخدمي الكمبيوتر.

وأفضل رهان هو استخدام بعض شكل شريط التقدم فلاش إذا لم يكن لديك السيطرة على الخادم الخاص بك.

وفلاش تحميل سوف قيام بهذه المهمة. فإنه سيتم تحميل الملف الذي تريد. ولكن هناك المزيد من المطالب من ذلك بالنسبة لي. ولست بحاجة لتغيير اسم الملف قبل اكتمال التحميل. هذا هو الممكن أيضا مع حل فلاش ولكن فقط إذا كنت تقوم بإضافة متغير ثابت. ولست بحاجة لإضافة معرف المستخدم إلى اسم الملف وأنا لا أرى أي طريقة للقيام بذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top