文件 php-5.6.26/Zend/zend_language_scanner.c ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC) { zend_lex_state original_lex_state; zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array)); zend_o…
文件 php-5.6.26/Zend/zend.c ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...) /* {{{ */ { va_list files; int i; zend_file_handle *file_handle; zend_op_array *orig_op_array = EG(active_op_array); // 保存现场,操作码数组 zva…
php-7.2.3 在“汇编php文件”和“执行opcode代码”上做了大量改变php-5.6.26 没见到支持抽象语法树的相关代码,php-7.2.3 见到支持抽象语法树的相关代码php-5.6.26 存在“保存active_op_array现场”的代码,php-7.2.3 去除了“保存active_op_array现场”的代码 php-5.6.26 php-7.2.3 .初始化 opcode处理器列表// main实现在文件“php-5.6.26\sapi\cgi\cgi_main.c” i…
python---filecmp ilecmp可以实现文件,目录,遍历子目录的差异对比功能. 自带filecmp模块,无需安装. 常用方法说明 filecmp提供3个操作方法,cmp(单文件对比),cmpfile(多文件对比),dircmp(目录对比). 单文件对比,filecmp.cmp(f1,f2[,shallow]) f1 f2为文件,相同True,不同False,shallow默认为True,只根据os.stat()方法返回的文件基本信息进行对比.比如最后访问时间,修改时间,状态改变时间…
require_once require include include_once 方法的区别 对于包含文件来说,如果只是使用框架来说的话,应该会很少碰到,因为框架底层对于文件的引用等做了很好的封装,这也导致了我们对于这块知识理解的欠缺. 为什么要使用类似引入文件的函数? 在一个PHP函数的生命周期中(就是一个程序执行的过程,比如echo 一个字符串),可能会用到很多个文件,这些个文件不可能都写在一个文件中,这样极不好管理,也不利于维护. 也就产生了MVC框架,使得编码可以结构化,利于管理和维护…
添加 , (void *)module, sizeof(zend_module_entry), (void**)&module_ptr){ // zend_hash_add 定义在文件“php-5.6.26\Zend\zend_hash.h” #define zend_hash_add(ht, arKey, nKeyLength, pData, nDataSize, pDest) \ _zend_hash_add_or_update(ht, arKey, nKeyLength, pData, n…
初始化 有指定析构函数,在销毁hash的时候会调用,如:“类似extension=test.so扩展”也是存放在HashTable中的,“类似extension=test.so扩展”的module_shutdown_func函数就是靠hash的析构函数来调用的 zend_hash_init_ex(GLOBAL_FUNCTION_TABLE, , NULL, ZEND_FUNCTION_DTOR, , ); { // zend_hash_init_ex 定义在文件“php-5.6.26\Zend\…
// zend_inline_hash_func 实现在文件“php-5.6.26\Zend\zend_hash.h” h = zend_inline_hash_func(arKey, nKeyLength); { // zend_hash_add 定义在文件“php-5.6.26\Zend\zend_hash.h” /* * DJBX33A (Daniel J. Bernstein, Times 33 with Addition) * * This is Daniel J. Bernstein…
// main实现在文件 php-5.6.26\sapi\cgi\cgi_main.c int main(int argc, char *argv[]) { .... cgi_sapi_module->startup(){ // php_cgi_startup实现在文件 php-5.6.26\sapi\cgi\cgi_main.c static int php_cgi_startup(sapi_module_struct *sapi_module) { // php_module_startup…
模块种类(两种) 类型一:zend的模块:(类似zend_extension=test.so) 识别方法: php.ini中以zend_extension开头的配置,如zend_extension=test.so,存放到数据结构zend_extensions中 模块的数据结构: struct _zend_extension { // zend扩展模块结构体(php.ini中以zend_extension开头的配置,如zend_extension=test.so) char *name; // z…