php编写函数执行文件的基本操作
php函数mkdir实现递归创建层级目录?
php函数mkdir实现递归创建层级目录?
1
2
3
if(is_dir(dirname($path))){ //判断./1/2/3 已经有次文件目录
return mkdir($path) //这里执行的$path是多少,是整个目录吗,我理解成./1/2/3/4,很疑惑,所以请 //教下大家
}
这里的两个 $path 很显然是一样的,你都知道 dirname($path) 是 ./1/2/3 那么很显然 $path 应该是 ./1/2/3/4 了,为什么后面你又要说一个 ./1/2/3/4/5/6/7 呢
这个递归函数写得不好,而且还是多余的,现在 PHP 的 mkdir 函数已经能建多级目录了,只要第三个参数为 true 就可以:
1
mkdir(./1/2/3/4/5/6/7, 0777, true)
在PHP中如何正确创建函数?
tep 1 gt
php的扩展模块都放在 ext/ 目录下,比如说 snmp模块、mysql模块。 我们要建立自己的模块,就要在ext目录下为自己的模块建一个目录。比如,我们要做一个分析config文件的模块,命名为pconfig模块(parse config的简写),需在ext下建立目录pconfig。将我写好的7个文件copy到该目录下,另外需对主目录下的configure和internal_functions.c作一些修改。
Step 2 gt
是模板文件,用户执行configure时,会调用这两个文件,生成编译时所用的Makefile文件。修改时将小写的pconfig换成你自己的模块名,别忘了把大写的PCONFIG也替换掉(不要告诉我你不会vi的替换语句)。config.m4也是执行configure将会调用的检测脚本程序,以后我们来讨论这些脚本程序的更深入的修改。现在你只需要把pconfig该成你的模块就可以了。对和也如法炮制。其实也没什么用。
Step 3 gt
php3-pconfig.h 头文件中
extern php3_module_entry pconfig_module_entry
#define pconfig_module_ptr amppconfig_module_entry
#define phpext_pconfig_ptr pconfig_module_ptr
这几行定义了模块的入口,将入口注册到php后,php会通过模块入口找到你写的函数
下面几个函数定义是用宏进行定义的,展开以后其实就是 php3_minit_pconfig , php3_rinit_pconfig ……分别在你的模块初试化或结束时被调用,如果你的模块很简单,也就不需要这些定义了
extern PHP_MINIT_FUNCTION(pconfig)
extern PHP_RINIT_FUNCTION(pconfig)
extern PHP_MSHUTDOWN_FUNCTION(pconfig)
PHP_MINFO_FUNCTION(pconfig)
这是你的函数声明,将来写在php脚本语句中的函数名就是在PHP_FUNCTION中定义的名字。
PHP_FUNCTION(pconfig_test)
如果有多个,还可以继续往下加
PHP_FUNCTION(pconfig_parsefile)
PHP_FUNCTION(pconfig_release) …….
Step 4 gt
接下来我们看最重点的C代码了
function_entry pconfig_functions[] {
PHP_FE(pconfig_test, NULL)
{NULL, NULL, NULL}
}
定义的是你的函数的入口(前面我们提到过模块的入口),按照格式将你在头文件中定义的函数写进去吧。注意,这是用宏定义的,不要管语法是否正确。以后我们具体讨论这些宏的用法。
php3_module_entry pconfig_module_entry {