Astuce Rediriger en 404 ou 403

Si vous voulez rediriger l'utilisateur vers la page 404 ("Page introuvable") ou 403 ("Vous n'avez pas le droit d’accéder à cette page") de Drupal, vous faisiez sans doute ça en Drupal 7 :

return drupal_access_denied();
return drupal_not_found();

Voici l'équivalent pour Drupal 8 :

use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 
throw new AccessDeniedHttpException();
throw new NotFoundHttpException();

Astuce Drupal dans un sous-répertoire

Si vous utilisez Drupal dans un sous-répertoire servi par Apache (ex : /var/www/html/mon_site), ou derrière un reverse proxy qui ajoute un contexte à l'URL (ex : http://mon-domaine.fr/mon-contexte) il est possible que seule la page d'accueil fonctionne.

Vous aurez alors une erreur 404 sur toutes les autres pages (ex : http://mon-domaine.fr/mon-contexte/user/login).

Il vous faut alors modifier le .htaccess à la racine du site, en modifiant la ligne :

# RewriteBase /

Décommentez-la et remplacer le / par le contexte ou le sous-répertoire. Ex :

# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
# VirtualDocumentRoot and the rewrite rules are not working properly.
# For example if your site is at http://example.com/drupal uncomment and
# modify the following line:
# RewriteBase /drupal
#
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
RewriteBase /mon-contexte

Astuce Connaître le poids et le nombre de fichiers d'un répertoire

Poids total

Pour connaître le poids total des fichiers (et sous-répertoires) que contient un répertoire, vous pouvez utiliser la commande du :

du -shL mon/repertoire

Explication :

Les options s, h et L permettent respectivement de faire la somme, afficher un poids lisible par un humain (en Ko, Mo, ...) plutôt qu'en octets et suivre les liens symboliques (plutôt que de compter le poids du lien).

Nombre de fichiers

Pour connaître le nombre de fichiers il faut cette fois composer avec plusieurs commandes :

find -L mon/repertoire -type f | wc -l

Explications :

  • La commande find avec l'option -type f permet de lister les fichiers
  • L'option -L permet de suivre les liens symboliques
  • La commande wc -l compte le nombre de lignes (ici celles retournées par find)

Erreur The following module is missing from the file system

Si vous installez un module dans Drupal et que vous en supprimer les fichiers avant de le désinstaller, vous pouvez rencontrer une erreur du genre :

The following module is missing from the file system: paragraphs in drupal_get_filename() (line 240 of core/includes/bootstrap.inc).

Pour Drupal, le module est désinstallé. Pourtant, il en garde des traces et cela cause cette erreur.

Deux solutions sont alors possibles :

  • Réinstaller le module, puis le désinstaller
  • Supprimer la référence en base, via la requête suivante :
drush sql-query "DELETE FROM key_value WHERE collection='system.schema' AND name='module_name';"

Astuce Limiter la version à mettre à jour avec Composer

Lorsque vous mettez à jour vos dépendances avec Composer, il peut arriver que vous ne souhaitiez pas avoir la dernière version disponible.

Par exemple, si j'ai un site Drupal en v8.2.7 et qu'une mise à jour de sécurité sort, je peux préférer passer en v8.2.8 plutôt qu'en 8.3.1.

Dans ce cas on peut préciser ça dans le fichier composer.json :

{
...
  "require": {
    "drupal/core": "~8.2.0",
    ...
  },
...
}

Explications :

  • ~8.2.0 signifie >= 8.2.0 & < 8.3.0
  • ~8.2 signifie >= 8.2 & < 9
  • Il existe aussi le signe ^, moins restrictif : ^8.2.1 signifie >=8.2.1 & < 9

Astuce Retirer le versionnement d'un fichier avec IntelliJ/PhpStorm

PhpStorm et IntelliJ proposent d'ajouter un fichier au versionnement (ex: git add), mais ne permettent pas de le retirer.

Une solution de contournement simple consiste à le faire en ligne de commande :

git rm --cached mon_fichier
git commit -m 'suppression du fichier'

pour un répertoire entier, ajoutez l'option -récursive :

git rm -r --cached mon_repertoire
git commit -m 'suppression du répertoire'

Astuce Rechercher un paquet

Si vous êtes sous une distribution avec apt d'installé, vous pouvez rechercher un paquet avec la commande suivante :

apt-cache search terme1 terme2

Remarques :

  • Si vous indiquez plusieurs termes, seuls les résultats avec chacun d'eux seront retournés
  • Les regexp sont gérées (au moins en partie). Ex : apt-cache search php.*memcach.

Si vous avez aptitude d'installé, une commande plus simple à mémoriser existe :

aptitude search terme1 terme2

Astuce Configurer le débogueur PHPStorm avec Apache sur une VM

Si vous utilisez une VM LAMP et PHPStorm, vous pouvez utiliser son débogueur pas à pas et visualiser/modifier vos variables en temps réel au cours de l'exécution.

Pour cela, plusieurs étapes sont nécessaires.

Installation de XDebug

Connectez-vous à votre VM, et lancez la commande d'installation :

sudo apt-get install php5-xdebug

Ensuite, activez le débogage distant de xdebug en éditant le fichier /etc/php5/apache2/conf.d/20-xdebug.ini. Ajoutez-y les lignes suivantes :

xdebug.remote_enable=1
xdebug.remote_host=192.168.0.1
xdebug.remote_port=9000
xdebug.max_nesting_level=500

Remarques :

  • Remplacez l'IP par celle de la machine sur laquelle vous lancez PHPStorm.
  • La dernière ligne évite une erreur de récursion lors du débogage

Ajout d'un environnement distant dans PHPStorm

Ajoutez une nouvelle connexion SSH à votre VM :

  • Allez dans File > Settings... > Build, Execution, Deployment > Deployment
  • Cliquez sur le + vert à droite, pour ajouter un environnement
  • Choisissez un nom
  • Dans Connection, choisissez le type SFTP, et renseignez toutes les informations
    Pour le Root path, indiquez le chemin vers le répertoire contenant vos sources sur votre VM (ex : /var/www/mon-site), ou un répertoire parent (ex : /var/www)
  • Dans Mappings, remplissez les 3 champs de chemin
    • Local path : la racine de votre projet sur la machine qui lance PHPStorm
    • Deployment path : le chemin relatif depuis le Root path défini précédemment, vers votre projet sur la VM (ex : / ou /mon-site)
    • Web path : / si vous utilisez un nom de domaine pointant directement vers votre projet
  • Validez

Précisez le mapping :

  • Allez dans File > Settings... > Languages & Frameworks > PHP > Server
  • Sélectionnez le serveur que vous venez de configurer
  • Pour chaque répertoire contenant des fichiers PHP à déboguer, cliquez à droite, dans la colonne Absolute path on the server
  • Saisissez le chemin absolu vers le répertoire correspondant sur votre VM (ex: /var/www/monsite/web ou /var/www/monsite/vendor)
  • Validez

Installez une extension dans votre navigateur

Pour déclenchez le débogage, il faut ajouter un cookie à vos requête lors de votre navigation.

L'extension easy Xdebug pour Firefox et XDebug Helper pour Chrome permettent d'activer/désactiver ce cookie automatiquement via un bouton.

Le site officiel pour PHPStorm liste d'autres extensions pour d'autres navigateurs.

Activez le débogage dans votre navigateur.

Activez le débogage dans PHPStorm

Cliquez sur le bouton Start Listening for PHP Debug Connections présent dans la barre d'outil de PHPStorm (téléphone gris avec un sens interdit rouge et un insecte vert).

Commencez le débogage

Affichez une page de votre site.

Lors du premier débogage, une popup apparaît dans PHPStorm vous demandant de confirmer le débogage (normalement la configuration présentée dans la popup n'a pas besoin d'être modifiée).

Pour les suivants, vous devriez voir apparaître une petite notification dans PHPStorm vous disant que le débogage a fonctionné, mais ne s'est pas arrêté.
Dans cette notification, vous pouvez activer l’arrêt automatique à la première ligne du fichier index.php. Sinon, ajoutez un point d'arrêt (clic dans la marge de gauche du fichier PHP à déboguer). Rechargez la page.


Erreur Problème de mémoire avec composer

Si vous utilisez composer dans une VM, vous pouvez avoir une erreur de mémoire due à un problème de swap :

Installation failed, reverting ./composer.json to its original content.
The following exception is caused by a lack of memory or swap, or not having swap configured
Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details
 
[ErrorException]
proc_open(): fork failed - Cannot allocate memory

Plusieurs solutions sont décrites dans ce ticket sur Stackoverflow.

Celle (temporaire) mais qui marche particulièrement bien est la suivante. Il suffit de lancer ces commandes :

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1

Astuce Créer un lien symbolique

Pour créer un lien symbolique, il suffit d'utiliser la commande suivante :

ln -s chemin/vers/la/cible/du/lien chemin/vers/lien

Le premier paramètre contient le répertoire ou fichier à cibler, et le second (facultatif) le chemin/nom du lien à créer.

Les chemins peuvent-être relatifs ou absolus.