怎么matlab查看函数源代码PHP函数的核心源代码

强大的php检查文件类型
一个强大的文件类型检测函数,它可以判断你上传的文件是什么类型,利用这个函数使用文件的类型没有办法伪装过去,代码如下:
&*&@access&&&&&&public& &*&@param&&&&&&&string&&&&&&filename&&&&&&&&&&&&文件名&
&*&@param&&&&&&&string&&&&&&limit_ext_types&&&&&允许的文件类型,用|包围的类型如:|gif|txt|& &*&@return&&&&&&string&
&*/& function&check_file_type($filename,&$limit_ext_types&=&''){&
&$extname&=&strtolower(substr($filename,&strrpos($filename,&'.')&+&1));& &if&($limit_ext_types&&&&
&stristr($limit_ext_types,&'|'&.&$extname&.&'|')&===&false){& &&return&'';&
&$str&=&$format&=&'';& &
&$file&=&@fopen($filename,&'rb');& &if&($file){&
&&$str&=&@fread($file,&0x400);&//&读取前&1024&个字节& &&@fclose($file);&
&}& &else{&
&&$format=$& &}&
& &if&($format&==&''&&&&strlen($str)&&=&2&){&
&&if&(substr($str,&0,&4)&==&'MThd'&&&&$extname&!=&'txt'){& &&&$format&=&'mid';&
&&}& &&elseif&(substr($str,&0,&4)&==&'RIFF'&&&&$extname&==&'wav'){&
&&&$format&=&'wav';& &&}&
&&elseif&(substr($str&,0,&3)&==&&xFFxD8xFF&){& &&&$format&=&'jpg';&
&&}& &&elseif&(substr($str&,0,&4)&==&'GIF8'&&&&$extname&!=&'txt'){&
&&&$format&=&'gif';& &&}&
&&elseif&(substr($str&,0,&8)&==&&x89x50x4Ex47x0Dx0Ax1Ax0A&){& &&&$format&=&'png';&
&&}& &&elseif&(substr($str&,0,&2)&==&'BM'&&&&$extname&!=&'txt'){&
&&&$format&=&'bmp';& &&}&
&&elseif&((substr($str&,0,&3)&==&'CWS'&||&substr($str&,0,&3)&==&'FWS')& &&&&&$extname&!=&'txt'){&
&&&$format&=&'swf';& &&}&
&&elseif&(substr($str&,0,&4)&==&&xD0xCFx11xE0&){&&&//&D0CF11E&==&DOCFILE&==&Microsoft&Office&Document& &&&if&(substr($str,0x200,4)&==&&xECxA5xC1x00&&
&&&||&$extname&==&'doc'){& &&&&$format&=&'doc';&
&&&}& &&&elseif&(substr($str,0x200,2)&==&&x09x08&&||&$extname&==&'xls'){&
&&&&$format&=&'xls';& &&&}&
&&&elseif&(substr($str,0x200,4)&==&&xFDxFFxFFxFF&& &&&||&$extname&==&'ppt'){&
&&&&$format&=&'ppt';& &&&}&
&&}& &&elseif&(substr($str&,0,&4)&==&&PKx03x04&){&
&&&$format&=&'zip';& &&}&
&&elseif&(substr($str&,0,&4)&==&'Rar!'&&&&$extname&!=&'txt'){& &&&$format&=&'rar';&
&&}& &&elseif&(substr($str&,0,&4)&==&&x25PDF&){&
&&&$format&=&'pdf';& &&}&
&&elseif&(substr($str&,0,&3)&==&&x30x82x0A&){& &&&$format&=&'cert';&
&&}& &&elseif&(substr($str&,0,&4)&==&'ITSF'&&&&$extname&!=&'txt'){&
&&&$format&=&'chm';& &&}&
&&elseif&(substr($str&,0,&4)&==&&x2ERMF&){& &&&$format&=&'rm';&
&&}& &&elseif&($extname&==&'sql'){&
&&&$format&=&'sql';& &&}&
&&elseif&($extname&==&'txt'){& &&&$format&=&'txt';&
& &if&($limit_ext_types&&&&
&stristr($limit_ext_types,&'|'&.&$format&.&'|')&===&false){& &&$format&=&'';&
&return&$& }&问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
在学习PHP的过程中,希望了解在PHP底层如何实现的某函数,但PHP源码那么多,我该如何去寻找。
比如现在要找var_dump()函数到底是怎么实现的?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
采纳的那个方案不错,但是不够方便,官网其实提供了一个工具,域名是 ,可以让你迅速查到定义
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
查看PHP函数的C语言实现:
cd php-src
查找 grep -rn "PHP_FUNCTION(socket_accept)" ./ext
返回 ./ext/sockets/sockets.c:938:PHP_FUNCTION(socket_accept)
查找 grep -rn "PHP_FUNCTION(array_merge)" ./ext
返回 ./ext/standard/array.c:2266:PHP_FUNCTION(array_merge)
可以看出,PHP库函数的基本都在php-src/ext目录下,里面有具体函数库比如socket,一般的函数基本都在标准库standard.
PHP源码的几个重要目录:
ext(扩展) 108M
Zend(引擎) 9.2M
sapi(cli/cgi/mod_php/fpm) 3.1M
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:技术分享 Tech Share
从 php 内核挂载钩子解密源码
文章来源:本站原创发布时间: 13:50
大多数的php代码加密(不需要额外扩展就能运行的)原理上都是使用eval进行代码的执行,理论上,只要我们在php内核执行eval函数的时候,将其dump出来,就可以得到源代码。需要注意的是:
用户上传的代码是不可信的,因此需要一个沙盒
此法虽然方便,看似是一个万能解密的办法,但是 dump 数据的时候会有很多中间值,还是需要人工的做一个特征库,去识别过滤出需要的代码段
在 php 扩展中, module init 的时候替换掉zend_compile_string,主要代码如下
static zend_op_array *edump_compile_string(zval *source_string, char *filename TSRMLS_DC)
&&& int c,
&&& char *
&&& if (Z_TYPE_P(source_string) != IS_STRING) {
&&&&&&& return orig_compile_string(source_string, filename TSRMLS_CC);
&&& len& = Z_STRLEN_P(source_string);
&&& copy = estrndup(Z_STRVAL_P(source_string), len);
&&& if (len > strlen(copy)) {
&&&&&&& for (c=0; c< c++) if (copy[c] == 0) copy[c] == '?';
&&& php_printf("----- [ start] -----\n");
&&& php_printf("%s\n", copy);
&&& php_printf("----- [ end] -----\n");
&&& yes = 1;
&&& return orig_compile_string(source_string, filename TSRMLS_CC);
PHP_MINIT_FUNCTION(edump)
&&& if (edump_hooked == 0) {
&&&&&&& edump_hooked = 1;
&&&&&&& orig_compile_string = zend_compile_
&&&&&&& zend_compile_string = edump_compile_
&&& return SUCCESS;

我要回帖

更多关于 matlab查看函数源代码 的文章

 

随机推荐