IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Migration d'un site PHP 5.2 + SMARTY + ADODB


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 21
    Par défaut Migration d'un site PHP 5.2 + SMARTY + ADODB
    Bonjour à tous,
    premier post, beaucoup d'espoir ...

    Je migre un site en PHP 5.2 depuis un serveur IIS 7.0 sur Windows 2008 std (32bits) vers (j'ai essayé pas mal de versions et plusieurs OS alors pour faire simple, ) vers le même environnement sur un autre serveur plus récent.

    Je bloque sur le fait que tout fonctionne parfaitement sur le site d'origine (sauf que l'on va démonter le serveur qui devient obsolète) et que sur le site d'arrivée ça ne fonctionne pas !!!

    Le programme fut développé en 2006 par une personne que je ne connais pas et dont la société à disparu du marché ... Il est réalisé en PHP 5.2 avec SMARTY 2.6.14 et ADODB 4.71 les données sont gérées dans un MS SQL (dans la version originale la version Express et dans la configuration d'arrivée sur la version 2008 de SQL server). La DB a été migrée sans être modifiée par un simple Backup Restore.

    Le programme fonctionne jusqu'à l'affichage du menu d'inscription. En indiquant le nom de l'utilisateur et son mot de passe rien ne se passe alors que j'ai vérifié qu'il s'agissait des bonnes informations. (les noms d'utilisateurs et les mots de passes sont en clair dans la table SQL).

    J'ai donc décortiqué ligne par ligne pour trouver l'endroit où ça "déraille".

    Une fonction FrmLogin() récupère les informations introduites dans le Formulaire installé dans le Template Login.tpl. (J'ai essayé ça fonctionne bien les variables $_POST['login'] et $_POST['pwd'] sont bien remplies des données placées dans le formulaire ...
    FONCTION FrmLogin()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function frmLogin() {
    	if ($_POST['form_type']!='loginFT') return;
    	$user = new user();
     
    	if($user->userLogin($_POST['login'],$_POST['pwd'],&$rsl)) {
    		$user = new user($rsl['Id']);
    		foreach($user as $f => $v) {
    			$_SESSION['user'][$f] = $v;
    		}
    	}
    	else {
    		$error = new error('login');
    		echo $error->msg;
    	}
    	header("location:index.php");
    	exit;
     
    }
    TEMPLATE Login.tpl
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <form id='loginForm' name='loginForm' method='POST' class="none">
    <input type='hidden' id='form_type' name='form_type' value='loginFT'>
    <span style="display:inline">
    	Nom d'utilisateur : <input type='text' id='login' name='login' value=''>
    	Mot de passe : <input type='password' id='pwd' name='pwd' value=''>
    	<input type='submit' id='loginSubmit' name='loginSubmit' value='Connexion'>
    	</span>
    </form>

    Par contre la Fonction FrmLogin() finit par un "header("location:index.php");" qui relance le chargement de la page Index.php et les variables sont alors confiées à $User disparaissent et lors du rechargement de Index.php on revient à zéro comme si rien n'avait été introduit dans le formulaire. Alors que sur l'autre système User$ contient bien les informations nécessaires pour ouvrir la session et afficher le menu de l'utilisateur.

    Je me rends compte que ces informations très succinctes nécessiteront ds compléments d'informations ... je reste bien entendu à votre disposition pour donner les informations complémentaires nécessaires.

    Inutile de dire sue je suis assez "nul" en PHP mais j'espère quand même recevoir de votre part les indications me permettant de passer au dessus de ce problème.

    Je termine en confirmant que je n'ai pas modifié le code qui fonctionne sur le poste d'origine, que la base de données est opérationnelle, que j'ai pu faire des accès en utilisant les procédures du programme en question pour accéder aux données du SQL Server et que de ce côté là tout semble parfaitement opérationnel.

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 608
    Par défaut
    1) Il faut que tu testes si tu rentres dans le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($user->userLogin($_POST['login'],$_POST['pwd'],&$rsl))
    2) on ne sait pas ce que qu'est la variable $rsl, ce qui est étrange parce qu'elle n'est pas déclarée dans frmLogin(), si tu nous a donné tout le code

    3) le header("location:index.php") t'empêche de voir la sortie produite par le code qu'il y a avant, entre autres d'éventuelles erreurs si tu les visualises directement dans le navigateur. Tu peux désactiver cette ligne pour voir. Et le code est incorrect, parce que le header() est fait dans tous les cas, donc tu ne peux pas voir le message d'erreur qui est affiché par le bloc else dans le cas où les codes ne sont pas reconnus

    4) Toujours dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($user->userLogin($_POST['login'],$_POST['pwd'],&$rsl))
    &$rsl devrait être remplacé par $rsl dans les versions supérieures à php 5.2 et provoquera une erreur fatale à partir de 5.4 (le & n'est plus autorisé dans les appels, cf http://php.net/manual/fr/language.references.pass.php)

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 21
    Par défaut
    Merci pour cette réponse NightFall, je vais faire les essais et les recherches nécessaires pour répondre à test différentes remarques.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 21
    Par défaut
    Voici une partie de l'explication pour le point 2.

    Visiblement,la variable $rsl définit si le user est actif (0 ou 1)
    FONCTION userLogin($userLogin,$UserPassword,&$rsl)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    static function userLogin($userLogin,$userPassword,&$rsl) {
    	$query = "SELECT userId as Id " .
    		"FROM users " .
    		"WHERE (userLogin='{$userLogin}') AND " .
    			"(userPassword='{$userPassword}') AND " .
    			"(userActif=1)";
    	$rs = GetRS($query);
    	$rsl=array();
    	if ($rs[2]==false) return false;
    	if ($rs[1]<1) return false;
    	foreach($rs[0]->fields as $field => $value) {
    		$rsl[$field]=$value;
    	}
    	return true;
    }
    pour le point 4 je le sais car j'ai commencé par migrer sur PHP 5.6 et j'ai essayer en supprimant tous les "&" (il y en a 778 très exactement qui donnent l'erreur suivante : " PHP Deprecated: Call-time pass-by-reference has been deprecated ") je suis donc revenu sur la version 5.3 pour être dans une version qui accepte les extensions SQLSRV en 64 bits. Mais le problème était toujours là. Je suis alors revenu vers la version 5.2 (et j'ai du choisir un OS 32 bits ) pour avoir une extension MSSQL et/ou SQLSRV en 32 bits ... donc j'en suis à ma ... je ne sais plus ... combinaison PHP / OS 32/64 / Extension SQL / etc ... pour me trouver toujours bloqué.

    Je vais faire le test en isolant la ligne Header pour voir si j'ai un message ...

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Question bête, as-tu regardé les logs d'erreur? Sur un linux, c'est généralement le fchier error_log, je ne sais pas sur Win.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Il faut aussi comparer la configuration de PHP entre les 2 serveurs pour voir si certaines valeurs ont changé.
    Sur chaque serveur, créer un fichier php, avec pour contenu
    puis compare la section PHP Core des deux configurations.

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 21
    Par défaut
    Oui Tsilefy,

    Je viens encore de refaire des tests en plaçant tous les éléments de configuration dans PHP.INI pour visualiser, enregistrer et suivre tous les messages d'erreur. J'ai configuré un répertoire pour les messages. Sinon par défaut ils vont dans Windows/temp/php-errors.log mais dans mon cas ils sont affichés et aussi copiés dans un fichier log.

    Malheureusement, à part l'avertissement de la dépréciation de l'usage du "&" il n'y a pas d'erreur... de vraie erreur ... ni d'autre avertissement d'ailleurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 10/01/2006, 07h23
  2. Problème changement serveur pour un site PHP
    Par izzy dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 06/01/2006, 11h34
  3. [CKEditor] Qui utilise FCKeditor sur son site php pour config ?!
    Par guy2004 dans le forum Bibliothèques & Frameworks
    Réponses: 62
    Dernier message: 26/10/2005, 18h24
  4. Question pour un site PHP/MySQL et Javascript
    Par DvP dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/09/2005, 08h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo