var Phenix = function ()

Troll du Web depuis 1996

Windows 7 et mise à jour qui tournent folles

Aujourd’hui c’est le dernier jour pour profiter de la mise à jour gratuite vers Windows 10.

Du coup, vous avez peut-être sortit votre vieux CD de Windows 7 pour réinstaller tout ça, après tout, quand c’est gratuit... C’est vous le produit.

Bref, vous pourriez être confronté, comme moi a l’impossibilité d’installer les mise à jour. Elles tournent en boucle et voilà, rien ne se passe.
C’est génial non ? Bien entendu impossible de passez à Windows 10 sans faire quelques mises à jour de Windows 7.

Bref, voici une solution pour sortir de la mélasse :

  1. Téléchargez ce patch pour le 32bits ou ce patch pour le 64bits.
  2. Redémarrez Windows.
  3. Installez le patch.
  4. Redémarrez (encore...).
  5. Lancez les mises à jours.
  6. Prenez la direction de la cafetière la plus proche.

Voilà !

Voir en ligne : Windows 7 : après une réinstallation Windows Update ne trouve pas de mises à jour !

Préparer Ubuntu 16.04 ou Linux Mint 18 pour le développement web local

Cet article est une mise à jour de l’article Préparer Ubuntu 14.04 pour le développement web local.

On commence par installer les éléments du serveur web :

  1. sudo apt install lamp-server^ php-gd php-sqlite3 php-curl php-xml php-xdebug php-mbstring

N’oubliez pas que le "^" à la fin de lamp-server n’est pas une faute de frappe !

Donner un nom au serveur web

Même si on a plus vraiment de message d’erreur, il est toujours bon de donner un nom au serveur. On fait comme pour Ubuntu 14.04 :

  1. echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/fqdn.conf
  2. sudo a2enconf fqdn

Configurer xdebug

La configuration par défaut de xdebug est un peu légère.
On modifie le fichier de configuration /etc/php/7.0/mods-available/xdebug.ini pour y ajouter ces lignes :

xdebug.max_nesting_level = 1000

// Pas de limite pour l'affichage xdebug
xdebug.var_display_max_depth = -1
xdebug.var_display_max_children = -1
xdebug.var_display_max_data = -1

Augmenter la valeur maximale d’upload

Par défaut, la valeur maximale d’upload est de 2Mo. C’est un poil handicapant de nos jours ou le moindre fichier dépasse facilement cette limite.

Il suffit d’éditer /etc/php/7.0/apache2/php.ini et de modifier les valeurs :

upload_max_filesize = 1024M
post_max_size = 1024M

Dans le même fichier, j’en profite pour afficher les erreurs, et vraiment toutes les erreurs PHP :

error_reporting = E_ALL
display_errors = On

Utiliser un autre répertoire que /var/www

Ensuite, je n’aime pas trop utiliser le dossier /var/www sur lequel pointe localhost par défaut. J’aime bien mettre les fichiers à l’abri dans mon répertoire /home :

Il faut éditer le fichier /etc/apache2/sites-available/000-default.conf
A la fin de la déclaration du VirtualHost il faut ajouter ceci :

<Directory /home/phenix/Sites>
     Options Indexes FollowSymLinks
     AllowOverride all
     Require all granted
</Directory>

Il faut aussi remplacer la déclaration du DocumentRoot qui se trouve plus haut !

Maintenant, normalement, localhost pointe sur le dossier Sites de mon /home.

Changer les droits d’Apache

J’aime également bien que Apache tourne avec mes droits utilisateurs, cela évite de pas mal de problème d’écriture. Sur un serveur web c’est plutôt déconseillé, mais pour uniquement du local, je ne vois pas trop le mal.

Il faut éditer le fichier /etc/apache2/envvars et changer les ligne USER et GROUP. Cher moi cela donne ceci :

export APACHE_RUN_USER=phenix
export APACHE_RUN_GROUP=phenix

Activer l’URL_REWRITING

Par défaut, mod_rewrite n’est pas activé. On a déjà préparé le terrain avec AllowOverride all mais il faut encore activer le module :

  1. sudo a2enmod rewrite

