عندما أحاول GZIP .js الملفات باستخدام PHP يمكنني الحصول على بعض نوع من php ذات الصلة خطأ

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

سؤال

حسنا, لقد بحثت عن بضع صفحات والتوصل إلى الحل التالي:

إضافة هذه في .htaccess
#Active GZIP for php-files
php_flag zlib.output_compression On 
php_value zlib.output_compression_level 5

و هذا .js .css:

AddHandler application/x-httpd-php .css .js
php_value auto_prepend_file /Library/WebServer/Documents/blog/code/Helpers/ContentHeader.php

والتي سوف تنفذ .شبيبة وكذلك .css كما مخطوطات php.الصف الثاني يشمل الصفحة التالية:

<?php
    $pathInfo = pathinfo($_SERVER['PHP_SELF']);
    $extension = $pathInfo['extension'];

    if($extension == "css")
    {
        header("Content-type: text/css");
    }
    if($extension == "js")
    {
        header("Content-type: text/javascript");
    }
?>

والتي سوف ترسل رأس "text/css" إلى .ملفات css و "نص/جافا سكريبت" إلى ملفات جافا سكريبت.حتى الآن جيد جدا.المشكلة مع ذلك هو مع اثنين من مصغر جافاسكريبتس التي تستخدم يمكنني الحصول على بعض نوع من خطأ php:

<br />
<b>Parse error</b>:  syntax error, unexpected ']' in <b>/Library/WebServer/Documents/blog/public/scripts/prettify/prettify.js</b> on line <b>18</b><br />

أو:

<br />
<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1 in <b>/Library/WebServer/Documents/blog/public/scripts/showdown.js</b> on line <b>29</b><br />
<br />
<b>Parse error</b>:  syntax error, unexpected '?' in <b>/Library/WebServer/Documents/blog/public/scripts/showdown.js</b> on line <b>29</b><br />

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

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

المحلول

سبب هذا الخطأ هو أن مخطوطات تحتوي على <?.على سبيل المثال ، prettify.js هو هذا:

/^[^<?]+/

أنت تمرير هذا في PHP ، بحيث يبدأ PHP محرك جديد و يرى غير متوقع ].

كنت أذهب مع @jonstjohn طريقة ، أو @كليتوس إذا كنت بحاجة الى مزيد من السيطرة.

نصائح أخرى

نستخدم أباتشي Mod_Deflate واستخدام سبيل المثال التكوين هو مبين هناك.يعمل كبيرة دون القرصنة في PHP.

في الحقيقة أنا أخدم JS الملفات من البرنامج النصي PHP.ليس بسبب هذا الموضوع ولكن إذا أنا يمكن التحكم تنتهي رأس التخزين المؤقت.النموذج العام هو:

  • URL شيء مثل /script/blah.1234567890.js;
  • هذا العنوان يتم إنشاؤها من mtime من blah.js الملف ؛
  • هذا العنوان يتم إرسالها إلى js.php النصي عن طريق كتابة القاعدة .هتكس;
  • السيناريو يتحقق mtime مرت في.إذا كان أحدث من mtime من النسخة المخبأة يولد جديد النسخة المخبأة من كل ما عندي من ملفات JS (التي يتم تجميعها في ملف واحد ثم مصغر مع JSMin);
  • إذا كان mtime ليست أحدث من البرنامج النصي النسخة المخبأة هو ببساطة ؛
  • في جميع الحالات محتوى المقرر أن تنتهي بعد عام من الآن.

الزمني في URL يسمح منعش ملف البرنامج النصي.

الآن كيف يرتبط هذا إلى gzipping والمساعد?بسيطة.في الجزء العلوي من بلدي js.php السيناريو:

ob_start("ob_gzhandler")

الذي يتحول على ضغط gzip إذا كان العميل يدعم ذلك (فضلا عن استخدام التخزين المؤقت الإخراج).

أنه يعمل حقا.

حاول أن تحد نفسك على واحد بالضبط JS و CSS واحد الملف.الجمع بينهما إذا لزم الأمر.أنا أفعل نفس الحيلة مع ملفات CSS أيضا (أي تصغير الحجم طبعا).

ميزة هذا الحل هو فقط يعتمد على mod_rewrite يتم تمكين.أي امتداد آخر هو ضروري (ob_gzhandler هو جزء أساسي من PHP).بالإضافة إلى برنامج نصي من الضروري الجمع بين الملفات (إلا إذا كنت تفعل ذلك كجزء من عملية الإنشاء ولكن أجد هذا أكثر قليلا مملة).

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