[wp-trac] [WordPress Trac] #62845: Deprecated: str_replace() - Passing null as $subject in PHP 8.x

WordPress Trac noreply at wordpress.org
Thu Jan 23 06:47:53 UTC 2025


#62845: Deprecated: str_replace() - Passing null as $subject in PHP 8.x
-------------------------+-------------------------------------------------
 Reporter:  madum        |       Owner:  (none)
     Type:  defect       |      Status:  new
  (bug)                  |
 Priority:  normal       |   Milestone:  Awaiting Review
Component:  General      |     Version:
 Severity:  major        |  Resolution:
 Keywords:  dev-         |     Focuses:  administration, template, php-
  feedback               |  compatibility
-------------------------+-------------------------------------------------
Changes (by sabernhardt):

 * version:  6.7.1 =>


Old description:

> Résumé du problème
> Lors de l'utilisation de PHP 8.2, une alerte "Deprecated" apparaît dans
> le fichier wp-includes/functions.php, à plusieurs endroits.
>
> L'alerte se produit parce que la fonction str_replace() reçoit une valeur
> null pour le paramètre $subject. Dans PHP 8.2, passer null à un paramètre
> attendu comme array|string génère une alerte de dépréciation.
>
> Étapes pour reproduire
> 1. Installer WordPress sur un environnement local ou un serveur exécutant
> PHP 8.2.
> 2. Activer le mode débogage dans wp-config.php :
>    define('WP_DEBUG', true);
>    define('WP_DEBUG_DISPLAY', true);
> 3. Naviguer vers une page d'administration ou effectuer une action
> utilisant wp-includes/functions.php.
> 4. Observer le message d'erreur "Deprecated" dans les logs ou dans la
> sortie HTML.
>
> Message d'erreur exact
> Deprecated: str_replace(): Passing null to parameter #3 ($subject) of
> type array|string is deprecated in wp-includes/functions.php on line 2189
>
> Deprecated: str_replace(): Passing null to parameter #3 ($subject) of
> type array|string is deprecated in wp-includes/functions.php on line 1234
> (exemple pour un deuxième cas similaire)
>
> Corrections apportées
> Pour chaque occurrence de str_replace() recevant une variable qui
> pourrait être null, il est nécessaire de vérifier et d'initialiser la
> variable avant de l'utiliser.
>
> Correction pour la ligne 2189 :
> Bloc original :
> $haystack = str_replace( $needle, $replace, $haystack );
>
> Bloc corrigé avec numéros de ligne (2185-2191) :
> 2185: if ( ! is_array( $haystack ) && ! is_string( $haystack ) ) {
> 2186:     return $haystack;
> 2187: }
> 2188:
> 2189: if ( null === $haystack ) {
> 2190:     $haystack = ''; // Ou [] si nécessaire
> 2191: }
> $haystack = str_replace( $needle, $replace, $haystack );
>
> Correction pour la ligne 1234 (autre occurrence) :
> Bloc original :
> $result = str_replace( $search, $replace, $subject );
>
> Bloc corrigé avec numéros de ligne (1230-1235) :
> 1230: if ( null === $subject ) {
> 1231:     $subject = ''; // Initialiser avec une chaîne vide
> 1232: }
> 1233:
> 1234: $result = str_replace( $search, $replace, $subject );
>
> Impact
> Ces corrections garantissent la compatibilité avec PHP 8.2 en évitant les
> alertes "Deprecated". Elles ne modifient pas le comportement attendu des
> fonctions et améliorent la robustesse du code.
>
> Recommandation
> Pour résoudre ce problème de manière définitive :
> 1. Appliquer le correctif dans les versions futures de WordPress.
> 2. Identifier et corriger toutes les occurrences similaires dans le code
> source de WordPress.
> 3. Ajouter des tests automatisés pour détecter les valeurs null passées à
> des fonctions incompatibles avec PHP 8.2.

New description:

 Résumé du problème
 Lors de l'utilisation de PHP 8.2, une alerte "Deprecated" apparaît dans le
 fichier `wp-includes/functions.php`, à plusieurs endroits.

 L'alerte se produit parce que la fonction `str_replace()` reçoit une
 valeur `null` pour le paramètre `$subject`. Dans PHP 8.2, passer `null` à
 un paramètre attendu comme `array|string` génère une alerte de
 dépréciation.

 Étapes pour reproduire
 1. Installer WordPress sur un environnement local ou un serveur exécutant
 PHP 8.2.
 2. Activer le mode débogage dans `wp-config.php` :
  {{{
    define('WP_DEBUG', true);
    define('WP_DEBUG_DISPLAY', true);
  }}}
 3. Naviguer vers une page d'administration ou effectuer une action
 utilisant `wp-includes/functions.php`.
 4. Observer le message d'erreur "Deprecated" dans les logs ou dans la
 sortie HTML.

 Message d'erreur exact
 {{{
 Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type
 array|string is deprecated in wp-includes/functions.php on line 2189

 Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type
 array|string is deprecated in wp-includes/functions.php on line 1234
 (exemple pour un deuxième cas similaire)
 }}}

 Corrections apportées
 Pour chaque occurrence de `str_replace()` recevant une variable qui
 pourrait être null, il est nécessaire de vérifier et d'initialiser la
 variable avant de l'utiliser.

 Correction pour la ligne 2189 :
 Bloc original :
 `$haystack = str_replace( $needle, $replace, $haystack );`

 Bloc corrigé avec numéros de ligne (2185-2191) :
 {{{
 2185: if ( ! is_array( $haystack ) && ! is_string( $haystack ) ) {
 2186:     return $haystack;
 2187: }
 2188:
 2189: if ( null === $haystack ) {
 2190:     $haystack = ''; // Ou [] si nécessaire
 2191: }
 $haystack = str_replace( $needle, $replace, $haystack );
 }}}

 Correction pour la ligne 1234 (autre occurrence) :
 Bloc original :
 `$result = str_replace( $search, $replace, $subject );`

 Bloc corrigé avec numéros de ligne (1230-1235) :
 {{{
 1230: if ( null === $subject ) {
 1231:     $subject = ''; // Initialiser avec une chaîne vide
 1232: }
 1233:
 1234: $result = str_replace( $search, $replace, $subject );
 }}}

 Impact
 Ces corrections garantissent la compatibilité avec PHP 8.2 en évitant les
 alertes "Deprecated". Elles ne modifient pas le comportement attendu des
 fonctions et améliorent la robustesse du code.

 Recommandation
 Pour résoudre ce problème de manière définitive :
 1. Appliquer le correctif dans les versions futures de WordPress.
 2. Identifier et corriger toutes les occurrences similaires dans le code
 source de WordPress.
 3. Ajouter des tests automatisés pour détecter les valeurs null passées à
 des fonctions incompatibles avec PHP 8.2.

--

Comment:

 Related: #57580, #57581

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/62845#comment:1>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list