Pourquoi ne puis-je pas utiliser une variable dans mon instruction require ou include sur XAMPP?

StackOverflow https://stackoverflow.com/questions/1210179

  •  06-07-2019
  •  | 
  •  

Question

Lors du nettoyage de vieux scripts php, j'ai remarqué un comportement étrange avec les instructions require / include lorsque j'essaie d'utiliser des variables.

Sur le serveur live, le code suivant fonctionne correctement.

<?php
$test = "http://localhost/elearning/trunk/mypage.php";
require "$test";
?>

.. mais sur mon installation XAMPP (paquet de base) version 1.6.7, le message d'erreur suivant s'affiche:

Avertissement: require () [function.require]: l'accès au fichier URL est désactivé dans la configuration du serveur dans C: \ Documents and Settings \ nom d'utilisateur \ Bureau \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.php à la ligne 22

Avertissement: Nécessite ( http: //localhost/elearning/trunk/mypage.php ). ) [function.require]: échec de l’ouverture du flux: aucun encapsuleur approprié n’était trouvé dans C: \ Documents and Settings \ nom_utilisateur \ Bureau \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.php on ligne 22

Erreur fatale: require () [function.require]: ouverture impossible: http: // localhost /elearning/trunk/mypage.php '(include_path =' .; C: \ Documents and Settings \ nom_utilisateur \ Bureau \ xampp-win32-1.6.7 \ xampp \ php \ pear \ ') dans C: \ Documents and Settings \ nom d'utilisateur \ Bureau \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.php on line 22

Si je copie + colle http: //localhost/elearning/trunk/mypage.php (directement de l'erreur) dans mon navigateur, mypage.php se charge. Est-ce une erreur dans ma configuration ou mon approche?

Était-ce utile?

La solution

Vous ne pouvez pas utiliser de chemins commençant par http: // sur certains serveurs pour des raisons de sécurité. Ce que vous voulez utiliser à la place est un chemin de répertoire.

Vous pouvez obtenir votre chemin de répertoire actuel en faisant quelque chose comme:
echo $ _SERVER ['DOCUMENT_ROOT'];

qui vous donnera votre chemin de répertoire à partir du dossier racine du serveur. C’est le chemin que vous voulez utiliser pour inclure / exiger des choses.

Si vous n'avez pas bien compris, essayez ceci.

Il existe deux types de chemins:

Chemins du Web:
http://example.com/directory/file.php

Chemins d'accès au répertoire du serveur:
/ home / usr / www / site / html /

Le chemin du répertoire du serveur est l'emplacement où se trouvent vos fichiers sur le disque dur du serveur. Tout comme le disque dur de votre ordinateur, il ne change jamais sauf si vous déplacez les fichiers. Par ailleurs, le chemin World Wide Web (celui que tout le monde utilise pour accéder à votre site Web) peut changer en fonction du domaine que vous utilisez, de la position de votre racine de document, de la réécriture de mod, et plus encore.

Remarque: La racine du document est le répertoire le plus élevé depuis lequel votre serveur sert les fichiers. Donc, si vous aviez index.php dans la racine de votre document, il apparaîtrait comme ceci sur le Web: http://example.com/index.php .

Lorsque PHP recherche un fichier, il utilise le chemin du répertoire du serveur car il est exécuté sur le serveur. Lorsque Javascript, qui fonctionne à partir de l'ordinateur de l'utilisateur, veut rechercher un fichier, il utilise le chemin d'accès World Wide Web pour y accéder, car il n'y accède pas à partir du serveur.

J'espère vraiment que quelque part là-bas, quelque chose a du sens.

Autres conseils

try require "./ mypage.php" pas tout le répertoire exact

PHP n’est pas assez intelligent pour savoir que vous incluez depuis le même serveur lorsque vous utilisez une notation URL de cette manière. Il pense donc que vous extrayez des fichiers d’un serveur séparé (ce qui peut être dangereux).

La configuration de votre serveur est configurée pour interdire le chargement de ces fichiers externes (comme l'indique le message d'erreur "L'accès au fichier URL est désactivé dans la configuration du serveur"), il échoue donc.

Puisque vous êtes sur le même serveur, vous pouvez simplement utiliser des chemins relatifs, comme:

require_once 'mypage.php'

N'utilisez pas un tel chemin ... utilisez un chemin relatif ou absolu.

Exemple

require 'mypage.php'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top