2010-05-20 89 views
3

我使用全局常量,像这样:如何在应用程序中定义路径?

/project 
    /application 
     bootstrap.php 
    /public 
     index.php 

的index.php

  • 定义PUBLIC_PATH和APPLICATION_PATH
  • 电话APPLICATION_PATH。 bootstrap.php中

bootstrap.php中

  • 定义LIBRARY_PATH,MODULES_PATH,TEMP_PATH,CONFIG_PATH,...
  • 没有真正的工作

我也想问问,如果有更好的方法来做到这一点?

+0

更好地界定:P – naugtur 2010-05-20 11:37:04

+0

为什么这个问题成为一个社会维基? – 2010-05-20 12:15:13

回答

1

你是说你的申请不公开?无论如何,通常我只是在我的前端控制器(通常index.php)定义了一个ROOT常数是这样的:

define('ROOT', str_replace('\\', '/', __DIR__)); 

或者对旧版本的PHP在哪里__DIR__不可用:

define('ROOT', str_replace('\\', '/', dirname(__FILE__))); 

由于内部结构永远不会改变我只是这样做:

include(ROOT . '/application/libraries/Email.php'); 

相反的:

define('LIBRARY_PATH', ROOT . '/application/libraries'); 
include(LIBRARY_PATH . '/Email.php'); 

污染少。 =)

+0

在我的情况下,PUBLIC_PATH与您所描述的相同: str_replace('\\','/','__DIR__') 应用程序目录旨在位于web根目录(安全措施)之外,因此它需要额外的常量:APPLICATION_PATH – Hemaulo 2010-05-20 12:03:51

+0

@Hemaulo:不是真的......你可以使用'/ ..'你的ROOT'不变。 – 2010-05-20 13:33:01

-1

我打算采用绝对路径,使用$_SERVER['DOCUMENT_ROOT']
当不可能时,我使用相对路径,就像Alix一样。

1

根据您的目录树:

这是一个我将用来装载PHP脚本,基本上你可以将它放在index.php文件或bootstrap.php中

define("PROJECT_DISK_PATH", str_replace('\\', '/', dirname(dirname(__FILE__))) . '/'); 
/* 
Server variables $_SERVER['PHP_SELF'] and $_SERVER['SCRIPT_FILE_NAME'] are both USELESS to 
accomplish this task because they both return the currently executed script and not this included file path. 
*/ 

然后在你的PHP脚本你:

include(PROJECT_DISK_PATH . 'path/to/your/script/somescript.php') 

而这些都是我将用来装载JS/CSS脚本中的页面:

define("PROJECT_DOCROOT_PATH", '/' . substr(PROJECT_DISK_PATH, strlen($_SERVER['DOCUMENT_ROOT'] . '/'))); 
define("PROJECT_HTTP_PATH", "http://" . $_SERVER['HTTP_HOST'] . JPL_DOCROOT_PATH); 

所以,在你的页面,你可以这样做:

<script type="text/javascript" src="<?php echo PROJECT_DOCROOT_PATH; ?>path/to/your/script/somescript.js"></script> 
相关问题