• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

C语言统计php代码的行数

PHP 水墨上仙 2234次浏览 0个评论

C语言统计php代码的行数

/**
 * @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;
	}
}


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明C语言统计php代码的行数
喜欢 (0)

您必须 登录 才能发表评论!

加载中……