c和php的include

这篇文章是关于php和c的杂烩,主要对比下php和c的include的不同(其实并没有什么关联,只是相同的关键字,对比记忆可能好一些),还有就是对比下c的动态库与静态库。

php include

我们在代码中经常需要包含其他的代码或库,这时候就用到了include,例如下面这样:

include "/data/www/index.php";

include(是语言结构,不是函数)被调用的时候,会有两种情况:

  1. 如果后面的参数是文件名,那么他会先去找include_path的设置,如果最终没有找到文件,会有警告。

include_path可以通过下面的方法来设置:

# 方法1
ini_set('include_path', '/data/www');

# 方法2
set_include_path('/data/www');

# 方法3
# 编辑php.ini里面的include_path

include_path的值跟PATH环境变量一致,unix系统用冒号分割,windows系统用分号分割,例如在unix下这样:

include_path=".:/php/includes"

需要注意的是,这里的.,是相对路径的意思,也就是查找当前执行脚本的路径。

  1. 第二种情况下,参数是包含路径的文件,那么不管是相对路径还是绝对路径,都将忽略include_path的设置,直接引入文件。

那么下面两种方法哪个好呢?

# 方法1
include 'a.php';

# 方法2
include './a.php';

首先,方法1代码能执行是因为include_path默认是.:,所以会找到当前目录下的a.php。

我们根据include的执行流程,可以得出方法2的效率会更好,因为不需要去检测include_path设置。include会根据include_path的设置,逐个进行检测,直到匹配上或所有的路径也没有匹配到。

include_path在php.ini内可以直接使用环境变量的值,例如:

include_path = ".:${USER}/pear/php"

c include

在c中我们用下面的写法来引入头文件:

#include <stdio.h>

我们可以通过预处理器(cpp)来验证,执行如下命令:

cpp main.c -o b.i

tail b.i

可以看到b.i里面已经引入了文件内容。

对于头文件(包括标准头文件和自定义的头文件),编译器会查找标准头文件目录,在类unix系统下通常是/usr/local/include(主要放置第三方头文件)和/usr/include下,后者通常放置系统头文件,stdio.h就在这下面。

除了标准库的头文件外,我们自定义的头文件可以这样引入:

  1. 引入绝对路径或相对路径
#include "./include/my.h"

  1. 复制我们的头文件到标准头文件目录,即/usr/local/include下

  2. 在编译的时候指定路径让编译器去加载:

gcc -I/test/include main.c -o main

(完)