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&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);
}
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. –
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
Możesz załadować php jako js, zamiast wywoływać bundle.js, po prostu wstaw