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 :

Fonction include par url [PHP 5.6]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut Fonction include par url
    Bonjour, j'ai une question à propos de la fonction include (ou require ou include_once, ou require_once) de php:

    J'ai un fichier script.php qui contient diverses fonctions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    function f1(){
       return 1;
    }
    function f2(){
       return 2;
    }
    ?>
    Depuis un fichier test.php, j'inclus script.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php include('../include/script.php');//notez que script.php est un autre dossier?>
    <html>
    <head></head>
    <body>Test<?php echo f1();?>
    </body>
    </html>
    Tout cela fonctionne très bien.

    Je voudrai maintenant pouvoir inclure mon script.php mais depuis son url,
    j'ai donc créé et redirigé mon nom de domaine comme il faut et script.php est accessible: http://include.nomdedomaine.com/script.php
    j'ai ensuite activé les paramètres allow_url_include et allow_url_fopen sur mon serveur (version php 5.6), en étant contient des problèmes de sécurité que cela pourrait engendrer.

    Mais lorsque je modifie mon fichier test.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php include('http://include.nomdedomaine.com/script.php');?>
    <html>
    <head></head>
    <body>Test<?php echo f1();?>
    </body>
    </html>
    j'ai le message d'erreur: Fatal error: call to undefined function f1()

    J'ai effectué quelques tests:
    en modifiant script.php ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    echo 'script';
    function f1(){
       return 1;
    }
    function f2(){
       return 2;
    }
    ?>
    j'ai bien le mot script qui apparaît, mais ensuite, toujours le message d'erreur: Fatal error: call to undefined function f1()

    J'ai essayé de remplacer mon include() par file_get_contents() et j'ai le même comportement

    Le script.php serait exécuté et pas inséré ?

    J'avoue ne pas comprendre. Auriez-vous une idée ?
    Merci.

  2. #2
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 499
    Billets dans le blog
    1
    Par défaut
    Pas de solution (sorry) mais par curiosité, pourquoi ce besoin ? Le fichier à inclure n'est pas sur le même serveur que le fichier qui le reçoit ?

  3. #3
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 596
    Par défaut
    Salut,

    La fonction include n’autorise pas l'inclusion d'un fichier externe au domaine pour des raisons de sécurités, tu peux modifier ça dans les fichier de conf de php mais à oublier c'est dangereux.
    Tu dois passer par une api ou tu appelles avec une url un script il te retourne une réponse json ou autre, avec guzzle ou le httpClient de symfony https://symfony.com/doc/current/comp...tp_client.html
    Ici je ne vois pas l'intérêt d'avoir les fonctions sur l'autre serveur.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Merci de votre réponse.

    En effet, le fichier à inclure est sur le même serveur que le fichier qui le reçoit.

    Mon besoin est le suivant:
    Voici l’arborescence de mon serveur:
    /home/client/www/include/script.php
    /home/client/www/appli1/index1.php
    /home/client/www/appli2/index2.php
    /home/client/www/appli2/sous_dossier/index22.php
    /home/client/www/appli3/test.php
    en entête des trois fichiers: index1.php, index2.php et test.php
    j'ai besoin d'inclure script.php
    jusqu'à présent j'utilisait donc la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include('../include/script.php');?>
    en changeant le chemin à chaque fois: ../include/script.php ou ../../include/script.php ou ../../../include/script.php.

    Il faut bien entendu compter que mon serveur a bien plus de dossiers, sous-dossiers et fichiers que cela
    et donc si je dois changer de serveur, ou modifier l'arborescence de mes fichiers, je dois passer tous les scripts et modifier le chemin.

    Donc je pensais créer et rediriger un nom de domaine: http://include.nomdedomaine.com/script.php
    qui m'aurait permis de ne pas avoir à modifier tous les fichiers "inclueurs"
    et également d'utiliser un autre serveur plus performant, ou qui ne stockerai que les bases de données, ou pour toute autre raison.

    J'ai tenté d'utiliser $_SERVEUR['DOCUMENT_ROOT'] ou dirname(__FILE__), mais j'ai le même problème en cas de changement d'arborescence.

    Auriez-vous une idée qui permettrait de faire cela ?
    Dois-je revoir ma façon d'inclure mon script.php ?

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    il existe un mécanisme qui résout ce souci c'est l'autoloading
    Enfin, je ne sais pas ce que contient ton fichier script.php

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Merci, je vais explorer cette piste.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/12/2007, 11h10
  2. SQL Server / Fonction définie par l'utilisateur
    Par borgfabr dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/03/2005, 15h14
  3. Parametre par URL
    Par arsgunner dans le forum ASP
    Réponses: 2
    Dernier message: 21/06/2004, 09h53
  4. Fonctions définies par l'utilisateur
    Par DiGueDao dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/06/2003, 11h17
  5. [VB6] fonction d' encodage URL en VB
    Par jeanseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/01/2003, 11h16

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