php 代码行数常量,统计php代码行数

统计php代码的行数,对于phper还是挺实用的。支持单个文件和目录。请大家指点!!!

来源:

http://phpman.cn/?p=8

1.[代码][C/C++]代码

/**

* @date 2012-12-1

* @author bright

* @todo 统计php代码行数

*/

#include

#include

#include

#include

#include

#include

#include

#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;

}

}

2.[图片] 1.png

02091341_vSGh.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值