Serveur dédié : résoudre l'erreur  'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' — Missing /var/run/mysqld/mysqld.sock photo

Serveur dédié : résoudre l’erreur “Can’t connect to local MySQL server through socket”

Après une mise à jour du serveur SQL, ou après un redémarrage physique du serveur, il est possible d’obtenir l’erreur suivante :

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Missing /var/run/mysqld/mysqld.sockCode language: PHP (php)

On peut aussi la rencontrer sous cette forme :

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)Code language: JavaScript (javascript)

Cette erreur signifie que le client MySQL essaie de se connecter à un socket Unix local, mais que le fichier mysqld.sock n’existe pas à l’emplacement attendu.

Le problème peut avoir plusieurs causes : MySQL n’est pas démarré, le serveur écoute sur un autre socket, le répertoire /run/mysqld n’existe pas, ses permissions sont incorrectes, ou le service n’arrive pas à créer son socket au boot.

Comprendre le rôle de mysqld.sock

Sur Linux, une connexion locale à MySQL ou MariaDB peut passer par un socket Unix plutôt que par TCP/IP.

Au lieu de se connecter à :

127.0.0.1:3306Code language: CSS (css)

le client utilise un fichier spécial, souvent situé ici :

/var/run/mysqld/mysqld.sockCode language: JavaScript (javascript)

ou, plus précisément sur les systèmes modernes :

/run/mysqld/mysqld.sock

Sur beaucoup de distributions, /var/run est un lien symbolique vers /run. Le répertoire /run est temporaire : son contenu est recréé à chaque démarrage. C’est précisément pour cela qu’un problème de création du dossier /run/mysqld peut réapparaître après un reboot.

MySQL explique que le chemin du socket peut être défini avec l’option socket dans les fichiers de configuration, aussi bien dans une section serveur comme [mysqld] que dans une section client comme [client].

Lire la suite

HTML5 : corriger l'erreur "The frameborder attribute on the iframe element is obsolete. Use CSS instead." photo

HTML5 : corriger l’erreur “The scrolling attribute on the iframe element is obsolete. Use CSS instead.”

Si, au détour d’une validation HTML de votre page, vous obtenez l’erreur suivante :

The scrolling attribute on the iframe element is obsolete. Use CSS instead.

… c’est que votre code contient un élément <iframe> avec un attribut scrolling.

Exemple classique :

<iframe src="https://example.com" scrolling="no"></iframe>Code language: HTML, XML (xml)

Cet attribut était utilisé pour indiquer si l’iframe devait afficher une barre de défilement. En HTML moderne, il est obsolète. Le standard HTML classe bien scrolling sur iframe parmi les fonctionnalités obsolètes, et les validateurs recommandent d’utiliser CSS à la place.

Le problème : l’attribut scrolling sur iframe

On trouvait souvent ce genre de code dans les anciennes intégrations :

<iframe
  src="https://example.com/embed"
  width="600"
  height="400"
  scrolling="no"
  frameborder="0"
></iframe>Code language: HTML, XML (xml)

Le validateur HTML signale alors une erreur, car scrolling ne fait plus partie des attributs conformes pour <iframe>. En clair, le navigateur peut encore l’interpréter par compatibilité, mais le code n’est plus valide.

La première correction consiste donc à supprimer l’attribut :

<iframe
  src="https://example.com/embed"
  width="600"
  height="400"
></iframe>Code language: HTML, XML (xml)

Mais cela ne suffit pas toujours à reproduire exactement l’ancien comportement. C’est là que CSS entre en scène.

Lire la suite

Sur un fond bleu clair, un texte noir indique "< ? PHP ?", avec une icône d'éléphant géométrique bleue remplaçant le deuxième "P". Il s'agit d'un clin d'œil au langage de programmation PHP, souvent rencontré dans les problèmes d'erreur preg_match ou de plage invalide dans la classe de caractères.

PHP : résoudre l’erreur “Creating default object from empty value”

Suite à une mise à jour de PHP, le fichier d’erreurs de mon site a commencé à afficher le message suivant :

PHP Warning: Creating default object from empty value in /wp-content/themes/skyminds/functions.php on line 1213

La ligne en question ressemblait à ceci :

$posts[0]->comment_status = 'closed';Code language: PHP (php)

À première vue, cette ligne semble anodine. Pourtant, elle suppose plusieurs choses : que $posts existe, que $posts est un tableau, que l’index 0 existe, et que $posts[0] est bien un objet.

Si l’une de ces conditions n’est pas vraie, PHP tente parfois de créer un objet par défaut à partir d’une valeur vide. C’est ce qui déclenche l’avertissement Creating default object from empty value.

Pourquoi cette erreur apparaît

Le problème vient généralement d’une assignation de propriété sur une variable qui n’est pas un objet valide.

Exemple simple :

$post = null;
$post->comment_status = 'closed';Code language: PHP (php)

Ou encore :

$posts = array();
$posts[0]->comment_status = 'closed';Code language: PHP (php)

Dans le second cas, $posts existe bien, mais $posts[0] n’existe pas. PHP ne peut donc pas modifier la propriété comment_status d’un objet absent.

La bonne correction dépend donc du type de donnée que vous manipulez : tableau, objet générique stdClass, instance de classe, ou objet WordPress comme WP_Post.

Correction rapide : vérifier que l’objet existe

La correction la plus prudente consiste à tester l’existence du premier élément avant de modifier sa propriété :

if ( isset( $posts[0] ) && is_object( $posts[0] ) ) {
    $posts[0]->comment_status = 'closed';
}Code language: PHP (php)

Cette version évite l’avertissement, car elle ne modifie comment_status que si $posts[0] existe et contient bien un objet.

Dans un thème WordPress, si l’on s’attend à recevoir un objet WP_Post, on peut être plus strict :

if ( isset( $posts[0] ) && $posts[0] instanceof WP_Post ) {
    $posts[0]->comment_status = 'closed';
}Code language: PHP (php)

C’est généralement préférable, car on vérifie le type exact attendu. WordPress documente WP_Post comme la classe utilisée pour représenter les objets d’articles retournés par des fonctions comme get_post().

Lire la suite