[RESOLU] Appel à fonction déprécié

Petit nouveau ! | 9 Messages

24 mars 2016, 23:53

Bonsoir à tous !
J'ai un gros souci sur lequel je planche depuis midi en vain. Tous mes sites sont crashés et je dois en livrer un dans une semaine.
Suite à une mise à jour worpress j'ai du changer un appel à fonction déprécié dans un fichier relatif à un plugin multi-domaine, (mu-plugins.php). Jusque là tout va bien; La dernière ligne se trouvait dans un autre fichier généré par ce même plugin : sunrise.php C'est la que ça va plus : mes sites sont toujours des pages blanches mais l'erreur a changé biensur.
Voilà la ligne en question :
$dm_domain = esc_sql( $_SERVER[ 'HTTP_HOST' ] );
L'erreur obtenue :
Fatal error: Call to undefined function esc_sql() in /home/nedhfr/public_html/wp-content/sunrise.php on line 11

J'ai fait des recherches, essayé plusieurs choses, rien n'y fait, je suis en mode panik !
Merci de votre aide

Mammouth du PHP | 2703 Messages

25 mars 2016, 00:05

c'est pas un problème de fonction dépréciée, mais d'une fonction non définie, que php ne trouve pas. pourquoi, je n'en ai aucune idée.

Petit nouveau ! | 9 Messages

25 mars 2016, 00:18

J'ai dit fonction dépréciée parce qu'au départ j'ai du changer toutes les lignes contenant la fonction : wpdb::escape() -----par------ esc_sql()
Ca a fonctionné apparemment partout sauf dans un fichier qui génère cette erreur;

Voila le fichier en question généré par le plugin qui gère le multi-domaine soit : sunrise.php

<?php
if ( !defined( 'SUNRISE_LOADED' ) )
define( 'SUNRISE_LOADED', 1 );

if ( defined( 'COOKIE_DOMAIN' ) ) {
die( 'The constant "COOKIE_DOMAIN" is defined (probably in wp-config.php). Please remove or comment out that define() line.' );
}

// let the site admin page catch the VHOST == 'no'
$wpdb->dmtable = $wpdb->base_prefix . 'domain_mapping';
$dm_domain = esc_sql( $_SERVER[ 'HTTP_HOST' ] );

if( ( $nowww = preg_replace( '|^www\.|', '', $dm_domain ) ) != $dm_domain )
$where = $wpdb->prepare( 'domain IN (%s,%s)', $dm_domain, $nowww );
else
$where = $wpdb->prepare( 'domain = %s', $dm_domain );

$wpdb->suppress_errors();
$domain_mapping_id = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->dmtable} WHERE {$where} ORDER BY CHAR_LENGTH(domain) DESC LIMIT 1" );
$wpdb->suppress_errors( false );
if( $domain_mapping_id ) {
$current_blog = $wpdb->get_row("SELECT * FROM {$wpdb->blogs} WHERE blog_id = '$domain_mapping_id' LIMIT 1");
$current_blog->domain = $_SERVER[ 'HTTP_HOST' ];
$current_blog->path = '/';
$blog_id = $domain_mapping_id;
$site_id = $current_blog->site_id;

define( 'COOKIE_DOMAIN', $_SERVER[ 'HTTP_HOST' ] );

$current_site = $wpdb->get_row( "SELECT * from {$wpdb->site} WHERE id = '{$current_blog->site_id}' LIMIT 0,1" );
$current_site->blog_id = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE domain='{$current_site->domain}' AND path='{$current_site->path}'" );
if( function_exists( 'get_current_site_name' ) )
$current_site = get_current_site_name( $current_site );

define( 'DOMAIN_MAPPING', 1 );
}
?>



These errors are common with third-p

Petit nouveau ! | 9 Messages

25 mars 2016, 00:24

Voilà les fichiers qui étaient incriminés. La correction fonctionne dans mapping.php mais pas dans sunrise.php et je ne suis pas capable de comprendre pourquoi.

nedhfr@nova [~/public_html/wp-content]# grep -ri 'wpdb->escape' *
mu-plugins/domain_mapping.php: $domain = $wpdb->escape( $_POST[ 'domain' ] );
mu-plugins/domain_mapping.php: $domain = $wpdb->escape( $_GET[ 'domain' ] );
mu-plugins/domain_mapping.php: $domain = $wpdb->get_var( "SELECT domain FROM {$wpdb->dmtable} WHERE blog_id = '{$wpdb->blogid}' AND domain = '" . $wpdb->escape( $_SERVER[ 'HTTP_HOST' ] ) . "' LIMIT 1" );
sunrise.php:$dm_domain = $wpdb->escape( $_SERVER[ 'HTTP_HOST' ] );

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

