Frage

Ist es eine gute Praxis, um Ihre PHP-Anwendung Bootstrap. Ich fand zwei Möglichkeiten, um meine PHP-Anwendung Bootstrap. Brauchen Sie einige Vorschläge, die einen besseren Weg.

Erste.
Definieren Sie eine Konstante für die Ordnerstrukturen

$controllerPath = 'controller';
define('CONTROLLER', str_replace('\\', '/', realpath($controllerPath)).'/');

//usage
require_once CONTROLLER . 'somecontroller.php';

Zweite
Unter Verwendung von ini_set gesetzt Include Pfad zur Anwendung root

$rootPath = $_SERVER['DOCUMENT_ROOT'];
$includePath = ini_get('include_path');
ini_set('include_path', '.'.PATH_SEPARATOR.$rootPath.PATH_SEPARATOR.$includePath);

//usage
require_once 'controller/somecontroller.php';

Bitte sagen Sie mir, welche ein besserer Weg.

Im Fall einer Hochlast-Anwendung, die die beste Methode wäre ??

War es hilfreich?

Lösung

Verwenden Sie ini_set es in das Verzeichnis zu setzen -above- Ihre Anwendung. Das, warum Sie die Zeichenketten in verwenden können Ihre erfordern Aussagen. Darüber hinaus erleichtert es die Wiederverwendung Code zu verwenden,

require 'coolapp/class/Model.php'
require 'coolapp/display/Router.php'
require 'spinoff/display/JsView.php'
// etc

Es ist ähnlich wie die Idee in java vollqualifizierter Einfuhren von com.whatever.app.more mit, oder wie in Python alle ein apps Einfuhren in Bezug auf diese App absolut sein sollten.

Re: Hochbelastungs

Wenn Sie viele tausend Dateien laden, es ist die Zeit wahrscheinlich Dateien enthalten nimmt, ist kein Flaschenhals. Aber, wenn es der Fall war, haben Sie ein paar Optionen. Eine davon ist APC, die die Ergebnisse der include im Speicher zwischenspeichert. Ein weiterer Grund ist alles von einer einzigen Datei zu laden, ähnlich wie Javascript-Dateien verknüpft werden in eine für eine bessere Leistung (zufällig, APC hat eine Funktion, die Ihnen diese Informationen gibt). APC ist wirklich einfach zu installieren und ist vollständig transparent, für einen Schub von ~ 50% bessere Leistung .

Andere Tipps

Bessere Nutzung absolute Pfade als PHP lassen Sie die Datei in einem der angegebenen umfassen Pfade finden.

So neige ich dazu, zum ersten Weg, um eine Konstante verwendet, die den absoluten Pfad zur Anwendung Wurzel hält.

Das ist, was ich tue:

  • Legen Sie ein / Verzeichnis am Anfang des Dokuments Wurzel enthält (oder was auch immer Sie es nennen wollen) für alle Klassen, Hilfsfunktionen und so weiter;
  • Machen Sie es so die / include nicht unter Verwendung von mod_rewrite serviert wird;
  • Haben Sie eine Datei dort genannt, sagen wir, setup.php, die entsprechenden ini-Parameter aufstellt, Pfade, etc;
  • Thhat Datei wird auf jeder Seite durch die relativen Pfad enthält; und
  • Alles andere kann dann verlassen sich auf die Einstellungen es geschaffen hat.

Beispiel Rewrite-Regeln für Top-Level-.htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /include/
RewriteRule ^include/ - [R=404,L]

Ich könnte off leicht sein. Ich habe nicht meine Standardregeln praktisch. Sie werden bemerken, dass es sich um ein 404-Fehler, das ich schaffen, anstatt 403 (Verboten). Das ist gewollt. Wenn Sie zu einem System anmelden sagt es nicht „unknown user“ oder „Passwort falsch“, weil, dass Sie etwas erzählt. Ich würde eher behaupten, es gab keine / include überhaupt nicht sagen, es ist da, aber man kann einfach nicht hinschauen.

An diesem Punkt können Sie Setup alles, was Sie so den Rest des Codes benötigen kann nur tun:

require 'Class.php';

oder sogar ein __autoload() definieren, so dass es automatisch passiert.

Hier ist ein Beispiel für meine Bootstraploader:

if (!defined('APPLICATION_PATH')) {
    define('APPLICATION_PATH', realpath(getcwd() . '/../application'));
}

/**
 * Add the APPLICATION_PATH and the library dir to the include_path
 */
set_include_path(get_include_path() . PATH_SEPARATOR . APPLICATION_PATH . PATH_SEPARATOR . realpath(APPLICATION_PATH . '/../library'));

/**
 * Load the file loader to setup the class autoloader
 */
include_once 'Loader.php';
if (!class_exists('Loader')) {
    die('Could not load class loader.');
}

spl_autoload_register('Loader::autoload');

Ich würde persönlich mit dem zweiten Weg gehen. Ich habe gelernt, die include_path zu lieben: es wahrscheinlich von der Suche in viele Verzeichnisse treffen einige Leistung, aber ich bezweifle, wäre es von Bedeutung sein. Es verhindert auch Fehler vergessen den Weg konstant ist.

Auf einer seitlichen Anmerkung ich meine Controller setzen, usw. in /application/, und haben einige Bibliotheken in /library/. Das alles geht über dem Web-Root. Es verhindert vollständig die Benutzer Zugriff auf diese Dateien, die Sie sonst nehmen müssen Vorkehrungen gegen, wenn Sie alles unter dem Dokument-Root haben. Wenn Ihr Host dies unterstützt (einige gemeinsamen Rechner nicht) nutzt es!

Update

  

Im Fall einer Hochlast-Anwendung ist es gut mit der zweiten Methode zu gehen ??

Meiner Meinung nach, wenn Sie ein Auge auf halten sind, was in Ihrem include_path ist (zum Beispiel auf meiner Windows-Dev-Maschine habe ich alle möglichen da drin, dass ich nicht brauche: SQL Server, Rubin etc.) und waren auf Streifen aus irgendetwas nicht benötigt dann wäre das zweite Verfahren in Ordnung sein.

Eine andere Sache, die Sie tun können, ist die include_path am Ende des Skripts Dump und harte Code in Ihre php.ini-Datei.

Wirklich, though. Ich glaube nicht, dies zu einem Engpass in der Systemleistung sein wird. Verwenden Sie, was für Sie einfacher ist.

Haben Sie Performance-Probleme auf einer Website haben Sie laufen oder sind die Vorsorge Sachen? Ich kann sehen, warum Sie wollen würde preoptimise (ich habe mich daran zu hindern, es zu tun), aber ernst. Deal mit diesen Fragen, wenn sie entstehen. Wenn Sie sind in der glücklichen Lage mit ihm einen beliebten Ort viel mit dann. Am Ende des Tages, es ist nicht ein Alptraum, wenn Sie ein paar requires zu ersetzen haben.

Ich ziehe den zweiten Weg - verwendet es auf einem großen PHP-Projekt und haben es sehr genossen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top