Plugin Broken Link Checker: compatibilidad con PHP 7.2 y 7.3

Plugin Broken Link Checker y PHP 7.3

El plugin Broken Link Checker es uno de esos complementos que nunca debe faltar en nuestras instalaciones de WordPress. Por desgracia, lleva más de seis meses sin actualizar y presenta dos problemas en la versión 1.11.8. Por un lado, el motor de almacenamiento debe ser MyISAM ya que de otra forma no funciona correctamente. Por otra, nos encontramos en su código con ciertas funciones obsoletas que es preferible sustituir.

Problemas con tipo de tablas

Archivo: /includes/admin/db-schema.php

En sentido estricto, no se trata de una incompatibilidad con una u otra versión de PHP sino de un problema que se presenta al activar el plugin. Para llevar a cabo su tarea, el plugin crea unas tablas en la base de datos de nuestro WordPress. Podemos identificarlas fácilmente ya que la estructura de su nombre consta de

  • Prefijo de nuestras tablas (normalmente «wp»)
  • Prefijo «blc».
  • Nombre de la tabla.

En la actual versión crea las siguientes tablas: wp_blc_filters, wp_blc_instances, wp_blc_links y wp_blc_synch.

Pues bien, el plugin no determina cual será el motor de almacenamiento de las tablas a crear por lo que aquél será definido por la configuración por defecto de nuestro servidor y aquí radica el problema ya que, si no se crean tipo MyISAM, el plugin no funcionará de forma adecuada. En concreto, no se almacenan los cambios efectuados. Para salvar este problema vamos a modificar el archivo «db-schema». Debe realizarse esta modificación ANTES DE ACTIVAR EL PLUGIN:

Debemos buscar todas las líneas que comienzan por CREATE TABLE IF NOT EXISTS pues es aquí donde se definen las instrucciones que permiten crear la tabla. Éstas finalizan siempre con {$charset_collate}

Solo tenemos que sustituir en todos los casos {$charset_collate}; por ENGINE=MyISAM {$charset_collate};


Problemas de compatibilidad con PHP

Como vamos a ver en los tres errores siguientes, estamos ante avisos tipo WARNING, es decir, ante advertencias en tiempo de ejecución (errores no fatales) que no detienen la ejecución del script. Se trata de funciones obsoletas que conviene sustituir ya que podrían dejar de funcionar en versiones futuras de PHP.

Archivo: /core/core.php

957 | WARNING | Function create_function() is deprecated since PHP 7.2; Use an anonymous function instead.

Sustituimos

uasort($modules['container'], create_function('$a, $b', 'return strcasecmp($a["Name"], $b["Name"]);'));

por

uasort($modules['container'], function ($a, $b) { return strcasecmp($a["Name"], $b["Name"]); });
Archivo: /modules/extras/plaintext-url-parser-base.php

82 | WARNING | The constant “FILTER_FLAG_HOST_REQUIRED” is deprecated since PHP 7.3

Sustituimos

if ( !filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED) ){

por

if ( !filter_var($url, FILTER_VALIDATE_URL ) ){
Archivo: /modules/checkers/http.php

147 | WARNING | Function create_function() is deprecated since PHP 7.2; Use an anonymous function instead

Sustituimos

return preg_replace_callback( '|[^a-z0-9\+\-\/\\#:.,;=?!&%@()$\|*~_]|i', create_function('$str','return rawurlencode($str[0]);'), $url );

por

return preg_replace_callback( '|[^a-z0-9\+\-\/\\#:.,;=?!&%@()$\|*~_]|i', function ($str) { return rawurlencode($str[0]); }, $url );

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *