Question

problème étrange avec php sur windows ... mon application charge un fichier « de base » qui charge un fichier de paramètres, les registres charge automatiquement, ne l'initialisation, etc. en haut du fichier de base que j'ai include_once ( « config.php ») ; cela fonctionne très bien pour quoi que ce soit dans le répertoire courant, si j'inclure le fichier de base à partir d'un répertoire distinct mais il silencieusement ignore include du fichier de configuration ... quelqu'un a vu cela auparavant?

/webroot/core.php

<?php
  require_once "config.php";
  //register autoloads
  //do some initialization... standard stuff
?>

/webroot/config.php

<?php
  define("WEB_ROOT","/webroot");
  define("DB_USER","root");
  // ... more stuff...
?>

/webroot/admin/index.php

<?php
  require_once("../dbconnect.php");
  echo WEB_ROOT;
  // print string literal WEB_ROOT rather than value in config.php
?>

Je crois comprendre que les opérations de fichiers sont relatives au répertoire du fichier qui fait la demande, ne devrait pas le require_once ( « config.php ») sélectionnez le fichier par rapport à core.php? Ce code fonctionne exactement comme je vous attendez sur un Mac ou Linux, mais pas du tout sur les fenêtres, (si je change le besoin d'utiliser le chemin complet ou ../, cela fonctionne)

La vraie folie est que le require_once ( « config.php ») ne jette pas d'erreur, mais aucun du code est exécuté à l'intérieur!

Était-ce utile?

La solution

Si PHP ignorer silencieusement des erreurs, essayez de mettre en tête de fichier qui est demandé:

ini_set('display_errors', 'On');
error_reporting(E_ALL);

Maintenant toutes les erreurs doivent être visibles.

Alors la meilleure pratique (selon moi) est dans le fichier qui est demandé (dans aucun des fichiers inclus) définir une constante avec le chemin du système de fichiers complet pour racine de l'application. Donc, en index.php si racine de l'application est /webroot/admin:

define('APP_DIR', dirname(__FILE__));

Après que lorsque vous incluez quelque chose, utilisez cette constante. Si la structure du répertoire est:

/webroot/
    admin/
        index.php
    config.php
    core.php

Et vous voulez inclure dans config.php index.php:

require_once APP_DIR . '/../config.php';

Dans core.php d'inclure config.php serait:

require_once APP_DIR . '/../config.php';

Et ainsi de suite.

Utilisation de chemins de système de fichiers absolus empêchera toute ambiguïté.

Autres conseils

Si vous voulez inclure un fichier en utilisant un chemin relatif au fichier faisant l'inclusion, vous aurez à préfixer le chemin complet, comme ceci:

<?php
require_once(dirname(__FILE__) . "/config.php");
?>

Peut-être que vous utilisez dans de restriction? Pour tenter d'empêcher certains scripts malveillants, PHP a un « mode sans échec » qui, entre autres, les limites où les fichiers peuvent être chargés à partir. Si xampp avait cette activé par défaut que vous pourriez avoir exécuté en elle.

Vous pouvez également vérifier votre logs d'erreur de serveur Web pour voir s'il y a des indications de là l'échec (et activer le rapport d'erreur, de préférence à E_ALL, jusqu'à ce que vous obtenez la question triée).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top