سؤال

أحتاج إلى ضغط بعض ملفات HTML/XML/JSON الكبيرة مسبقًا (مقالب بيانات كبيرة) باستخدام GZIP أو DEFLATE. لا أريد أبدًا خدمة الملفات غير مضغوطة. إنها كبيرة ومتكررة لدرجة أن الضغط على الأرجح سيعمل بشكل جيد للغاية ، وعلى الرغم من أن بعض المتصفحات القديمة لا تستطيع دعم الضغط ، فإن عملائي المعتادون لن يستخدموها (على الرغم من أنه سيكون من الجيد أن أتمكن ترقية رسالة المتصفح الخاصة بك)

أقوم بإنشاء الملفات تلقائيًا ويمكنني بسهولة إنشاء ملفات .htaccess لتتماشى مع كل نوع ملف. في الأساس ما أريده هو دائمًا على نسخة من mod_gunzip. نظرًا لأن الملفات كبيرة ، ولأنني سأخدمها مرارًا وتكرارًا ، أحتاج إلى طريقة تسمح لي بالضغط مرة واحدة ، جيدًا ، على سطر الأوامر.

لقد وجدت بعض المعلومات على هذا الموقع والآخرين حول كيفية القيام بذلك باستخدام GZIP ، لكنني تساءلت عما إذا كان بإمكان شخص ما أن يتجول لي في كيفية القيام بذلك مع Deflate. نقاط المكافأة لإجابة كاملة تتضمن ما يجب أن يبدو عليه ملف .htaccess الخاص بي ، وكذلك رمز سطر الأوامر الذي يجب أن أستخدمه (GNU/Linux) للحصول على ضغط مثالي. نقاط المكافأة الفائقة للإجابة التي تتناول أيضًا كيفية إرسال رسالة "آسف لا ملف لك" إلى متصفحات غير متوافقة.

سيكون جميلًا إذا تمكنا من إنشاء علامة "الضغط المسبق" لتغطية أسئلة مثل هذا.

قدم

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

المحلول

يحرر: وجد الإضافة في mod_mime

هذا يعمل:

<IfModule mod_mime.c>
 <Files "*.html.gz">
  ForceType text/html
 </Files>
 <Files "*.xml.gz">
  ForceType application/xml
 </Files>
 <Files "*.js.gz">
  ForceType application/javascript
 </Files>
 <Files "*.gz">
  AddEncoding gzip .gz
 </Files>
</IfModule>

المستندات تجعلها تبدو مثل فقط AddEncoding يجب أن تكون هناك حاجة ، لكنني لم أحصل على ذلك.

أيضا ، Lighttpd's mod_compression يمكن ضغط وذاكرة التخزين المؤقت (المضغوطة).

نصائح أخرى

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

على Solaris ZFS لديه ضغط شفاف ، استخدم ضغط ZFS لضغط نظام الملفات فقط. وبالمثل ، يمكن لنظام التشغيل Windows ضغط المجلدات ، فسيخدم Apache المحتوى غافلاً عن حقيقة أنه مضغوط على القرص. يحتوي Linux على أنظمة ملفات تقوم بضغط شفاف أيضًا.

بالنسبة لخط الأوامر ، قم بتجميع Zpip zpipe: http://www.zlib.net/zpipe.c وثم

zpipe < BIGfile.html > BIGfile.htmlz

فمثلا.

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

للحصول على طريقة أخرى لضغط الملفات ، ألق نظرة على استخدامها خنزير مع خيارات ضغط Zlib (-Z) أو PKWARE ZIP (-K). اختبر ما إذا كانت هذه العمل قادمًا بمجموعة ترميز المحتوى.

طريقة سريعة لضغط المحتوى دون التعامل مباشرة مع MOZ_GZIP/MOD_DEFALTE OB_GZHandler وتعديل الرؤوس (قبل إرسال أي إخراج إلى المتصفح).

<?php
/* Replace CHANGE_ME with the correct mime type of your large file. 
 i.e: application/json
*/

ob_start ('ob_gzhandler');
header('Content-type: CHANGE_ME; charset: UTF-8');
header('Cache-Control: must-revalidate');
$offset = 60 * 60 * 2 ;
$ExpStr = 'Expires: ' . gmdate('D, d M Y H:i:s',time() + $offset) . ' GMT';
header($ExpStr);

/* Stuff to generate your large files here */
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top