文章目錄
  1. 1. 文件目录
  2. 2. 定义文件路径
  3. 3. 解释
  4. 4. 用法
  5. 5. 参考文章

考虑到程序的可移植性,我们需要定义绝对路径的全局变量。下面就让我们来看一下在thinkphp中如何定义一个常量。

文件目录

1
2
3
4
5
6
7
8
9
├─application 应用目录(可设置)
│ ├─controller 控制器目录
│ ├─model 模型目录
│ ├─view 视图目录
│ ├─ ... 更多类库目录
│ ├─common.php 函数文件
│ ├─route.php 路由配置文件
│ ├─database.php 数据库配置文件
│ └─config.php 配置文件

定义文件路径

从目录结构中我们可以看出定义common.php文件供我们写一些公共的函数。所以我们可以在一些文章的变量中。

打开common.php文件,然后开始定义常量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
namespace app;
//初始化
Common::init();
class Common{
/**
* 系统初始化
*/
public static function init() {
//定义全局变量
self::definePath();
}
/**
* 定义路径
*/
static public function definePath() {
//定义常量__ROOT__
$root = dirname($_SERVER['SCRIPT_NAME']);
if ($root == DS) {
$root = '';
}
define('__ROOT__', $root);
// 定义常量PUBLIC_PATH
$publicPath = realpath(ROOT_PATH) . DS . 'public' . '/upload';
define('PUBLIC_PATH' , $publicPath);
}
}

解释

在thinkphp项目加载的时候common.php文件里的函数回加载一次,然后我们在项目中就可以用这些全局变量了。

$_SERVER['SCRIPT_NAME']

让我们来看一下php对这些变量的解释:

$_SERVER is an array containing information such as headers, paths, and script locations. The entries in this array are created by the web server. There is no guarantee that every web server will provide any of these; servers may omit some, or provide others not listed here.

'SCRIPT_NAME' Contains the current script’s path. This is useful for pages which need to point to themselves.

realpath Returns canonicalized absolute pathname.realpath() expands all symbolic links and resolves references to ‘/./‘, ‘/../‘ and extra ‘/‘ characters in the input path and returns the canonicalized absolute pathname.

for Example:

1
2
3
4
5
<?php
echo realpath('/windows/system32');
echo realpath('C:\Program Files\\');
?>

output

1
2
C:\WINDOWS\System32
C:\Program Files

用法

然后我们就可以在存文件的时候用PUBLIC_PATH,当我们拼接文件的时候就可以用__ROOT__这个常量。

参考文章

模块设计
realpath
$_SERVER

文章目錄
  1. 1. 文件目录
  2. 2. 定义文件路径
  3. 3. 解释
  4. 4. 用法
  5. 5. 参考文章