PHP daha iyi bir yöntem Bootstrapping?

5 Cevap php

Is it a good practice to bootstrap your PHP application. I found two ways to bootstrap my PHP application. Need some suggestions which is a better way.

First.
Define a constant for the folder structures

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

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

Second
Using ini_set set the include path to the application 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';

Daha iyi bir yol olduğunu söyle lütfen.

In case of a high-load application which would be the best method ??

5 Cevap

Dizin-yukarıda uygulamanız için ayarlamak için ini_set kullanın. Neden sizin gerektiren tablolara dizeler kullanabilirsiniz. Buna ek olarak, bu daha kolay yeniden kodu kullanmak için yapar

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

Tam com.whatever.app.more ithalatını, ya da nasıl python bir apps ithalatın tüm bu uygulama ile ilgili kesin olmalıdır sahip java fikrine Onun benzer.

Re: High load application

Eğer birçok bin dosyaları yükleme sürece, bu dosyaları dahil etmek için gereken zaman muhtemelen bir şişe boyun değildir. Bu durumda ise, ancak, bir kaç seçenek var. Bir hafızada include sonuçlarını önbelleğe APC vardır. Başka bir javascript dosyaları daha iyi performans (tesadüfen, APC size bu bilgiyi veren bir işlevi vardır) için birine birleştirilmiş nasıl benzer tek bir dosya, her şeyi yüklemektir. APC kurulumu gerçekten çok kolay ve ~50% better performance bir destek için, tamamen şeffaftır.

PHP Verilen birinde dosyayı bulmak icar daha iyi kullanılması mutlak yolları yollarını içerir.

Yani uygulama kök mutlak yolunu tutan bir sabiti kullanılarak ilk yolu için eğilimindedir.

Bu benim ne olduğunu:

  • Put bir / böylece tüm sınıflar, yardımcı fonksiyonları ve için belge kök (veya ne olursa olsun onu aramak istiyorum) üstündeki dizin arasında;
  • Yani / dizin mod_rewrite kullanarak hizmet değildir şunlardır yapmak;
  • Vb alakalı ini parametreleri, yolları, kurar diyelim denilen orada bir dosya, setup.php, var;
  • Thhat dosya göreli yolu her sayfası dahil edilir; ve
  • Her şey o yarattı ayarlarına güvenebilirsiniz.

. Üst düzey htaccess için örnek yazma kuralları:

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

Ben biraz kapalı olabilir. Benim standart kullanışlı kuralları yok. Bunu ben yaratmak yerine 403 (Yasak) bir 404 hata olduğunu dikkat edeceğiz. Bu kasıtlı bulunuyor. Eğer sisteme giriş yaptığınızda bu size bir şey söyler çünkü "bilinmeyen kullanıcı" veya "yanlış parola" demiyor. Değil hayır / yoktu iddia tüm dizini dahil ziyade var diyorlar ama sadece ona bakamıyorum ediyorum.

Bu noktada kurulum size kod yüzden kalanını gereken sadece ne yapabilirsiniz:

require 'Class.php';

hatta bir __autoload() tanımlamak bu yüzden otomatik olarak gerçekleşir.

İşte benim önyükleme yükleyicisi bir örnek:

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');

Şahsen ikinci yolu ile gitmek istiyorum. Ben include_path sevmeyi öğrendim: Orada dizinleri çok bakarak bazı performans isabet muhtemelen ama önemli olacağını sanmıyorum. Ayrıca yol sabiti eklemek unutmadan hataları önler.

Bir yan not /application/ vb benim kontrolörleri, koymak, ve /library/ bazı kütüphaneler var. Bu, tüm web kök yukarıda gider. Tamamen size belge kök altında her şey var, aksi takdirde karşı önlem almak zorunda bu dosyaları, erişmesini engeller. Ev sahibi bu destekliyorsa (paylaşılan bazı ana yok) yararlanmak!

Update

Yüksek yük uygulaması durumunda bu ikinci yöntem ile gitmek iyidir?

Eğer ne var bir göz tutmak olsaydı bence include_path (: SQL Server, Ruby vb örneğin, benim Windows dev makinede ben gerekmez orada her türlü var) ve olan ikinci yöntem iyi olurdu o zaman gerekli değildir hiçbir şey şerit.

Yapabileceğiniz başka bir şey php.ini dosyasının içine komut ve sabit kod bunun sonunda include_path dökümü olduğunu.

Gerçekten de. Ben bu sistem performansında bir darboğaz olacak sanmıyorum. Sizin için daha kolay olanı kullanın.

Eğer çalıştırdığınız bir sitede performans sorunları var ya mı bu ihtiyati şeyler olduğunu? Ben ciddiye preoptimise isterdim neden görmek (Ben bunu yaparken kendimi durdurmak zorunda) ama olabilir. Onlar ortaya çıktığında bu sorunları ile uğraşmak. Eğer onunla bir anlaşma popüler site olan şanslı bir konumda olduğunuzda. Birkaç require s değiştirmeniz gerekirse günün sonunda, bu bir kabus değil.

Ben çok ikinci yolu tercih - Büyük bir PHP projesi üzerinde kullanılan ve çok keyif aldım.