25 mars 2016, 03:44

Bonjour,
J'ai dit fonction dépréciée parce qu'au départ j'ai du changer toutes les lignes contenant la fonction : wpdb::escape() -----par------ esc_sql()
Ca a fonctionné apparemment partout sauf dans un fichier qui génère cette erreur;
Probablement , parce que la fonction esc_sql() qui n'est pas une fonction standard de HPHP est défini dans un fichier qui n'est pas inclus dans le fichier qui te pose problème ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 9 Messages

25 mars 2016, 09:22

Merci mais c quasi du chinois pour moi, j'exagère mais mon niveau PHP est quasi nul j'ai essayé de comprendre par logique mais je ne sais pas du tout comment fixer ça. Et surtout pourquoi ? puisqu'au départ, je n'ai fait que remplacer un code déprécié par un plus récent, en quoi cela change t'il la fonction ?!?!? Je ne sais plus quoi faire, G 4 sites out et le dernier à présenter début avril, pouvez vous m'aider svp. Je suis perdue. G cherché une version plus récente du plugin mais je n'ai récupéré que mes pages d'accueil, le reste des sites en erreur 404. Je tourne en rond... Je suis revenue à la version avec l'erreur de départ avec le site principal : page blanche et les autres visibles mais avec un bandeau d'erreur en haut de page :
Notice: wpdb::escape is deprecated since version 3.6! Use wpdb::prepare() or esc_sql() instead. in........
Notice: get_current_site_name is deprecated since version 3.9! Use get_current_site() instead. in ..........
Quelqu'un peut-il m'aider à corriger ça ! C étonnant que je ne trouve pas d'autres personnes ayant ce problème en multi-site étant donné que la majorité utilise ce plugin(mu-multidomain) pour la gestion des domaines sur WP donc ce devrait être un problème récurrent depuis un an au moins.
Je n'ai trouvé qu'un article traitant de ça d'où le esc_sql------ j'ai aussi essayé wpdb::prepare() en vain.
https://www.webniraj.com/2013/08/05/wor ... on-errors/

Petit nouveau ! | 9 Messages

25 mars 2016, 09:43

J'ai un début de réponse ici :
Open the file sunrise.php (it should be in wp-content/sunrise.php), and locate the following line:
$dm_domain = $wpdb->escape( $_SERVER[ 'HTTP_HOST' ] );
And change it like shown below with an underscore.
$dm_domain = $wpdb->_escape( $_SERVER[ 'HTTP_HOST' ] );
Refresh the page in your browser and the error should be gone for good.

Mais il reste une dernière erreur en header et site principal toujours en page blanche, voici l'erreur :

Notice: get_current_site_name is deprecated since version 3.9! Use get_current_site() instead. in /home/nedhfr/public_html/wp-includes/functions.php on line 3578
J'ai essayé _____ get_current_site()___________ ça ne fonctionne pas !!! encore une fois, je sèche !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

25 mars 2016, 13:13

ça ressemble quand même à du bidouillage ce que tu fais...
Tu es sûr que tes versions de Wordpress et de tes plugins sont tous à jour ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 9 Messages

25 mars 2016, 13:21

Oui tout est parfaitement à jour.
Ce problème survient suite à une mise à jour automatique de WP. Le plugin mu-domain mapping utilisait une fonction dépréciée. Après recherche et avoir suivi les conseils du développeur et de mon FAI, effectivement les erreurs ont disparu mais mon site principal affiche toujours page blanche quant aux sites secondaires ils n'affichent que la page d'accueil, les autres pages sont en 404

Petit nouveau ! | 9 Messages

25 mars 2016, 13:25

Quand aux plugins et thèmes, j'ai commencé par tout désactiver pour isoler le pb et il n'y a que ce plugin qui soit en cause. Tout a commencé par cette fonction dépréciée ! une fois corrigée, je ne récupère pas mes sites, juste je ne vois pas de messages d'erreur !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

25 mars 2016, 13:48

Pour la page blanche, il faut regarder dans les logs :
faq-tutoriels/page-blanche-script-php-c ... 73178.html
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 9 Messages

25 mars 2016, 14:41

J'ai trouvé un fichier error_log à la racine de mon serveur, est ce bien le journal d'erreurs , si oui, je ne suis pas plus avancée, je ne comprends rien !

Petit nouveau ! | 9 Messages

25 mars 2016, 17:20

Merci @rthur, le pb est résolu. mon fichier .htaccess était vide, je ne sais pas pourquoi ! les précédentes erreurs étaient déjà corrigées par mes précédentes manip. La page blanche était due au .htaccess. Merci de votre aide !