التحكم في ترتيب الملفات في أرشيف الرمز البريدي

StackOverflow https://stackoverflow.com/questions/1998113

  •  22-09-2019
  •  | 
  •  

سؤال

وصف

أنا مهتم بالتعلم إذا كان هناك أي طريقة للتحكم في ترتيب فرز الملفات داخل ملفات zip باستخدام إجراءات قياسية في PHP و/أو Java.

أنا لست مهتمًا في المقام الأول باستخدام zip/unsip باستخدام shell_exec() أو ما شابه ، ولكن قد يكون من المهم إذا وفر حلًا سهلاً للقراءة.

مع ترتيب الفرز ، من الآمن افتراض أنه يعني التاريخ/الوقت إذا لم يكن هناك ترتيب فرز متاح داخل ملف ZIP. لم أقرأ المواصفات حتى لا أعرف.

مثال

الملفات

foo.txt
bar.txt
test.txt
newfile.txt

لنفترض أن كل ملف يحتوي على اسم الملف (foo.txt => foo.txt)

مشكلة

أرغب في إرفاق ترتيب الفرز بالملفات بحيث يتم إلغاء التعبئة باستخدام unzip تنتهي الملفات بالترتيب الصحيح. هذا مهم لماذا؟ لأنني أستخدم unzip -p لتنشيط محتوى ملف zip.

يجب ألا يهم الترتيب الذي تتم إضافة الملفات إلى الأرشيف.

نتيجة

النتيجة المقصودة (من أجل هذا المثال (باستخدام unsip -P))

test.txt
foo.txt
newfile.txt
bar.txt

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

المحلول

يمكنك استخدام الأمر zipinfo (أو unzip -Z) لإظهار الملفات في الأرشيف. man zipinfo تحتوي أيضًا على أمثلة حول كيفية فرز الإخراج ، ولكن يمكن أيضًا فرزها في PHP إذا قرأت في الملفات في صفيف وفرز الصفيف.

نصائح أخرى

لم يكن حقا بهذه الصعوبة. يبدو أنني يرتبط فهرس الملفات بالترتيب الذي تتم فيه إضافة الملفات إلى الأرشيف وهذا يتحكم في إخراج unzip -p لأنه يبدو أن تكرار الملفات بطريقة 0..n.

فيما يلي كيفية إنشاء ملف يرضي الشروط. (حسنًا تقريبًا منذ أن نسيت الخطوط الجديدة في ملفات TXT الخاصة بي)

$files = array(
    'test.txt',
    'foo.txt',
    'newfile.txt',
    'bar.txt'
);

$outfile = 'testout.zip';
if (file_exists($outfile)) {
    unlink($outfile);
}
$o = new ZipArchive();
$o->open($outfile,ZipArchive::CREATE);
foreach($files as $key => $file) {
    $o->addFile($file);
}

$o->close();

يعتمد ترتيب الفرز للملفات غير المصغرة (أو أي ملفات على نظام الملفات) على "العميل" الذي تستخدمه لعرض الملفات. سيعرض الأمر LS على نظام *NIX الملفات المطلوبة حسب الاسم على أنها الافتراضي. إذا كنت تستخدم نموذجًا لتطبيق مدير الملفات (أو UnziPper) ، فستتمكن من اختيار الفرز. الفرز المحدد مسبقًا على الأرشيف لا معنى لي.

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