C语言实现的统计php代码行数功能源码(支持文件夹、多目录)
更新时间:2020年4月25日 17:41 点击:2245
放假在家没事,睡过懒觉,看过电影,就想起来写个小程序。 统计php代码的行数,对于phper还是挺实用的。支持单个文件和目录。下面是代码和演示的例子!
/** * @date 2012-12-1 * @author bright * @todo 统计php代码行数 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <dirent.h> #include <sys/stat.h> #include <ftw.h> #define LINESIZE 300 int fn(const char *file,const struct stat *sb,int flag); int check_file_type(const char * file_name); void read_file(const char *file); int is_file(); void print_error(); int error_id=0; char *path; const char *FTYPE=".php"; const char *flags[]={"<?","<?php"}; const char *rflags="?>"; int line_sum=0; int file_sum=0; int show_one_file_line=0; //是否显示每个文件的行数 int main(int argc, char *argv[]) { if(argc==1){ printf("请在命令后面添加目录或文件名!\n"); return 0; } if(argc==3 && strcmp(argv[2],"-p")==0){ show_one_file_line=1; } path=argv[1]; if(is_file(path)){ if(check_file_type(path)){ read_file(path); } } else{ ftw(path,fn,1000); } if(error_id<=3){ print_error(); } printf("files: %d \ttotal: %d Lines\n",file_sum,line_sum); return 0; } void read_file(const char *file_path) { char arr[LINESIZE]; int full_code=0; int line_num=0; FILE *fp; fp=fopen(file_path,"r+"); while ((fgets(arr, LINESIZE, fp)) != NULL){ int i=sizeof(flags)/4-1; if (full_code){ if (strstr(arr,rflags)!=0){ full_code=0; } else{ line_num++; } } else{ for (;i>=0;i--){ if (strstr(arr,flags[i])!=0){ full_code=1; break; } } } } line_sum+=line_num; file_sum++; if(show_one_file_line) printf("%s\t Lines:%d\t\n",file_path,line_num); } int fn(const char *file,const struct stat *sb,int flag) { if(flag==FTW_F){ if(is_file()==0){ if(check_file_type(file)){ read_file(file); } } } return 0; } //return 0: 文件; 1:目录 int is_file() { int i=strlen(path); for (;i>=0;i--){ if (path[i]=='.'){//文件 if (access(path,F_OK)!=0){ error_id=1; } else if (access(path,R_OK)!=0){ error_id=2; } return 1; } else if (path[i]=='/'){//目录 if (access(path,F_OK)!=0){ error_id=3; } return 0; } } return 0; } //文件是否为指定格式 int check_file_type(const char * file_name) { char *tmp=rindex(file_name,'.'); if(tmp==NULL){ return 0; } if(strcmp(tmp,FTYPE)!=0){ error_id=4; return 0; } return 1; } //打印错误信息 void print_error() { switch(error_id){ case 1: printf("该文件不存在!请检查!\n"); break; case 2: printf("您没有对该文件的读权限!请检查!\n"); break; case 3: printf("该目录不存在!请检查!\n"); break; case 4: printf("文件格式格式错误,不是%s格式,请重试!\n",FTYPE); break; } }
演示例子:
上一篇: WIN32程序获取父进程ID的方法
相关文章
- 这篇文章主要为大家详细介绍了C语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
- 本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
- 这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
- 这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
- PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
- index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- 这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
详解C语言中的rename()函数和remove()函数的使用方法
这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25PHP中func_get_args(),func_get_arg(),func_num_args()的区别
复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04- 这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
- 这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
- 本篇文章主要讲解C语言 基本语法,这里提供简单的示例和代码来详细讲解C语言的基本语法,开始学习C语言的朋友可以看一下,希望能够给你带来帮助...2021-09-18
- 这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
- 这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
- 这篇文章主要介绍了C语言中send()函数和sendto()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31- 这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
- 今天小编就为大家分享一篇C语言实现从文件读入一个3*3数组,并计算每行的平均值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了使用C语言操作文件的基本函数整理,包括创建和打开以及关闭文件的操作方法,需要的朋友可以参考下...2020-04-25