c和php的include
这篇文章是关于php和c的杂烩,主要对比下php和c的include的不同(其实并没有什么关联,只是相同的关键字,对比记忆可能好一些),还有就是对比下c的动态库与静态库。
php include
我们在代码中经常需要包含其他的代码或库,这时候就用到了include,例如下面这样:
include "/data/www/index.php";
include(是语言结构,不是函数)被调用的时候,会有两种情况:
- 如果后面的参数是文件名,那么他会先去找
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"
需要注意的是,这里的.
,是相对路径的意思,也就是查找当前执行脚本的路径。
- 第二种情况下,参数是包含路径的文件,那么不管是相对路径还是绝对路径,都将忽略
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就在这下面。
除了标准库的头文件外,我们自定义的头文件可以这样引入:
- 引入绝对路径或相对路径
#include "./include/my.h"
-
复制我们的头文件到标准头文件目录,即/usr/local/include下
-
在编译的时候指定路径让编译器去加载:
gcc -I/test/include main.c -o main
(完)
- 本文作者:吴泽辉
- 本文链接:https://mutex.top/posts/d0eb02a1/
- 发表日期:2019年1月20日
- 版权声明:本文章为原创,采用《知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议》进行许可