2010-08-23 28 views
1

J'ai le fichier 1.php ayant un require_once pour 2.php (les deux sont dans des dossiers différents). Le problème que j'ai est que 1.php semble magiquement inclure 2.php puisque le chemin de 2.php n'est pas dans 1.php. Juste pour être sûr, j'ai même ajouté un set_include_path ('.') Avant le require_once '2.php', mais ça marche toujours ... Y a-t-il quelque chose d'évident qui me manque ou est-ce bizarre?require_once fonctionne sans inclure path

Edit:

//-- file 1.php 
//-- long list of requires... 
set_include_path('.'); 
echo get_include_path(); 
require_once '2.php'; 

Les travaux ci-dessus et bien en 1.php 2.PHP sont dans des dossiers différents.

+0

Veuillez être plus précis sur les emplacements de tous les fichiers concernés. – VolkerK

+0

Vous avez un code que vous pouvez ajouter? Cela semble étrange. –

+0

@VolkerK - ici, nous avons seulement deux fichiers 1.php et 2.PHP et ils sont à deux endroits différents .. @ Kevin - a ajouté le code .. Merci pour les commentaires .. – pinaki

Répondre

2

Il y a certains comprennent la magie en PHP, je l'ai rencontré avant.
Quelque chose autoload lié, je crois.
Il regarde toujours dans le dossier où réside le fichier avec la classe en cours

+0

hmmm .. cela semble intéressant ... où est-ce que je commence à chercher une magie automatique? – pinaki

+0

@pinaki dunno, je cherchais dans le code source lol :) Dans certains manuel PHP OOP probablement, car autoload est OOP fonctionnalité –

+0

Autoload fait partie de SPL, http://php.net/manual/fr/function.spl-autoload .php –

1

Essayez echo get_include_path() après avoir défini votre chemin d'inclusion vide, il peut être défini ailleurs (comme dans le fichier de configuration du serveur Web).

+0

il y avait une faute de frappe dans la description ... j'ai essayé de mettre un echo get_include_path() .. il liste le set path (.) Dans mon cas .. – pinaki

1

coup long, mais peut-être l'un des autres fichiers ont changé le répertoire inclus travail actuel:

<?php 
echo 'cwd at the beginning of 1.php: ', getcwd(), "\n"; 
//-- file 1.php 
//-- long list of requires... 
set_include_path('.'); 
echo 'include_path: ', get_include_path(), " \n"; 
echo 'cwd: ', getcwd(), "\n"; 
require_once '2.php'; 
+0

: -) ... c'était un de mes premières pensées aussi ... vérifié; ne se produit pas ... – pinaki

+0

'require' et' include' fonctionnent avec le répertoire de travail en cours lors de la recherche de fichiers. Ainsi, si un script place le cwd dans le dossier de 2.php (comme suggéré par VolkerK), le comportement vu se produirait. Une autre option serait, que '1.php' soit inclus par un script vivant dans le dossier de' 2.php', donc le cwd est là en raison de l'invocation initiale. – ZeissS

+0

@ZeissS - J'ai déjà fait un echo getcwd() dans 2.php et ce n'est pas le cas ici ... – pinaki

1

Pour les besoins du raisonnement, si vous mettez un 2.PHP dans le même endroit que 1.php fait la Nouveau fichier inclus à la place de l'ancien?

Pouvez-vous indiquer quelle est la valeur de votre open_basedir?

+0

si je les mets au même endroit, ça marche bien .. Valeur open_basedir dans "aucune valeur" .. J'ai essayé de changer de 2.php à pinaki/2.php dans le require_once et il a échoué ... enfin un peu de santé mentale:) ... – pinaki

1

Peut-être vous avez un fichier avec le même nom que le fichier 2 dans le chemin du fichier 1.

+0

fait en sorte que ce n'est pas le cas ... – pinaki