2013-03-01 7 views
1

J'ai un site créé en apache2 (Windows 7), dire que mon DocumentRoot est/monsite/contenuApache chemin parallèle racine du document

mais j'ai aussi inclut dans un répertoire parallèle, disons/monsite/lib

donc mon fichier index.php dit:

require_once("/mysite/lib/myfile.php"); 

mais il ne trouvera pas le fichier parce qu'il prend de la racine du document. il cherche

/mysite/content/mysite/lib/myfile.php instead of /mysite/lib/myfile.php 

et je ne peux pas faire la racine/monsite parce que les fichiers inclus font référence à la racine, monsite/contenu. Des idées sur la façon de contourner cela?

+0

Avez-vous essayer sans la fi première barre oblique – Sam

+0

Utilisez toujours des chemins relatifs lorsque vous en avez besoin. Sinon, votre code ne peut jamais être déplacé! – arkascha

+0

bien, c'est un grand site, et ils sont absolus, donc ne peut pas vraiment changer –

Répondre

1

vous devez changer le chemin d'inclusion dans le fichier php.ini

1

En incluant essayer d'utiliser un nom de chemin complet, de cette façon vous ne serez jamais touché ces problèmes tout en exigeant des fichiers php. Vous pouvez utiliser la constante __DIR__ conjointement avec realpath afin d'établir une sorte de répertoire racine et y compris ce que vous avez besoin.

Supposons que le répertoire racine est quelque chose/public et que vous voulez inclure de quelque chose/libs. En supposant que vous êtes index.php de quelque chose/publique que vous procédez comme suit:

$rootPath = realpath(__DIR__ . "/../"); 
require_once $rootPath . "/libs/somefile.php"; 

Je pense que cela devrait aider votre problème. Sur les systèmes * nix, méfiez-vous du fait que vous avez besoin d'apache pour avoir des droits sur le répertoire libs afin de pouvoir lire à partir de là.

0

L'essence de cette réponse est de trouver la position actuelle index.php et déterminer le chemin de base de votre application, puis en utilisant cette voie de base, d'adressage quoi que ce soit dans votre application relativement et facilement.

Vous pouvez obtenir les informations de php: Les chemins d'accès ci-dessous sont pour une configuration de serveur xampp, vous pouvez (probablement) obtenir des résultats différents mais ils (je l'espère) seront corrects.

$path = str_replace('\\','/',dirname(__FILE__)); 

cela vous donnera serveur chemin relatif index.php qui est par exemple: 'd:/xampp/htdocs/monsite/contenu'

vous pouvez supprimer le 'contenu' par

$path = substr($path, 0, strrpos($path,'/')+1); 

maintenant, vous aurez quelque chose comme ce qui est la racine de votre application:

'd:/xampp/htdocs/monsite /'

maintenant vous pouvez accéder à lib en disant simplement:

require_once($path.'lib/myfile.php'); 

Espérons que cela est utile.

+0

Et j'espère vraiment que je n'ai pas mal compris votre question. :RÉ – Ihsan

0

Ceci est probablement un problème avec votre php.ini.

Créez un fichier dans votre Webroot appelé phpinfo.php avec le contenu:

<?php 
phpinfo(); 

Et rien d'autre. Sauvegarde puis le charger dans votre navigateur web, vous cherchez deux choses

  1. safe_mode
  2. open_basedir

Si safe_mode est, la désactiver. Si open_basedir est autre chose que none, définissez-le sur none. Si vous ne pouvez pas modifier php.ini pour une raison quelconque, vous pourriez être en mesure de mettre cela dans un .htaccess avec:

php_admin_value open_basedir none 

Sources:
http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode-include-dir
http://www.php.net/manual/en/ini.core.php#ini.open-basedir

0

Vous pouvez utiliser quelque chose comme ça, avant d'appeler require_once("myfile.php");:

$base = realpath(dirname(__FILE__) . '/../'); 
$paths = array(
    $base . '/mysite/lib', 
    '.', 
    get_include_path() 
); 

set_include_path(implode(PATH_SEPARATOR, $paths)); 
Questions connexes