문제

그것은 좋은 연습을 스트랩 PHP 응용 프로그램.내가 발견하는 방법에는 두 가지 부트스트랩 내 PHP 응용 프로그램.필요 몇 가지 제안을 하는 더 좋은 방법입니다.

첫째.
에 대한 상수를 정의 폴더 구조

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

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

두 번째
사용 ini_set 설정함 응용 프로그램 경로를 뿌

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

말해주십시오는 더 좋은 방법입니다.

의 경우에는 높은 하중 적용하는 것이 가장 좋은 방법이 될??

도움이 되었습니까?

해결책

사용 ini_set 를 설정하여 디렉토리에 위-응용 프로그램입니다.왜 당신이 사용할 수 있는 문자열에 필요한 문입니다.또한,그것은 쉽게 사용하는 코드를 재사용

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

그와 비슷한 아이디어에서 java 의 완전한 자격을 갖춘 수입의 com.whatever.app.more, 는 방법 또는 파이썬에서 모든 앱 수입해야 절대와 관련하여 그 응용 프로그램입니다.

Re: 높은 짐 응용 프로그램

지 않는 한 당신이 로드 중 많은 천 파는데 걸리는 시간은 파일을 포함하지 않 병 목입니다.그러나,있었다면 그것이 경우에 당신은 몇 가지 옵션이 있습니다.하나는 APC,캐시하는 결과 include 메모리에 있습니다.다른 로드에서 모든 것을 하나의 파일과 유사하는 방법을 자바스크립트 파일로 연결 중 하나에 대한 더 나은 성과(공교롭게도,APC 있는 기능을 제공 합니다.)APC 은 정말 쉽게 설치가 완전히 투명하고,의 향상을 위해 ~50%더 나은 성능.

다른 팁

PHP가 주어진 경로 중 하나에서 파일을 찾도록하는 것보다 절대 경로를 더 잘 사용하십시오.

그래서 나는 애플리케이션 루트의 절대 경로를 유지하는 상수를 사용하는 첫 번째 방법을 경향이 있습니다.

이것이 제가하는 것입니다:

  • 모든 클래스, 도우미 기능 등에 대해 문서 루트 (또는 호출하려는 모든 것을 호출하려는 모든 것)의 상단에 디렉토리를 넣으십시오.
  • mod_rewrite를 사용하여 /포함 디렉토리를 제공하지 않도록하십시오.
  • 관련 INI 매개 변수, 경로 등을 설정하는 Setup.php라는 파일이 있습니다.
  • thhat 파일은 상대 경로별로 모든 페이지에 포함됩니다. 그리고
  • 그런 다음 다른 모든 것이 생성 한 설정에 의존 할 수 있습니다.

예제 최상위 .htaccess에 대한 규칙을 다시 작성하십시오.

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

나는 약간 벗어날 수 있습니다. 표준 규칙이 편리하지 않습니다. 403 (금지)이 아닌 404 오류입니다. 고의적입니다. 시스템에 로그인하면 "알 수없는 사용자"또는 "비밀번호가 잘못된"이라고 말하지 않습니다. 나는 그것이 거기에 있다고 말하지 않고 디렉토리를 포함하지 않았다고 생각하지만, 당신은 그것을 볼 수 없다.

이 시점에서 나머지 코드가 할 수 있도록 필요한 모든 것을 설정할 수 있습니다.

require 'Class.php';

또는 심지어 정의 __autoload() 자동으로 발생합니다.

내 부트 스트랩 로더의 예는 다음과 같습니다.

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

나는 개인적으로 두 번째 방법으로 갈 것입니다. 나는 include_path를 좋아하는 법을 배웠다 : 아마도 많은 디렉토리를 찾아서 몇 가지 성능이 히트했을 것입니다. 그러나 나는 그것이 중요 할 것이라고 의심합니다. 또한 경로 상수를 포함하는 것을 잊지 않도록 오류가 방지합니다.

부수적으로 나는 컨트롤러 등을 넣습니다. /application/, 일부 라이브러리가 있습니다 /library/. 이것은 모두 웹 루트 위에 있습니다. 사용자 가이 파일에 액세스하지 못하도록 방해하지 않으며 문서 루트 아래에 모든 것이 있으면 예방 조치를 취해야합니다. 호스트가 이것을 지원하는 경우 (일부 공유 호스트는 그렇지 않음)이를 활용하십시오!

업데이트

고로드 응용 프로그램의 경우 두 번째 방법을 사용하는 것이 좋습니까?

내 생각에 당신이 당신의 내용을 주시하려면 include_path (예를 들어, Windows Dev Machine에는 SQL Server, Ruby 등이 필요하지 않은 모든 종류가 있습니다.) 필요하지 않은 것을 제거 해야하는 경우 두 번째 방법은 괜찮을 것입니다.

당신이 할 수있는 또 다른 일은 덤프입니다 include_path 스크립트의 끝에서 Php.ini 파일로 하드 코드를 코딩합니다.

그래도 정말. 나는 이것이 당신의 시스템 성능에서 병목 현상이 될 것이라고 생각하지 않습니다. 더 쉬운 것을 사용하십시오.

실행중인 사이트에 성과 문제가 있습니까? 아니면이 예방 조치가 있습니까? 나는 당신이 왜 최적화하기를 원하는지 알 수 있지만 (나는 그것을하는 것을 막아야한다) 진지하게. 이러한 문제가 발생할 때 처리하십시오. 당신이 인기있는 사이트를 다루는 행운의 위치에있을 때. 하루가 끝나면 몇 가지를 교체해야한다면 악몽이 아닙니다. require에스.

나는 두 번째 방법을 선호합니다 - 대형 PHP 프로젝트에서 그것을 사용하고 그것을 매우 즐겼습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top