Qualche giorno fa per passare il tempo ho creato uno script PHP per cambiare skin, ossia cambiare la grafica del sito al volo senza far ricorso ad un client FTP, lo script è molto semplice da usare e funziona benissimo! Perché non usare la super global $_SERVER['HTTP_REFERER'] come meccanismo? Semplice! Se avete un sito con cifratura SSL ossia in HTTPS avrete notato che questa super global non è quasi mai settata e questo è un effetto collaterale del protocollo HTTPS per cui non bisogna mai fare affidamento su questa risorsa! Ho invece usato dei cookie che produrranno l'effetto voluto! Salvate lo script come skin.php e poi create diversi fogli di stile
che saranno le skin, possibilmente nella stessa cartella. Modificate i nomi dei fogli di stile accordandoli con i vostri gusti e poi in tutte le pagine dove volete cambiare skin mettete:
<link rel="stylesheet" type="text/css" media="all" href="<?php if ((isset($_COOKIE['skin'])) && (file_exists(realpath($_COOKIE['skin'] . ".css")))) { echo htmlentities($_COOKIE['skin'] . ".css", ENT_QUOTES); } else { echo "default.css"; } ?>">
Perché funzioni dovete creare un foglio di stile standard che chiameremo
default.css che rappresenterà la scelta base per chi visiterà
il sito. Infatti se il cookie non è settato, senza quel foglio di stile base, l'utente non vedrà alcuna grafica e questo non deve succedere! Ecco lo script PHP per cambiare skin:
skin.php
<?php
################################################################
# Change Skin 1.0 - 12/07/2018 © Alessandro Marinuzzi [Alecos] #
################################################################
@ini_set('default_charset', 'UTF-8');
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control:
no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<meta name="author" content="Alessandro Marinuzzi [Alecos]">
<meta name="generator" content="Notepad2">
<meta name="pragma" content="no-cache">
<meta
name="robots" content="noindex, nofollow">
<title>Change Skin</title>
<?php
function check_https() {
$isSecure = false;
if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') {
$isSecure = true;
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && strtolower($_SERVER['HTTP_X_FORWARDED_SSL']) == 'on')
{
$isSecure = true;
}
return $isSecure;
}
$check_https = check_https() ? 'https' : 'http';
if (isset($_POST['change'])) {
switch ($_POST['skin']) {
case 'finalfantasy':
if ($check_https == 'http') {
setcookie('skin', 'finalfantasy', time()+31556926, '/', '', FALSE, TRUE);
} else {
setcookie('skin',
'finalfantasy', time()+31556926, '/', '', TRUE, TRUE);
}
$_COOKIE['skin'] = 'finalfantasy';
break;
case 'science':
if ($check_https == 'http') {
setcookie('skin', 'science', time()+31556926, '/', '', FALSE, TRUE);
} else {
setcookie('skin',
'science', time()+31556926, '/', '', TRUE, TRUE);
}
$_COOKIE['skin'] = 'science';
break;
case 'matrix':
if ($check_https == 'http') {
setcookie('skin', 'matrix', time()+31556926, '/', '', FALSE, TRUE);
} else {
setcookie('skin',
'matrix', time()+31556926, '/', '', TRUE, TRUE);
}
$_COOKIE['skin'] = 'matrix';
break;
case 'stylish':
if ($check_https == 'http') {
setcookie('skin', 'stylish', time()+31556926, '/', '', FALSE, TRUE);
} else {
setcookie('skin',
'stylish', time()+31556926, '/', '', TRUE, TRUE);
}
$_COOKIE['skin'] = 'stylish';
break;
default:
if ($check_https == 'http') {
setcookie('skin', 'default', time()+31556926, '/', '', FALSE, TRUE);
} else {
setcookie('skin', 'default',
time()+31556926, '/', '', TRUE, TRUE);
}
$_COOKIE['skin'] = 'default';
}
}
if (isset($_COOKIE['skin'])) {
$my_skin = htmlentities($_COOKIE['skin'], ENT_QUOTES);
if (file_exists(realpath("$my_skin.css"))) {
echo " <link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"$my_skin.css\">" . PHP_EOL;
} else {
echo
" <link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"default.css\">" . PHP_EOL;
}
} else {
echo " <link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"default.css\">" . PHP_EOL;
}
?>
</head>
<body>
<div class="skin-content">
<fieldset><legend>Change Skin</legend>
<form name="skin" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
<select name="skin"
class="skin">
<option class="my_skin" value="finalfantasy"<?php if (isset($_COOKIE['skin']) && $_COOKIE['skin'] == 'finalfantasy') { echo ' selected'; } ?>>finalfantasy</option>
<option class="my_skin" value="science"<?php if (isset($_COOKIE['skin']) && $_COOKIE['skin'] == 'science') { echo ' selected'; } ?>>science</option>
<option class="my_skin" value="matrix"<?php if (isset($_COOKIE['skin']) && $_COOKIE['skin'] == 'matrix') { echo ' selected';
} ?>>matrix</option>
<option class="my_skin" value="stylish"<?php if (isset($_COOKIE['skin']) && $_COOKIE['skin'] == 'stylish') { echo ' selected'; } ?>>stylish</option>
</select>
<input class="button" type="submit" name="change" value="Change Skin">
</form>
</fieldset>
</div>
</body>
</html>
Se avete domande chiedete pure. Potete prelevare lo script
qui. Buon divertimento