2009-04-24 5 views
2

Avant la mise à jour la version PHP que je l'habitude d'être en mesure d'inclure des fichiers comme suit sans spécifier la racine du document:

<?php include '/absolute/path/to/files/file1.php'; ?> 

Cependant, je dois maintenant inclure le même fichier comme suit:

<?php include $_SERVER['DOCUMENT_ROOT'].'/absolute/path/to/files/file1.php'; ?> 

Quel paramètre php.ini aurait pu remplacer le comportement précédent?

+0

Linux: RHEL 5 PHP: PHP Version 5.2.9 Messages d'erreur que je reçois sont: PHP Warning: require (/conf/common.php): failed to open stream: Aucun fichier ou répertoire dans/var /www/vhosts/DOMAIN/httpdocs/tell-a-friend-fns.php en ligne 63 PHP Erreur fatale: require(): Echec de l'ouverture requise '/conf/common.php' (include_path = '.:/usr/share/pear:/usr/lib/php:/tmp ') dans /var/www/vhosts/DOMAIN/httpdocs/tell-a-friend-fns.php à la ligne 63 –

Répondre

3

Y compris un chemin absolu devrait fonctionner de la même manière tout droit PHP 5.2.9 (ont pas essayé 5.3, mais shouldn » t changer). Puisque vous spécifiez un chemin absolu, la directive include_path n'a aucune incidence.

Pouvez-vous fournir plus d'informations? La version de PHP, la plateforme et l'erreur que vous récupérez sont un bon début.

Linux: RHEL 5 PHP: Version PHP 5.2.9 Error Messages I get are: PHP Warning: require(/conf/common.php): failed to open stream: No such file or directory in /var/www/vhosts/DOMAIN/httpdocs/tell-a-friend-fns.php on line 63 PHP Fatal error: require(): Failed opening required '/conf/common.php' (include_path='.:/usr/share/pear:/usr/lib/php:/tmp') in /var/www/vhosts/DOMAIN/httpdocs/tell-a-friend-fns.php on line 63

Bon, il semble que votre application vit dans/var/www/vhosts/DOMAIN, et vous cherchez /conf/common.php, non? Je ne sais pas si votre fichier se trouve dans/conf/ou s'il se trouve dans/var/www/vhosts/DOMAIN/conf/(je suppose que ce dernier, avec les informations données). Si c'est dans/conf /, assurez-vous que votre utilisateur de serveur Web peut lire ce répertoire. Si ce n'est pas le cas, remplacez votre inclusion par /var/www/vhosts/DOMAIN/httpdocs/conf/common.php.

Mieux encore, vous pourriez être en mesure de faire include '../conf/common.php, selon l'endroit où commun.php vit en relation avec votre script principal pour la page demandée. Rappelez-vous que tout chemin donné avec un «/» en tête est absolu par rapport au système de fichiers, et non à la racine du document du serveur Web. Tout chemin donné sans "/" est supposé être un chemin relatif, relatif à votre script d'exécution (pas le fichier courant). Ma conjecture est que l'ajout de $ _SERVER ['DOCUMENT_ROOT'] à votre chemin change le chemin absolu vers un chemin relatif. Je n'ai aucune idée de la raison pour laquelle un chemin absolu agirait comme un chemin relatif de pré-mise à niveau, à moins que vous n'optiez dans un environnement emprisonné (commun avec des hôtes virtuels) qui a été retiré pendant la mise à niveau.

+1

Comme vous l'avez deviné, je pense que lorsque mon fournisseur d'hébergement a mis à jour la partie plesk/var/www/vhosts/DOMAIN/httpdocs a été perdue à partir du include_path. Après l'avoir ajouté à include_path, tout est redevenu normal. Merci! –

3

J'utilise toujours quelque chose comme:

require(dirname(__FILE__) . '/../../subdir/somefile.php'); 

Il vous donne un chemin relatif du fichier en cours, mais résout un chemin absolu (en utilisant dirname sur le fichier en cours).

+0

Merci pour le conseil pratique. –