Alors, j'ai apporté ma touche à ton code PHP car pas assez lisible pour moi, j'en ai profité pour tenter d'optimiser un chouilla le code :
<?php
mysql_select_db($database_articles, $articles); // Choix de la base de donnée
$query = "SELECT id_index_page, position FROM index_page WHERE on_off_line = 1 ORDER BY orderId ASC"; // Sélection des id_index_page et position
$result = mysql_query($query, $articles) or die('Impossible d\'interroger la base de données');
$num = mysql_num_rows($result);
if($num > 0)
{
$num_css = '2222233'; // Initialisation du nom de la css
$file_css = 'fp'.$num_css; // Initialisation du nom de la variable ${$css_prop} = $fp2222233
$css_prop = '_css'.$num_css; // Initialisation du nom de la variable ${$css_prop} = $_css2222233
while($row = mysql_fetch_assoc($result)) // Traitement des résultats
{
if(!empty($row['id_index_page'])) // Double contrôle, mais pourquoi pas ?
{
${$css_prop} = '#photos'.$row['id_index_page'].','."\n";
${$css_prop}.= '#photos_vertical'.$row['id_index_page'].' {'."\n";
${$css_prop}.= "\t".'-webkit-transition:all 0.1s ease-in-out;'."\n";
${$css_prop}.= "\t".'-moz-transition:all 0.1s ease-in-out;'."\n";
${$css_prop}.= "\t".'-o-transition:all 0.1s ease-in-out;'."\n";
${$css_prop}.= "\t".'-transition:all 0.1s ease-in-out;'."\n";
${$css_prop}.= "\t".'position:fixed;'."\n";
${$css_prop}.= "\t".'z-index:100;'."\n";
${$css_prop}.= "\t".'visibility: hidden;'."\n";
${$css_prop}.= "\t".'margin-left: '.$row['position'].'px;'."\n";
${$css_prop}.= "\t".'bottom:15px'."\n";
${$css_prop}.= '}'."\n\n";
${$css_prop}.= '#photos_vertical'.$row['id_index_page'].'{'."\n";
${$css_prop}.= "\t".'margin-left: 150px'."\n";
${$css_prop}.= '}'."\n\n";
}
else
{
//Prévoir une raison de sortie
}
}
${$file_css} = fopen('Css/photo_index.css', 'w+'); // Ouverture du fichier css (si non existant, création du fichier)
fwrite(${$file_css}, ${$css_prop}); // Remplissage du fichier
fclose(${$file_css}); //Fermeture du fichier
}
else
{
// Prévoir une raison de sortie
}
?>
<?php
require_once('../../../Connections/articles.php');
if(!function_exists('GetSQLValueString'))
{
function GetSQLValueString($theValue, $theType, $theDefinedValue=FALSE, $theNotDefinedValue=FALSE)
{
if(PHP_VERSION < 6)
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists('mysql_real_escape_string') ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
$theValue = ($theValue != '') ? TRUE : FALSE;
switch($theType)
{
case 'text':
case 'date':
$theValue = ($theValue) ? '\''.$theValue.'\'' : 'NULL';
break;
case 'long':
case 'int':
$theValue = ($theValue) ? intval($theValue) : 'NULL';
break;
case 'double':
$theValue = ($theValue) ? doubleval($theValue) : 'NULL';
break;
case 'defined':
$theValue = ($theValue) ? $theDefinedValue : $theNotDefinedValue;
break;
default:
break;
}
return $theValue;
}
}
mysql_select_db($database_articles, $articles);
$query_rsdesign = "SELECT fck_back_color, backgroudcolor, text_zone_back_color, menu_text_zone_back_color, rubrique_menu_back_color FROM design";
$rsdesign = mysql_query($query_rsdesign, $articles) or die('Erreur MYSQL');
$row_rsdesign = mysql_fetch_assoc($rsdesign);
$totalRows_rsdesign = mysql_num_rows($rsdesign);
$default_fck_editor_backcolor = $row_rsdesign['fck_back_color'];
$site_backgroud_color = $row_rsdesign['backgroudcolor'];
$textaera_back_color = $row_rsdesign['text_zone_back_color'];
$menu_textaera_back_color = $row_rsdesign['menu_text_zone_back_color'];
$fck_editor_backcolor=$row_rsdesign['text_zone_back_color'];
if($default_fck_editor_backcolor != '')
{
$fck_editor_backcolor = $default_fck_editor_backcolor;
}
elseif($fck_editor_backcolor != '')
{
$fck_editor_backcolor = $textaera_back_color;
}
elseif($fck_editor_backcolor == '')
{
$fck_editor_backcolor = $row_rsdesign['menu_text_zone_back_color'];
}
$fckEditor_backcolor = $fck_editor_backcolor;
if($fck_editor_backcolor == '')
{
$fckEditor_backcolor = $site_backgroud_color;
}
else
{
$fckEditor_backcolor = $fckEditor_backcolor;
}
//Header PHP for CSSphp File
$css = '<?php'."\n";
$css.= 'header(\'Content-type: text/css\');'."\n";
$css.= 'if(strtotime($_SERVER[\'HTTP_IF_MODIFIED_SINCE\']) == filemtime(__FILE__))'."\n";
$css.= "\t".'{'."\n";
$css.= "\t".'header(\'Last-Modified: \'.gmdate(\'D, d M Y H:i:s\', filemtime(__FILE__)).\' GMT\', TRUE, 304);'."\n";
$css.= "\t".'}'."\n";
$css.= "\t".'else'."\n";
$css.= "\t\t".'{'."\n";
$css.= "\t\t".'header(\'Last-Modified: \'.gmdate(\'D, d M Y H:i:s\', filemtime(__FILE__)).\' GMT\', TRUE, 200);'."\n";
$css.= "\t\t".'header(\'Content-Length: \'. filesize(__FILE__));'."\n";
$css.= "\t\t".'}'."\n";
$css.= '?>'."\n\n";
//CSS content
$css.= 'body {'."\n";
$css.= "\t".'background-color: '.$fckEditor_backcolor.';'."\n";
$css.= "\t".'color: '.$row_rsdesign['rubrique_menu_back_color'].';'."\n";
$css.= "\t".'font-size: 26px;'."\n";
$css.= "\t".'font-family: "Times New Roman", Times, serif;'."\n";
$css.= "\t".'padding: 5px;'."\n";
$css.= "\t".'margin: 0'."\n";
$css.= '}'."\n\n";
$css.= 'body,'."\n";
$css.= 'td {'."\n";
$css.= "\t".'font-family: "Times New Roman", Times, serif;'."\n";
$css.= "\t".'font-size: 16px // taille de la police dans la zone de texte'."\n";
$css.= '}'."\n\n";
$css.= 'a {'."\n";
$css.= "\t".'color: -moz-hyperlinktext !important;'."\n";
$css.= "\t".'text-decoration: -moz-anchor-decoration'."\n";
$css.= '}'."\n\n";
$css.= '.Bold {'."\n";
$css.= "\t".'font-weight: bold'."\n";
$css.= '}'."\n\n";
$css.= '.Title {'."\n";
$css.= "\t".'font-weight: bold;'."\n";
$css.= "\t".'font-size: 18px;'."\n";
$css.= "\t".'color: #cc3300'."\n";
$css.= '}'."\n\n";
$css.= '.Code {'."\n";
$css.= "\t".'border: #8b4513 1px solid;'."\n";
$css.= "\t".'padding-right: 5px;'."\n";
$css.= "\t".'padding-left: 5px;'."\n";
$css.= "\t".'color: #000066;'."\n";
$css.= "\t".'font-family: \'Courier New\' , Monospace;'."\n";
$css.= "\t".'background-color: #ff9933'."\n";
$css.= '}'."\n\n";
$file_css = fopen('Css/css.css.php', 'w+'); // Ouverture du fichier css (si non existant, création du fichier)
fwrite($file_css, $css); // Remplissage du fichier
fclose($file_css); //Fermeture du fichier
mysql_free_result($rsdesign);
?>
Le deuxième bout de code, car généré un fichier css.css.php qui est ton fichier CSS en PHP en DUR. Seul les headers sont traités pour vérifier si le cache est à jour côté navigateur (en partant du principe que le bout de code fonctionne, je ne l'ai pas testé).
Donc comme le fichier doit renvoyer sa date de dernière modification, ainsi que le statut de la transaction (200 si modifié), ça devrait forcer le navigateur à télécharger de nouveau le fichier. Sinon, il ne le télécharge pas de nouveau.
La charge serveur est ... ridicule ainsi.
Par contre, il ne faut pas oublier les "golden rules" en code, côté PHP :
- Utilisation de simple quote en priorité au double quote (sur des millions d'opération, j'ai déjà lu, je ne sais où, que c'était un chouilla mieux)
- Mieux vaut découper une variable en plusieurs fois qu'un gros bloc (permet en plus, de gérer l'indentation du code)
- Bien indenté son code (meilleure lisibilité)
- Bien commenté son code (meilleure maintenabilité)
- Ne pas dupliquer ses fonctions, si elle n'existe pas, elle doit exister ailleurs, alors il faut inclure le fichier qui contient la function, et ne pas la réécrire (meilleure maintenabilité)
- Essayer de limiter un maximum les comparateurs, si on l'utilise plusieurs fois, autant faire le traitement une fois, et c'est fini, ensuite vérifier que la variable existe ou non est plus rapide
Code CSS :
- Dans le premier bloc, pour les 2 ID différent, une seule règles changeait, autant les grouper tant que possible, tant que ça ne gène pas la compréhension
- Le dernier ; n'est pas obligatoire dans les règles CSS de chaque sélecteur, autant gagner un petit octet =)
- Les règles CSS peuvent être réduite, par exemple : margin: 5px 5px 5px 5px; peut être écrit : margin: 5px; (9octets de gagnés)
Côté SQL :
- Toujours indiqué quels champs on souhaite récupérer (pas de SELECT *)
- Préféré mysql_fetch_assoc à mysql_fetch_array (2 fois plus de donnée à traiter, car les résultats disponibles sont $var['nom'] et $var[0] (cumul du fetch_assoc + fetch_row), ou alors, indiquer le type de résultat attendu, par exemple MYSQL_ASSOC, mais du coup, autant prendre le fonction éponyme.
Pour aller plus loin, pourquoi ne pas utiliser
la PDO pour faire tes connexions SQL ?
A terme, les fonction "mysql_*" ne seront plus supportée, autant sauté le pas maintenant ? Surtout pour un CMS
EDIT: Le forum déforme l'indentation du code, le voici en ligne :
http://dl.free.fr/ih8ORWV4n Modifié par Super_baloo8 (13 Mar 2012 - 21:12)