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 :

Architecture d'un projet PHP partagé entre plusieurs domaines


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Architecture d'un projet PHP partagé entre plusieurs domaines
    Bonjour,
    L'an dernier j'ai créé un formulaire PHP (enquête de satisfaction client) qui, bien que n'étant probablement pas fait dans les règles de l'art (premier projet PHP depuis bien longtemps), fonctionne bien.
    L'arborescence de mon projet, hébergée sur un ServerA, me semble correcte :
    -htdocs
    |--projet
    | |--formulaire.php
    | |--submitForm.php
    | |--invalide.php
    | |--succes.php
    | |--echec.php
    |--endpoint.php

    Basiquement, le fonctionnement est :
    - j'envoie une URL du style [https]://enquete.domainA.com/enquete/formulaire.php?cle=ABC.
    - quand on accède à la page, formulaire.php teste la clé. Si elle est invalide (déjà utilisée ou inconnue), je redirige vers la page invalide.php au moyen d'une commande header
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Location: invalide.php?cle=ABC");
    - si la clé est valide, on remplit puis valide le formulaire. Au submit, j'appelle submitForm.php qui reteste la clé (pour éviter les doubles réponses), avec redirection en cas de clé invalide. Si la clé est toujours valide, on tente de sauvegarder les réponses via endpoint.php (qui gère la connectivité avec ma db), et selon le résultat du SQL, on redirige vers succes.php ou echec.php, toujours avec des commandes header.

    Tout ceci est stocké sur un ServerA et utilisé depuis un DomainA, ça fonctionne comme attendu depuis un an.
    Mes fichiers PHP sont des bases HTML avec des inclusions de blocs PHP quand c'est nécessaire, rien que du classique je pense.

    Mais aujourd'hui, je dois séparer mes requêtes en 2 parties car ma compagnie a 2 entités distinctes, et il ne veulent plus que les clients de l'entité B reçoivent des mails contenant une URL appartenant au DomainA.
    Le formulaire en lui-même reste le même (il gère déjà les spécificités des 2 entités, logo et liens divers), mais les clients A doivent maintenant avoir une URL [https]://enquete.domainA.com/enquete/formulaire.php?cle=ABC, et les clients B doivent avoir une URL [https]://enquete.domainB.com/enquete/formulaire.php?cle=ABC. Et c'est là que je galère.

    Je pensais pouvoir simplement router mes 2 URLs vers le même set de fichiers PHP via DNS, mais pour une raison qui m'échappe, ça n'est pas possible avec mon hébergeur actuel (et je ne peux pas le changer). Mes connaissances dans ce domaine sont limitées, je ne sais pas en dire plus et je n'ai pas plus d'explications côté hébergeur.
    Mon ServerA a accès à ma db, mais mon ServerB (qui héberge mon DomainB) ne peut pas l'avoir car serveur externe, donc je ne peux pas juste dupliquer mon projet complet sur le second serveur.
    J'ai essayé de faire des appels CURL entre ServerB et ServerA.
    Code PHP de formulaire.php sur ServerA
    Code PHP : 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
    19
    <!DOCTYPE html>
    <?php
        include "../endpoint.php";
     
        $sCle = $_GET['cle'];
        $bInvalid = verifCle($sCle);
        if ($bInvalid) {
            header("Location: invalide.php?cle=$sCle");
            exit();
        }
    ?>
    <html>
        <head>
            ...
        </head>
        <body>
            ...
        </body>
    </html>
    Code PHP de formulaire.php sur ServerB
    Code PHP : 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
    <?php
      function get_url($request_url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $request_url);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $response = curl_exec($ch);
        curl_close($ch);
     
        return $response;
      }
     
      $sSurveyId = $_GET['survey'];
      $sLang= $_GET['lang'];
      $sURL = "https://enquete.domainA.com/enquete/formulaire.php?cle=ABC";
      $sRes = get_url($sURL);
      echo "$sRes";
    ?>
    Ça fonctionne bien pour charger le formulaire, mais ça ne fonctionne pas en cas de redirection, j'obtiens dans ce cas une page blanche. Je n'ai du coup pas testé le submit, je suppose que ça fera la même chose.
    Pour raison de sécurité, je ne peux pas non plus inclure mon endpoint du ServerA dans mes fichiers PHP du ServerB (mauvaise pratique, à éviter autant que possible).

    La dernière idée qui me vient est de remplacer mes différentes pages existantes par un générateur de code HTML dynamique, comme ça je n'aurais plus qu'un point d'entrée sur mon ServerA, et ce générateur retournera tout simplement un code HTML complet selon la validité de la clé ou de la sauvegarde. Ca supprimerait les redirections et donc les pages blanches dans mon DomainB. C'est quelque chose que j'ai déjà fait et qui normalement devrait fonctionner (j'ai quand même un léger doute avec le submitform.php, sauf que je me fasse un petit poC vite fait pour valider).
    Mais avant de tout convertir sous cette forme, je me demande si il n'y aurait pas une solution plus académique de gérer ce genre de cas. Toute idée est la bienvenue.

    J'espère que mes explications sont assez claires, et merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 386
    Points : 797
    Points
    797
    Par défaut
    Bonjour,

    - Vous auriez voulu héberger les formulaires de B dans le serveur A,
    échec DNS.

    - Vous avez évaluer l'hébergement de formulaires pour B dans serveur B,
    avec connexion BDD vers serveur A,
    échec réseau.

    - Serveur B n'a pas de BDD, ou vous ne souhaitez avoir plusieurs BDD à gérer.

    - Vous avez tenté de proxifier les requêtes depuis Serveur B vers serveur A,
    mais échec "ça ne fonctionne pas en cas de redirection, j'obtiens dans ce cas une page blanche"

    Toute idée est la bienvenue.
    Des idées, c'est facile. Des solutions aussi.

    En l'occurrence, plutôt que d'utiliser la librairie php curl,
    je vous suggère de passer par les flux

    https://www.php.net/manual/en/reserv...onseheader.php
    https://www.php.net/manual/en/context.http.php

    C'est sûrement possible avec curl, c'est pas clair vu d'ici.

    Sinon vous pourriez utiliser un client plus classique,
    mais celui ci nécessite php>=7.5
    https://docs.guzzlephp.org/en/stable/overview.html
    ou
    https://symfony.com/doc/current/http_client.html
    mais pour ce dernier je ne connais pas les exigences.

    Autre idée, vos serveurs fournissent des entêtes CORS,
    les vues sont des fichiers HTML/JS/CSS avec des requêtes asynchrone.

    Bonne journée.

  3. #3
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 14
    Points
    14
    Par défaut
    Merci pour ces premières pistes, j'ai pas tout compris mais je vais lire ça tranquillement, voir si je m'en sors avec ça.

Discussions similaires

  1. [WD17] GDS : éléments partagé entre plusieurs projets
    Par R&B dans le forum WinDev
    Réponses: 3
    Dernier message: 23/05/2013, 14h58
  2. Réponses: 1
    Dernier message: 05/03/2008, 23h19
  3. Réponses: 6
    Dernier message: 09/11/2006, 10h29
  4. [POO] Conserver un objet PHP 5 entre plusieurs pages
    Par Invité dans le forum Langage
    Réponses: 24
    Dernier message: 20/05/2006, 14h13

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