OVH Community, votre nouvel espace communautaire.

fonction include et multidomaines


renotm
02/07/2007, 17h23
Pour revenir au sujet je pensais que c'était évident mais à priori non ...

Unserveur mutualisé est grossièrement construit de cette manière :

Code:
\home
   |____ USER1
   |           |____ www 
   |           |____ subdomaine1
   |
   |____ USER2
   |           |____ www
   |           |____ subdomaine1
   |           |____ subdomaine2

...
   |____ USERX
   |           |____ www
   |           |____ subdomaineX
   |           |____ subdomaineY
vous ne pouvez avec votre user (USER1 par exemple) inclure que ce qui est sous votre répertoire perso (/home/USER1/)

tout ce qui est avant le nom de votre user peut changer sans votre intervention. (et même le nom de votre user à priori) il ne faut donc jamais coder cela en dur mais utiliser des fonction php pour le récupérer.

En général il est intéressant de définir dès la première page (index.php en général) une variable ROOTPATH que l'on utilisera toujours par la suite.

renotm
02/07/2007, 17h11
il y a plusieurs choses à préciser dans ton cas.

Le /home.10.7/ signifie que tu es sur le serveur nommé 10.7 mais ca en fait tu t'en moques un peu.

L'idéal est de ne surtout pas coder en dur ce genre d'informations dans tes scripts pour une raison de portabilité. (si demain ton hebergement est migré sur un serveur ou la home se nome /home.x.y ton script ne marche plus)

Voilà un bout de code pondu rapidement qui te permet de faire ce que tu désires :

Code PHP:
  //si le script initial est sous www par exemple.
  
  
$rootPath dirname(dirname(__FILE__)); // on récupère le chemin root (sous le www)
  
$value "monSousDomaine"//sous domaine ou se trouve le script biblio.php
  
$fileSep "/"//(\ sous Dos et / sous unix)
  
$scriptName "biblio.php"// nom du script a inclure ...
  
  
if (!@include($rootPath.$fileSep.$value.$fileSep.$scriptName)) {
      echo 
"
  • Impossible d'inclure le fichier ".$value.$fileSep.$scriptName;
      } 
  • Le problème que tu risques de rencontré est si tu déclares une fonction dans tes scripts. tu vas avoir une erreur de redeclaration de fonction.

    codage
    25/06/2007, 17h51
    Ca y est, j'ai eu une réponse du support à ma question!
    Bingo!

    Quand on a un multidomaine et qu'on veut "partager" des scripts sur plusieurs sites, on peut mettre une adresse interne au serveur dans la fonction include.

    Pour moi c'était :
    /home.10.7/codage/www/biblio.php

    codage étant le nom de mon site auquel sont rattachés les autres
    biblio.php est la bibliothèque de petits scripts que je veux utiliser partout
    10.7, je ne sais pas ce que c'est

    Cette astuce est très intéressante, car vous n'avez qu'un fichier à modifier pour les mini-site qui en dépendent. Pas besoin de le recopier X fois sous ftp.

    Pour faire de ce post une vraie astuce, on aurait besoin d'une vraie explication de texte de quelqu'un d'OVH.

    Merci

    codage
    25/06/2007, 10h30
    Merci rtb pour tes réponses. Ma demande peut effectivement paraître incongrue...

    Ce n'est pas le même site mais c'est le même multidomaine...
    Peut-être peut-on, avec le manager OVH, lier tous les domaines au même fichier index.php mais avec des variables de page différentes :
    site1.com pointe vers index.php?p=1
    site2.com pointe vers index.php?p=2
    site3.com pointe vers index.php?p=3

    Dans ce cas j'arriverai à réutiliser directement le même moteur pour tous mes sites. C'était ça mon objectif, car cela m'évite de recopier x fois le même fichier partout.

    Pour l'instant le Manager demande un dossier de destination sur lequel va pointer chaque domaine. Mais ils sont imperméables entre eux, dommage.

    rtb
    25/06/2007, 10h11
    Je crois bien, et c'est tant mieux, que tu ne puisses pas exécuter un script qui n'est pas sur ton site...

    codage
    25/06/2007, 09h39
    Oui, exactement.
    C'est un autre site, mais c'est dans le même dossier www chez ovh. Il suffirait de remonter deux fois dans l'arborescence pour atteindre la bibliothèque php dont j'ai besoin. Et c'est interdit, apparemment.

    rtb
    25/06/2007, 09h17
    Tu essaies de faire un include d'un fichier biblio.php qui appartient à un autre site ???

    codage
    24/06/2007, 11h25
    Bonjour à tous,
    J'ai une vingtaine de domaines/sites avec le même "moteur" qui est contenu dans un fichier biblio.php que j'appelle avec la fonction include.
    Pour les modifications ultérieures je dois malheureusement ajuster chaque fichier biblio.php dans chaque sous-dossier de chaque domaine. C'est dur et surement idiot de ma part.

    J'ai essayé de faire un include avec une adresse http complète, mais ça donne ça:
    Warning: include() [function.include]: URL file-access is disabled in the server configuration in /home.10.7/codage/www/aenum/index.php on line 17

    Warning: include(http://www.codage.com/biblio.php) [function.include]: failed to open stream: no suitable wrapper could be found in /home.10.7/codage/www/aenum/index.php on line 17

    Warning: include() [function.include]: Failed opening 'http://www.codage.com/biblio.php' for inclusion (include_path='.:/usr/local/lib/php') in /home.10.7/codage/www/aenum/index.php on line 17

    Comment feriez-vous?

    Peut-on contourner l'interdiction d'OVH de faire des include en adresse absolue en utilisant un fichier htaccess?

    Merci pour votre aide.

    Nicolas