Partage
  • Partager sur Facebook
  • Partager sur Twitter

Où ranger les fichiers ajax

    15 mai 2022 à 13:41:25

    Bonjour à tous,

    J’ai créé un projet qui contient 2 dossiers: « App », qui contient tous les fichiers privés(controllers, vues), et « public » qui contient tous les fichiers publics (css, js, index.php).

    J’ai démarré mon projet sur un serveur local comme ceci :

    php -S localhost:2005 -t public

    Ainsi, on ne peut plus accéder au dossier App depuis le navigateur mais je ne peux donc plus accéder aux fichiers se situant dans le dossier App depuis fichiers JS qui, eux, se situent dans le dossier public.

    J’ai jugé plus sécurisé de placer mes fichiers PHP appelés via AJAX dans un dossier Ajax situé dans App.

    Par conséquent, je ne peux plus faire mes requetes AJAX car j’ai: d’une part, les fichiers PHP dans le dossier privé et, d’autre part, les fichiers JS qui font les requêtes AJAX dans le dossier public.

    Quelqu’un aurait-il une solution sécurisée et professionnelle ?

    • Partager sur Facebook
    • Partager sur Twitter
      18 mai 2022 à 8:57:20

      Hello,

      Ajax n'est pas la pour accéder à un fichier privée, ajax c'est permettre de faire une requête http de manière asynchrone.

      Si tu peux accéder via une URL à ton fichier de traitement via une requête HTTP classique alors le js via ajax pourra y accéder.

      Si je prends l'exemple suivant :

      <?php
      
      // Fichier public/index.php
      $method = strtolower($_SERVER['REQUEST_METHOD'] ?? 'get');
      $uri = trim($_SERVER['REQUEST_URI'] ?? '', '/');
      
      if ($method === 'get') {
          if ($uri === '') {
              // Affichage de la page d'accueil
          }
      } else if ($method === 'post') {
          if ($uri === 'ajax/article') {
              require __DIR__ . '/../app/ajax/post.php';
          }
      }
      
      
      // --------------------------------------------------
      // Fichier app/ajax/post.php
      
      // Ma requête AJAX
      $_POST = json_decode(file_get_contents('php://input'), true);
      $title = $_POST['title'] ?? null;
      
      // Traitement ...
      
      header('Content-Type: application/json');
      echo json_encode(['message' => 'Article créé !']);
      
      
      // --------------------------------------------------
      // Fichier JS
      const sendArticle = document.getElementById('send')
      
      async function sendNewPost() {
          const response = await fetch('/ajax/article', {
              method: 'POST',
              headers: {
                  'Accept': 'application/json',
                  'Content-Type': 'application/json'
              },
              body: JSON.stringify({ title: 'Titre', content: 'Contenu' })
          })
          const { data } = await response.json()
          alert(data.message)
      }
      
      sendArticle.addEventListener('click', sendNewPost)
      


      Comme tu peux le voir, l'ajax passe par le fichier PHP qui est dans le dossier public mais même sans ajax, si j'avais juste fait un formulaire avec comme méthode la valeur "POST" et comme action la valeur "/ajax/article" ça aurait aussi fonctionné. Sauf que le navigateur aurai traiter le retour json et non un retour HTML classique.

      Je te conseil aussi si ce n'est pas le cas, de voir le principe du "routeur" qui permet de choisir la bonne action (le bon fichier, la bonne fonction ou bien encore la classe avec la bonne méthode) en fonction de l'url demandé.

      En résumé :

      Que tu fasse dans ton navigateur (dans la barre d'adresse) : https://openclassrooms.com/ ou que depuis le js tu fasse : "fetch('https://openclassrooms.com')" ou bien dans ton terminal avec curl que tu fasse "curl -X GET https://openclassrooms.com"  il n'y a pas de différence pour le serveur (à quelque exception près). Le principe reste le même et c'est de faire une requête HTTP.

      • Partager sur Facebook
      • Partager sur Twitter

      Où ranger les fichiers ajax

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown