2012-08-05 9 views
5

Attualmente sto cercando di raggruppare il mio javascript in modo da poter ricevere un punteggio più alto in velocità della pagina/yslow. Ma sto correndo nei muri con questo approccio. Attualmente sto usando questo TUTORIAL come guida per raggruppare i file js. Sto chiamando i file js ma nello strumento firefox sta mostrando che il file bundle.js non esiste che è vero ma con il htaccess sto modificando il file da bundle.php a bundle.js. Ma non sto ottenendo alcun risultato. Qualcuno può aiutarmi a individuare il problema o esiste un approccio migliore per raggruppare i file js?Combinazione javascript con htaccess e php

QUI è il mio EXAMPLE. Quando funziona correttamente con i file js dovrebbe mostrare 4 campi di input per i caricamenti dei file.

Questo è come io chiamo i file 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 di cambiare tipo di file *

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

core/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

Puoi provare con core/bundle.php instant di core/bundle.js? Se funziona, allora .htaccess ha probabilmente dei problemi. –

+0

Sarebbe bene dire che 'if (strtolower (substr ($ file, -2))! = 'Js') {' è un codice vulnerabile. Ad esempio: '.htpasswd% 00js' dove'% 00' è un byte null, passerà la tua condizione e verrà interpretato come '.htpasswd' dal sistema operativo. Vedi [questo] (https://www.owasp.org/index.php/File_System#Path_traversal) e [che] (https://www.owasp.org/index.php/Path_Traversal) per ulteriori informazioni. – HoLyVieR

+0

Puoi caricare il php come js, invece di chiamare bundle.js, semplicemente metti