J'ai 3 fichiers: home, échec_atempé, connectez-vous.
Le fichier home and a échoué_atempérez tous référence au fichier de connexion. P>
La chose agaçante est qu'ils jettent une erreur disant que le fichier de connexion ne dit pas exister. La maison jettera une exception si je fais cela, mais échoué_atempérez-vous. p> Incluse_once (".// Sans titre / sanitize_string.php"); p> Et si je fais cela: p> PoliticalForum
->home.php
->StoredProcedure/connect.php
->untitled/sanitize_string.php
->And other irrelevant files
5 Réponses :
faire quelque chose comme exiger (DIRNAME (__ File__). '[Piste relatif ici]'); Code> P>
Voulez-vous dire quelque chose comme ceci: [code] Incluse_once (Dirname ( Fichier B>). "../SToredProcedure/connect.php"); inclure_once (Dirname ( fichier b>). "../ Sans titre / sanitize_string.php"); .. il ne fonctionne pas [/ code]
DirName ( Fichier B>) retournera actuellement le répertoire actuel dans lequel le fichier comportant le code n'existe pas, il suffit d'ajouter un chemin relatif de ce fichier. Pour faciliter, vous pouvez imprimer une valeur du dirname ( fichier b>) et voir ce qui se passe.
Mais cela ne fonctionne pas parfaitement include_once (Dirname ( Fichier B>). "../ STOREDPROCEDURE / UTILISATEUR / LOGIN.PH P"); Quand j'inclus Connexion, cela fait des problèmes ... Votre ligne de code ne fonctionne pas
Voir le commentaire de 'Daeck' Sous la question et de la structure de répertoire d'écriture en question.
mis à jour. Si le dir i> me donne le répertoire que je suis à .. donc si je suis au répertoire "sans titre" sur mon site web et home.php est dans le répertoire principal .. Comment cela aide-t-il si je mets le Nom du répertoire avant le chemin relatif?
choses comme constantes magiques forte> http: // php. NET / MANUEL / EN / LANGUE.CONSTANTS.PREDEFIND.PHP P> Comme indiquez et nécessite des constructions de langue (plutôt que des fonctions), elles n'ont pas besoin de crochets. En règle générale, vous utiliseriez afin que vous puissiez Utilisez quelque chose comme: p> (Utiliser Il vaut la peine d'évaluer le chemin avant de tenter d'exiger que le fichier comme Vous pouvez simplement utiliser des chemins absolus comme: p> realpath () code> et
__ dir __ code> sont vos amis quand il s'agit de créer des chemins dans PHP.
include code> pour inclure les "modèles" (fichiers de sortie) et
nécessitent code> pour inclure des fichiers php tels que des classes. P>
dirname (__ fichier __) code> au lieu de
__ dir __ code> sur php <5) P >
realpath () code> renvoie false si le fichier n'existe pas et tente de
nécessite de faux; CODE> SPAFFS OUT Une erreur PHP. p>
Exiger /home/inc/mysite.com/htdocs/inc/somefile.php
p> p>
Cela ne fonctionne pas aussi: include_once (realpath ("../ Sans titre / sanitize string.php"));
Il a supprimé les erreurs. Mais que si RealPath retourne faux? Cela signifie-t-il que le fichier ne sera pas inclus. Quand Realpath revient-il faux ??
realpath () code> retourne false si le chemin entré car le paramètre n'existe pas, par exemple
realpath ("this / fichier / pas / n'existe pas / n'existe pas / n'existe pas / n'existait pas FALSE - Si le fichier fait b> existe alors, il renvoie le chemin réel sur le fichier donné, de sorte que
realpath (__ dir__. '/ this / fichier / existe / existe / existent'); CODE> pourrait retourner quelque chose comme
/home/mysite.com/htdocs/this/file/does/exist code> - par exemple le chemin effectif complet.
J'ai utilisé essayé et attraper la fonction __AutoLoad..Je n'avait aucun choix ..non idée de savoir comment surmonter ce conflit. Pourquoi un chemin absolu ne travaillerait pas ... Comme ce politique politique / sans titre.
Une autre solution autour d'il peut être de mettre tout votre inclusion dans un seul dossier et de définir cela comme "Inclure le chemin" en utilisant quelque chose comme set_include_path () code> (il y a d'autres façons cependant) ... php.net/manual/fr/funfunction.set-include-path.php < / a>
hmm..sounds intéressants. Il n'y a pas un peu lourd sur le système inclure à nouveau tous ces fichiers et encore chaque fois que je me réfère à ce fichier? Mais toujours, cela crée un problème..quause si je mettez des fichiers à l'intérieur des fichiers, cela signifie que je dois le faire ../../relativepath.php, alors que, pour d'autres fichiers, je devrai faire cela ../RelativePath.php et pour les fichiers dans le répertoire principal ou le même répertoire que j'appelle l'inclusion, je dois faire ce RelativePath.php. De sorte que le chemin relatif est une invention des ordures. Y a-t-il une alternative à cela?
Les autres gars ont répondu correctement à votre question, mais je pensais que j'avais contribué autre chose: Autooloaders. P>
AutoLoaders vous permet de définir une fonction qui comprendra automatiquement certains fichiers, lorsque vous essayez d'utiliser une classe. P>
La documentation est ici et peut l'expliquer mieux que je ne peux pas: http: / /php.net/manual/fr/language.oop5.Autoload.php p>
Recommanderait vraiment les utiliser, vous fera gagner du temps et sera une meilleure pratique. P>
Je sais à leur sujet..Aussi vous démarrez la page que les fichiers sont chargés..vous mettez votre inclusion à l'intérieur d'eux..mais cela ne résout pas le problème à mon quesiton le fait?
Voici trois solutions possibles. Les seconde ne sont vraiment que des contours qui utilisent des chemins absolus de manière intelligente.
1: CHDIR dans le répertoire correct strong> p> Maintenant avant de dire que cela n'est pas portable, cela dépend en fait de la manière dont vous l'appliquez. Voici un exemple qui fonctionne avec Apache: p> Alternativement, à nouveau avec Apache, placez ce qui suit dans votre répertoire racine: p> php_value include_path '/path/to/my/includes/folder:/path/to/another/includes/folder'
Je suis un peu obscur sur la façon dont la première méthode fonctionne. Mais je vais essayer les deuxième et troisième méthodes
J'ai ajouté des commentaires à la première méthode. Pour plus d'informations, voir La page manuelle CHDIR .
Pour les débutants, cela aidera à comprendre. Utilisez simplement les éléments suivants en fonction de votre chemin relatif:
//include sibling files from same directory: include_once('connect.php');
Mon cas est le deuxième scénario, cela a fonctionné pour moi.
Votre question n'est pas très claire. Les fichiers domestiques, échoués et identifiants dans le même répertoire? Pouvez-vous publier votre structure de répertoire? Comment faire exactement la maison et les pages échouées sur lesquelles "se réfèrent" au fichier de connexion? Dans quel fichier le code ci-dessus apparaît-il?
StoredProChedure est mon dossier et il a des fichiers à l'intérieur. Tout comme indiqué .. Le fichier de connexion est que 2 inclure dans celui-ci qui échoue à charger, en fonction de l'endroit où vous les appelez ... Page d'accueil ou Login_atempère Page qui est dans un répertoire différent