2012-08-05 14 views
5

Actualmente estoy tratando de agrupar mi javascript para que pueda recibir una puntuación más alta en velocidad de página/yslow. Pero estoy corriendo en las paredes con este enfoque. Actualmente estoy usando este TUTORIAL como guía para agrupar los archivos js. Estoy llamando a los archivos js, pero en la herramienta de Firefox está mostrando que el archivo bundle.js no existe, lo cual es cierto, pero con el htaccess estoy cambiando el archivo de bundle.php a bundle.js. Pero no estoy obteniendo ningún resultado. ¿Puede alguien ayudarme a identificar el problema o hay un mejor enfoque para agrupar archivos js?Encomienda javascript con htaccess y php

AQUÍ es mi EXAMPLE. Cuando se trabaja correctamente con los archivos js, debe mostrar 4 campos de entrada para la carga de archivos.

Esta es la forma en que estoy llamando los archivos 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 para cambiar el tipo de archivo *

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

núcleo/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

¿Puedes probar con core/bundle.php instant de core/bundle.js? Si funciona, entonces .htaccess probablemente tenga problemas. –

+0

Sería bueno mencionar que 'if (strtolower (substr ($ file, -2))! = 'Js') {' es un código vulnerable. Por ejemplo: '.htpasswd% 00js' donde'% 00' es un byte nulo, pasará su condición y el sistema operativo lo interpretará como '.htpasswd'. Ver [esto] (https://www.owasp.org/index.php/File_System#Path_traversal) y [eso] (https://www.owasp.org/index.php/Path_Traversal) para más información. – HoLyVieR

+0

Puede cargar el php como js, ​​en lugar de llamar a bundle.js, simplemente ponga