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 :

Lien relatif dans <script src="source">


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut Lien relatif dans <script src="source">
    Bonjour,

    La balise <script src="forms/1_acc_form.js"> fonctionne en local mais pas en ligne chez 1&1.
    La structure de mes fichiers et de mes répertoires est la suivante:
    1. racine_du_site/fichier_parent
    2. racine_du_site/forms/1_acc_form.php
    3. racine_du_site/forms/1_acc_form.js

    La balise est située dans le fichier 2 qui est inclus dans 1.
    Malgré la prise en compte de toutes les explications sur l'utilisation des liens qui m'ont été données sur ce site ou ailleurs, je ne m'en sors pas. J'ai testé "../forms/1_acc_form.js" mais ça ne marche pas non plus ainsi que diverses combinaisons comme <script src="<?= $_SERVER['SERVER_NAME'] . '.' . dirname($_SERVER['PHP_SELF']) ?>/forms/1_acc_form.js"></script>
    Le site étant une application confidentielle, je ne peux pas diffuser l'URI de façon publique.
    J'aimerais bien ne pas utiliser d'URL absolue car elle est appelée à changer.

  2. #2
    Membre expérimenté

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Points : 1 493
    Points
    1 493
    Billets dans le blog
    1
    Par défaut
    Bonjour
    J'ai testé "../forms/1_acc_form.js" mais ça ne marche pas non plus.
    Ce serait plutôt avec un seul point pour désigner le répertoire courant

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Désolé mais j'ai écrit une bêtise. Ce n'est pas le bon lien qui ne fonctionne pas mais celui-ci:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="../libraries/jsSimpleDatePickr.2.1.js"></script>
    Je reprends donc le problème.
    Le fichier où se situe la balise est dans racine/forms/1_acc_form.php
    Le script JS est dans racine/libraries/

  4. #4
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Points : 760
    Points
    760
    Par défaut
    Salut,

    pour éviter ce genre de souci, je crée une variable du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $URL = "http://monurl.fr"
    et j'inclue mes fichiers en ajoutant cette url
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="<?= $URL ?>/forms/1_acc_form.js">
    Comment ça peut importe d'où le fichier est ajouter, cela fonctionne à tous les coups.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Autre solution : la balise HTML <base>

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <html>
    <head>
        <base href="http://monsite.fr/" />
        <script src="public/js/programme.js" />
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Si je comprends bien les explications du lien donné:
    • Ceci revient à transformer le lien relatif en lien absolu.
    • Il n'est alors plus possible de mettre un lien vers une autre url.

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je n'ai pas testé mais ça m'étonnerait quand même !
    Sinon, comment faire une balise <a href="http://autresite.com">Un autre site</a> ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Je ne m'en sors pas.
    Si j'écris ceci mon script est appelé:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="http://monsite.local/libraries/jsSimpleDatePickr.2.1.js"></script>
    Mais ceci ne fonctionne pas:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    define('SITE_URL', "http://".$_SERVER['SERVER_NAME']);
    ?>
    <script src="<? SITE_URL ?>/libraries/jsSimpleDatePickr.2.1.js"></script>
    <!-- Les deux chaines suivantes sont rigoureusement identiques -->
    <?= SITE_URL ?>/libraries/jsSimpleDatePickr.2.1.js<br/>
    http://monsite.local/libraries/jsSimpleDatePickr.2.1.js

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    $_SERVER['SERVER_NAME'] vaut vraiment "monsite.local" ?
    Et l'application est à la racine web ?

    J'ai le même genre de config sur l'application que je développe (pef) sur mon poste (sous Mageia Linux) et que j'envoie sur le serveur de développement (sous OpenSUSE) :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	define('RACINE', $_SERVER['DOCUMENT_ROOT'].'/pef/');
    	define('BASE', 'http://'.$_SERVER['SERVER_NAME'].'/pef/');
    Sur mon poste (localhost), l'application est située dans /var/www/html/pef/ et la racine web sur mon poste est donc /var/www/html/.
    Su le serveur de dev, l'application est située dans /srv/www/htdocs/pef/ et la racine web est /srv/www/htdocs/.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tant qu'à (bien) faire, on crée un fichier de CONFIG, dans lequel on met :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    define('SITE_URL_WWW', "monsite.local"); // ou "www.mon-site-distant.com"
    define('SITE_URL_HTTP', "http://".SITE_URL_WWW);
    ?>
    Au moins, c'est clair et non modifiable par un tiers...

  11. #11
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Pour CinePhil:
    1) J'ai testé le lien vers une url extérieure (#6) avec la balise <base> et tout fonctionne.
    2) Pour #9, j'ai créé un hôte virtuel, avec wampserver sur localhost et un sous-domaine chez mon hébergeur ce qui fait que $_SERVER['SERVER_NAME'] devrait fonctionner (mais ne fonctionne pas alors que les chaînes générées sont identiques que celles en dur)

    De ce fait, je pense utiliser la balise base, ce qui m'oblige à tester le résultat chez l'hébergeur et reprendre tout les liens de mon site, surtout ceux qui contiennent des "../"

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par moimp Voir le message
    Si je comprends bien les explications du lien donné:
    • Ceci revient à transformer le lien relatif en lien absolu.
    • ...
    Tu as mal compris.

    1- Ca ne "transforme" rien du tout : ça indique quelle "base" prendre pour les URLs relatives.

    2- Evidemment, on peut indiquer des URL externes, puisqu'elles sont forcément en chemin absolu (la "base" ne s'applique pas).

  13. #13
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut Merci
    Merci pour toutes vos explications.
    Je pensais mettre mon application en ligne mais je crois que j'ai encore du boulot pour tout reprendre proprement.

    Je vais donc créer:
    • un fichier de définitions communes
    • un fichier de config local
    • un fichier de config distant

    Pour l'instant j'avais tout dans le même avec des conditions de test local ou distant

  14. #14
    Invité
    Invité(e)
    Par défaut
    Attention : l'usage de la balise <base> n'est pas une obligation, mais un choix, à faire en toute connaissance de cause !

    Perso, je préfère définir des CONSTANTES (comme indiqué dans mon précédent message), et fournir l'URL absolue (pour les images, scripts internes,...).
    C'est mon choix...

  15. #15
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Je ne m'en sors pas. Je m'arrache les cheveux! L'utilisation de la balise base m'oblige à reprendre trop de code. Je fais donc un essai avec une constante ce qui entraîne des erreurs.

    J'ai un répertoire racine/libraries dans lequel j'ai mes fichiers config.php et defines.php et à la racine, j'ai test.php avec le code suivant:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    include('libraries/config.php');
    ?>
    Le fichier config.php contient ce code:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    define('URL_SITE', "http://snc-accomp.local");
    require('http://snc-accomp.local/defines.php');
    //require(URL_SITE.'/defines.php');
    ?>
    Le but est d'incorporer le fichier de config propre à chaque situation locale (sur mon ordi) ou distante (chez hébergeur) ainsi que le fichier defines.php qui contient des paramètres communs. Les lignes 3 ou 4 provoque toutes les deux des erreurs que je ne comprends pas du tout:
    Warning: require(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in C:\wamp64\www\snc_accomp\libraries\config.php on line 12
    Warning: require(http://snc-accomp.local/libraries/defines.php): failed to open stream: no suitable wrapper could be found in C:\wamp64\www\snc_accomp\libraries\config.php on line 12
    Fatal error: require(): Failed opening required 'http://snc-accomp.local/libraries/defines.php' (include_path='.;C:\php\pear') in C:\wamp64\www\snc_accomp\libraries\config.php on line 12
    Qu'est ce que le wrapper et qu'est-ce qui est désactivé?

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il faut arrêter de tout mélanger...

    1- On peut mettre des urls absolues (http://......) pour les balises img, script, video, liens a,...

    l'URL absolue peut être écrite avec une constante PHP, définie une seule fois dans un fichier config.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    define('SITE_URL_WWW', "monsite.local"); // en local, ou "www.mon-site-distant.com" en production !
    define('SITE_URL_HTTP', "http://".SITE_URL_WWW);
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="<?php echo SITE_URL_HTTP; ?>/images/mon-image.jpg" />
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="<?php echo SITE_URL_HTTP; ?>/pages/ma-page.php">Ma page</a>
    2- Mais pas pour include() / require().
    (À cause de : allow_url_include=0, que tu ne peux pas modifier sur le serveur distant)

    Là, on peut utiliser les constantes __DIR__, dirname(__DIR__) pour indiquer le chemin entre le fichier inclus et celui dans lequel il est inclus.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php require(__DIR__.'/libraries/config.php'); ?>
    Dernière modification par Invité ; 13/01/2018 à 12h57.

  17. #17
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Merci pour ta réponse récapitulative. Dur, dur d'apprendre! J'en ai profité pour me documenter sur l'erreur de wrapper.
    Finalement, je m'en suis sorti avec la balise base.

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

Discussions similaires

  1. Problème de liens relatif dans la hiérarchie SharePoint
    Par clem5-9 dans le forum Développement Sharepoint
    Réponses: 4
    Dernier message: 28/05/2010, 15h09
  2. [PHP 5.3] Liens relatifs dans un fichier appellé par include()
    Par oc_alex86 dans le forum Langage
    Réponses: 4
    Dernier message: 15/02/2010, 15h01
  3. [AC-2007] Intégration d'images en lien relatif dans un formulaire continu
    Par Nephyline dans le forum IHM
    Réponses: 2
    Dernier message: 25/08/2009, 09h26

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