2012-08-05 17 views
5

Obecnie próbuję połączyć mój javascript, aby uzyskać wyższy wynik w szybkości strony/yslow. Ale w tym podejściu napotykam na ściany. Obecnie używam tego TUTORIAL jako wskazówki do pakowania plików js. Wywołuję pliki js, ale w narzędziu firefox pokazuje, że plik bundle.js nie istnieje, co prawda, ale z htaccess wybieram plik z bundle.php na bundle.js. Ale nie osiągam żadnych rezultatów. Czy ktoś może mi pomóc w określeniu problemu lub czy istnieje lepsze podejście do pakowania plików js?Łączenie javascript z htaccess i php

TUTAJ to moja EXAMPLE. Podczas prawidłowej pracy z plikami js powinien on zawierać 4 pola wejściowe do przesyłania plików.

ten sposób wzywam pliki js

<script src='core/bundle.js?js=js/jquery-ui-1.8rc2.custom.min.js,js/globalFunctions.js,js/uploaderPreviewer.js,js/itemForm.js&amp;m=4948599067'> 
</script> 

.htacces zmienić typ pliku *

RewriteEngine on 
RewriteRule ^bundle.js$ bundle.php [QSA,L] 

rdzeń/bundle.php

include "JSMin.php"; 
$path = "../../"; 
$files = explode(",", $_GET['js']); 
$missing = array(); 

$cache = ''; 
foreach ($files as $index => $file) { 
    if (strtolower(substr($file, -2)) != 'js') { 
     unset($files[$index]); 
    } else if (file_exists($path.$file)) { 
     $cache .= $file; 
     $cache .= filemtime($path.$file); 
    } else { 
     $missing[] = $file; 
     unset($files[$index]); 
    } 
} 

$cache = 'cache/'.md5($cache); 

if (count($missing)) { 
    header("Content-type: text/javascript"); 
    header("Pragma: no-cache"); 
    header("Cache-Control: no-cache"); 
    echo "alert('Could not load the following javascript source files:\\n\\n- ".implode("\\n- ", $missing)."\\n\\nJavascript not loaded/running!');"; 
    exit; 
} 

if (count($files)) { 
    // create cached version if not present 
    if (!file_exists($cache)) { 
     $js = ''; 
     foreach ($files as $file) { 
      $js .= JSMin::minify(file_get_contents($path.$file)); 
     } 

     file_put_contents($cache, $js); 
    } 

    // calculate last-modified & etag send caching headers 
    $last_modified_time = filemtime($cache); 
    $etag = md5_file($cache); 

    header("Content-type: text/javascript"); 
    header("Pragma: public"); 
    header("Cache-Control: public"); 
    header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); 
    header("Etag: ".$etag); 

    if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time || trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) { 
     header("HTTP/1.1 304 Not Modified"); 
     exit; 
    } 

    readfile($cache); 
} 
+0

Czy możesz spróbować z plikiem core/bundle.php z pliku core/bundle.js? Jeśli to działa, wtedy .htaccess prawdopodobnie ma problemy. –

+0

Warto wspomnieć, że 'if (strtolower (substr ($ file, -2))! = 'Js') {' jest podatnym na ataki kodem. Na przykład: '.htpasswd% 00js' gdzie'% 00' jest bajtem zerowym, przekaże twój warunek i zostanie zinterpretowany jako '.htpasswd' przez system operacyjny. Zobacz [to] (https://www.owasp.org/index.php/File_System#Path_traversal) i [that] (https://www.owasp.org/index.php/Path_Traversal), aby uzyskać więcej informacji. – HoLyVieR

+0

Możesz załadować php jako js, ​​zamiast wywoływać bundle.js, po prostu wstaw

Powiązane problemy