13 Luglio 2018 15:34:37 · [Script PHP Change Skin]
Postato da
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 , '/', NULL, NULL, TRUE);
        } else {
          setcookie('skin', 'finalfantasy', time()+31556926 , '/', NULL, TRUE, TRUE);
        }
        $_COOKIE['skin'] = 'finalfantasy';
      break;
      case 'science':
        if ($check_https == 'http') {
          setcookie('skin', 'science', time()+31556926 , '/', NULL, NULL, TRUE);
        } else {
          setcookie('skin', 'science', time()+31556926 , '/', NULL, TRUE, TRUE);
        }
        $_COOKIE['skin'] = 'science';
      break;
      case 'matrix':
        if ($check_https == 'http') {
          setcookie('skin', 'matrix', time()+31556926 , '/', NULL, NULL, TRUE);
        } else {
          setcookie('skin', 'matrix', time()+31556926 , '/', NULL, TRUE, TRUE);
        }
        $_COOKIE['skin'] = 'matrix';
      break;
      case 'stylish':
        if ($check_https == 'http') {
          setcookie('skin', 'stylish', time()+31556926 , '/', NULL, NULL, TRUE);
        } else {
          setcookie('skin', 'stylish', time()+31556926 , '/', NULL, TRUE, TRUE);
        }
        $_COOKIE['skin'] = 'stylish';
      break;
      default:
        if ($check_https == 'http') {
          setcookie('skin', 'default', time()+31556926 , '/', NULL, NULL, TRUE);
        } else {
          setcookie('skin', 'default', time()+31556926 , '/', NULL, 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  




Copyright © 2002-2018, Alessandro Marinuzzi