Ensuite on redémarre apache :

  1. sudo service apache2 restart

Activer le module Expires

Un autre module bien utile : expires, pour les sites qui configure le cache du navigateur via Apache2

  1. sudo a2enmod expires

On oublie pas de relancer apache pour prendre en compte le nouveau mod :

  1. sudo service apache2 restart

Activer le module Headers

Pour les sites qui manipule les headers via apache2 :

  1. sudo a2enmod headers

On oublie pas de relancer apache pour prendre en compte le nouveau mod :

  1. sudo service apache2 restart

Activer www.localhost

Parfois, on place des redirections via les fichiers .htaccess pour forcer l’utiliser les www devant le nom de domaine.
Du coup, c’est pratique d’avoir un www.localhost fonctionnel. Il faut pour cela éditer le fichier /etc/hosts pour y ajouter :

127.0.0.1       www.localhost

MySQL

Je ne suis pas un grand fan des tables en InnoDB, depuis le jour ou elles ont toutes crashés lamentablement.
Dans mon domaine, l’utilisation d’InnoDB n’est pas du tout indispensable. MyISAM pourrait même être meilleur, car il est plus rapide sur les opérations simples comme SELECT et INSERT.

Du coup, on change le moteur par défaut, en éditant le fichier /etc/mysql/mysql.conf.d/mysqld.cnf.

Dans la section [mysqld] on ajoute la ligne :

default-storage-engine=myisam

Truc en plus

Toutes les fonts "web" ne sont pas installées, il faut les demander :

  1. sudo apt-get install ttf-mscorefonts-installer

Bon travail !

Activer un thème Wordpress enfant sans perdre la configuration du thème parent

Quand on active un thème Wordpress enfant, après avoir configuré le thème parent, on perd soudainement la configuration.
C’est relativement agaçant, Wordpress devrait faire une fusion des deux configurations et non pas ignorer la configuration du thème parent.

En attendant que les développeurs de Wordpress ce réveil, il est possible de dupliquer la configuration.
Il faut chercher dans la table wp_options la valeur :

theme_mods_NomDuTheme

Et copier le contenu (un tableau sérialisé) dans la valeur :

theme_mods_NomDuThemeEnfant

Cela évite d’avoir à tout refaire, mais franchement, faut le savoir !

Afficher le fichier template utilisé par Wordpress

Souvent, quand on récupère le Wordpress d’un client avec 1 zillions de plugins et un thème "premium theme forest", c’est souvent la merde pour savoir quel fichier édités pour ajouter le bouton de partage Facebook.

Wordpress, dans un soucis d’épurer le code, ne possède pas de méthode "mode inclure" comme SPIP, c’est bien dommage.

Heureusement, on peut en bricoler un dans function.php :

  1. <?php
  2. add_action('wp_head', 'show_template');
  3. function show_template() {
  4. global $template;
  5. print_r($template);
  6. }

Cela va afficher le fichier template utilisé par Wordpress dans l’en-tête de toutes les pages du site.

C’est pas la panacée mais ça aide un peu.

Voir en ligne : Which template page is being used ?

Récupérer l’ID d’un post Wordpress depuis le post_name

Une petite fonction Wordpress pratique quand on travaille avec des pages qui ont un layout spécifique. Le nom est souvent plus parlant et moins limité que l’ID du post/page.

  1. <?php
  2. /**
  3.  * Récupère l'ID d'un post en fonction de son post_name
  4.  *
  5.  * @param string $post_name
  6.  * @access public
  7.  * @global objet $wpdb
  8.  * @return int
  9.  */
  10. function get_page_id_by_name( $post_name ) {
  11. global $wpdb;
  12.  
  13. $key_cache = 'id_post_'.$post_name;
  14. $id = wp_cache_get( $key_cache );
  15.  
  16. if ( ! $id ) {
  17. $id = $wpdb->get_var(
  18. $wpdb->prepare(
  19. 'SELECT ID FROM '.$wpdb->posts.' WHERE post_name = %s',
  20. $post_name
  21. )
  22. );
  23. wp_cache_set( $key_cache, $id );
  24. }
  25.  
  26. return $id;
  27. }