8
votes

Y compris un répertoire entier dans PHP ou CLASHCARD pour une utilisation dans PHP inclus?

J'ai un interprète de commandement en PHP. Il vit dans le répertoire des commandes et a besoin d'accéder à chaque commande dans le fichier de commande. Actuellement, j'appelle requis une fois sur chaque commande.

require_once('*.php');

class Interpreter { //etc }


0 commentaires

5 Réponses :


2
votes

Vous pouvez inclure tous les fichiers à l'aide de pourcheche () de
Stockez tous les fichiers Nom en tableau.

$array =  array('read','test');

foreach ($array as $value) {
    include_once $value.".php";
}


0 commentaires

19
votes
foreach (glob("*.php") as $filename) {
    require_once $filename;
}
I'd be careful with something like that though and always prefer "manually" including files. If that's too burdensome, maybe some refactoring is in order. Another solution may be to autoload classes.

6 commentaires

Quel est le danger pour faire quelque chose comme le glob globe ci-dessus?


@Daniel: Il y a une grande chance que vous aurez besoin de nombreuses sources qui ne seront pas utilisées.


Il vous ouvre des vulnérabilités de sécurité si quelqu'un est capable de placer un fichier .php dans l'un des annuaires inclus, éventuellement en exploitant une autre vulnérabilité quelque part. Cela rend également plus difficile de garder une trace de ce qui est inclus où.


@Daniel: J'essaierais d'inclure uniquement les fichiers nécessaires à la conditionntion. Voir ma réponse ci-dessous.


@fabrik n'est pas probable ici, la structure de répertoire est conçue de telle sorte que ce répertoire contient uniquement les fichiers de commande utilisés par cet interprète. Ni plus ni moins.


Ne faites jamais cela ... Traiter avec un énorme code hérité en ce moment et si quelqu'un a fait cela, je pleurerais



8
votes

Vous ne pouvez pas nécessiter que vous ne trouvez pas de caractères génériques, mais vous pouvez trouver programmatiquement tous les fichiers dans ce répertoire, puis les nécessiter dans une boucle xxx

http://php.net/glob


0 commentaires

6
votes

Pourquoi voulez-vous faire ça? N'est-ce pas une meilleure solution pour inclure uniquement la bibliothèque lorsque cela n'ait pas besoin d'augmenter la vitesse et de réduire l'empreinte de pas?

quelque chose comme ceci: p>

Class Interpreter 
{
    public function __construct($command = null)
    {
        $file = 'Command'.$command.'.php';

        if (!file_exists($file)) {
             throw new Exception('Invalid command passed to constructor');
        }

        include_once $file;

        // do other code here.
    }
}


3 commentaires

Sanglant brillant. N'aurait pas pensé à celui-là - plutôt stupide de moi, puisque ma structure de nommée et de répertoire est déjà configurée pour faire exactement cela. Je n'aurais tout simplement pas pensé de conditionnellement compris. Devinez que c'est mon ancien état d'esprit C me causant à nouveau des problèmes ...


Un Solution automatique serait quelque peu plus élégante cependant.


Je suis d'accord, mais seulement si le code à l'intérieur de chaque commande .php est orienté objet.



1
votes

C'est à 2015 maintenant, vous êtes donc probablement en cours d'exécution PHP> = 5. Si oui, comme mentionné quelques fois plus haut, la capacité de l'autoload de PHP est une bonne solution, probablement le meilleur. Il a été créé spécifiquement pour ne pas avoir à écrire une fonction d'utilité pour le chargement automatique. Cependant, comme mentionné dans les documents PHP, __autoload n'est plus recommandé et peut être amorti dans les versions futures. Tant que vous utilisez php> = 5.1.2, utilisez spl_autoload_register < / a> à la place.


0 commentaires