怎么做好小额理财 &#amp 65279 php;有知道的吗?

今天看啥 热点:
str_replace&—&子字符串替换 [str_replace]mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )php函数str_replace: 返回一个字符串或者数组。该字符串或数组是将&subject&中全部的&search&都被&replace&替换之后的结果。
现在我们所能知道的一些这个函数的用法,如:str_replace("#", "-", "dizaz#7#final"),str_replace(array('#', '$'), "-", "dizaz#7$final") 等,就这些调用方式,php内部是如何实现的呢,鉴于[深入理解PHP内核],在这里小做分析。
测试代码:复制代码 代码如下: &?php $object = "dizaz#7#final"; $res = str_replace("#", "-", $object); echo $
如上,先从字符“#”替换为字符“-”开始。 预备工作: 下载PHP源代码,http://www.php.net下载即可 打造自己的阅读代码的工具[本人使用VIM+CSCOPE] 另:Linux用户也推荐图形化查看源代码工具kscope [google之] 编译工具[gcc],调试工具[gdb],另:GDB图形化端口DDD也很不错,推荐 编译PHP源码,记得使用--enable-debug [当然也希望通过./configure --help 看看PHP提供的一些编译选项,会有很多收获的] 开始分析: 通过[深入理解PHP内核]阅读,我们不难发现其PHP提供标准函数所在目录为PHP-SOURCE-DIR/ext/standard目录下,由于是字符串函数,很容易我们就可以在此目录下找到str_replace函数实现的文件 string.c,接下来就围绕着这个文件进行分析。[当然用CScope很容易就可以锁定,用:cs find s str_replace] 查询得知其定义实现: 复制代码 代码如下: /* {{{ proto mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count]) Replaces all occurrences of search in haystack with replace */ PHP_FUNCTION(str_replace) { php_str_replace_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); } /* }}} */ 现在需要查看函数php_str_replace_common函数 复制代码 代码如下: /* {{{ php_str_replace_common */ static void php_str_replace_common(INTERNAL_FUNCTION_PARAMETERS, int case_sensitivity) { /** * TODO * typedef struct _zval_ * typedef struct _zend_class_entry zend_class_entry * * struct _zval_struct { * zvalue_ * zend_uint refcount__ * zend_ * zend_uchar is_ref__ * }; * * typedef union _zvalue_value { * * * struct { * char * * * } * HashTable * * zend_object_ * } zvalue_ * * typedef struct _zend_object { * zend_class_entry * * HashTable * * HashTable * * } zend_ * */ zval **subject, **search, **replace, **subject_entry, **zcount = NULL; zval * char *string_ uint string_key_ ulong num_ int count = 0; int argc = ZEND_NUM_ARGS(); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZZ|Z", &search, &replace, &subject, &zcount) == FAILURE) {
} SEPARATE_ZVAL(search); SEPARATE_ZVAL(replace); SEPARATE_ZVAL(subject); /* Make sure we're dealing with strings and do the replacement. */ if (Z_TYPE_PP(search) != IS_ARRAY) { ....//代码省滤 } else { /* if subject is not an array */ php_str_replace_in_subject(*search, *replace, subject, return_value, case_sensitivity, (argc & 3) ? &count : NULL); } if (argc & 3) { zval_dtor(*zcount); ZVAL_LONG(*zcount, count); } } /* }}} */
继续跟踪php_str_replace_in_subject 复制代码 代码如下: /* {{{ php_str_replace_in_subject */ static void php_str_replace_in_subject(zval *search, zval *replace, zval **subject, zval *result, int case_sensitivity, int *replace_count) { zval **search_entry, **replace_entry = NULL, temp_ char *replace_value = NULL; int replace_len = 0; /* Make sure we're dealing with strings. */ convert_to_string_ex(subject); Z_TYPE_P(result) = IS_STRING; if (Z_STRLEN_PP(subject) == 0) { ZVAL_STRINGL(result, "", 0, 1);
} /* If search is an array */ if (Z_TYPE_P(search) == IS_ARRAY) { ...//不走这步 } else { if (Z_STRLEN_P(search) == 1) { //例子中只有”#“所以,执行这一步。 php_char_to_str_ex(Z_STRVAL_PP(subject),//subject的值,也就是dizaz#7#final Z_STRLEN_PP(subject), //获取subject的长度 Z_STRVAL_P(search)[0], //由于只有1个”#”,所以只需要第一个字符 Z_STRVAL_P(replace), //所要替换成的字符,现在是“-” Z_STRLEN_P(replace), //目标字符的长度,现在为1 result, //替换结果 case_sensitivity, //大小写是否敏感,默认是1 replace_count); //替换次数 } else if (Z_STRLEN_P(search) & 1) { Z_STRVAL_P(result) = php_str_to_str_ex(Z_STRVAL_PP(subject), Z_STRLEN_PP(subject), Z_STRVAL_P(search), Z_STRLEN_P(search), Z_STRVAL_P(replace), Z_STRLEN_P(replace), &Z_STRLEN_P(result), case_sensitivity, replace_count); } else { MAKE_COPY_ZVAL(subject, result); } } }
到现在为止,我们的目标最终锁定到了php_char_to_str_ex 函数,现在只需要分析这个函数就OK了。其实现为: 复制代码 代码如下: /* {{{ php_char_to_str_ex */ PHPAPI int php_char_to_str_ex(char *str, uint len, char from, char *to, int to_len, zval *result, int case_sensitivity, int *replace_count) { int char_count = 0; int replaced = 0; char *source, *target, *tmp, *source_end=str+len, *tmp_end = NULL; if (case_sensitivity) { //现在case_sensitivity = 1 char *p = str, *e = p +      //计算需要替换几次 while ((p = memchr(p, from, (e - p)))) { char_count++; p++; } } else { for (source = source & source_ source++) { if (tolower(*source) == tolower(from)) { char_count++; } } } if (char_count == 0 && case_sensitivity) { ZVAL_STRINGL(result, str, len, 1); return 0; } //计算替换以后的长度,并且存储到result中。 Z_STRLEN_P(result) = len + (char_count * (to_len - 1)); //申请内存,存放替换后的数据 Z_STRVAL_P(result) = target = safe_emalloc(char_count, to_len, len + 1); //设定结果是一个字符串 Z_TYPE_P(result) = IS_STRING; //target跟result的值都指向统一块内存,所以只需要处理target if (case_sensitivity) { char *p = str, *e = p + len, *s = while ((p = memchr(p, from, (e - p)))) { //判断在第几个字符出现# memcpy(target, s, (p - s)); //把#以前的数据拷贝给target target += p - memcpy(target, to, to_len); //把目标字符拷贝给target[当然此时的target是开始target+p-s的] target += to_ p++; s = if (replace_count) { *replace_count += 1; //设定替换次数 } } //如果后面还有,继续添加到target后,这样target所指向的内存块已经是替换好的数据了。 if (s & e) { memcpy(target, s, (e - s)); target += e - } } else { for (source = source & source_ source++) { if (tolower(*source) == tolower(from)) { replaced = 1; if (replace_count) { *replace_count += 1; } for (tmp = to, tmp_end = tmp+to_ tmp & tmp_ tmp++) { *target = * target++; } } else { *target = * target++; } } } *target = 0;
} /* }}} */
如上注释,其就这样完成了对于字符到字符串的替换。至于其中怎么return,怎么一个详细的过程,需要再对PHP执行过程有个相对的了解。 当然可以用gdb下断点到php_char_to_str_ex函数,来了解其详细执行过程。 下一篇来做对于字符串替换成字符串的分析。 小结: 其结果是存在zval中 其对替换的实现比较巧妙,可以学习 需要继续查看源码,学习更多编写技巧以及设计技巧。
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&&&&&
PHP教程最近更新&&当前位置: ->
-> 德盛浩金:3.14多空博弈黄金频繁震荡,日内操作策略及分析!
德盛浩金:3.14多空博弈黄金频繁震荡,日内操作策略及分析!0
如果您发现这条信息有问题,请务必及时举报。
&非法信息&&
&分类错误&&&
&信息失效&&
http://www.xduoduo.com/b2b Inc.
法律声明:本站免费提供信息交流,交易者自行分辨信息真假,如有损失,本站概不负责。谢谢您对本站的支持!&&
ICP备案号:&&
网站在线客服QQ:您当前位置:留言显示
咨询首届万峰林杯活动报名情况
留言用户:汤志刚 留言时间: 11:33:11 回复时间: 9:32:43 查看:902
请问,按照首届万峰林杯“万亩花海”山地自行车挑战赛活动方案介绍,线上报名为州文体广电局、市新闻中心,通过网络和电台等渠道进行线上报名,兴义市旅游集团通过自媒体平台进行报名,所以想咨询一下如何在贵网站报名?诚望快速给予回复!
全民健身、全域旅游,首届万峰林杯 “万亩花海”山地自行车挑战赛&活动活动时间2017年1月26日――2017年11月25日&&&&&每周六进行周赛,每季度进行季度赛,年末开展年度总决赛报名时间:2017年发布公告日至每周周赛比赛日前一天&&&报名费:免线上网络报名:选手通过州文体广电局、兴义市自行车协会、市新闻中心,通过网络和电台等渠道进行线上报名,兴义市旅游集团通过自媒体平台进行报名。请拨打我局群体科电话报名:
扫一扫在手机打开当前页面您当前位置:留言显示
关于兴义市马岭镇瓦嘎轮窑砖厂被无理取缔的诉求
留言用户: 留言时间: 15:31:47 回复时间: 17:53:14 查看:4380
关于兴义市马岭镇瓦嘎轮窑砖厂被无理取缔的诉求我们是兴义市马岭镇瓦嘎村被无理取缔的轮窑砖厂业主,经过大家讨论,一致决定向上级相关部门提出书面诉求。兴义市马岭镇瓦嘎页岩砖厂概况马岭镇瓦嘎村位于兴义市郊区,交通便利,页岩资源丰富。我们都是年代初政府招商引资进驻的企业,从以前的肩挑手提的人工作业到现在的机械化生产操作,期间历尽艰辛,年年技改,年年投入,时至今日我们每个企业,每年上缴国家各种相关费用――万元,每年解决就业人以上,厂区所有投资超过万元,并且按照国家相关规定取得政府部门审批,依法取得各类证照,多年来一直合法经营,为地方经济发展做出突出贡献。为了扩大生产规模,年至年间,瓦嘎砖厂有家另建隧道窑(建隧道窑的砖厂,原来的轮窑一直保留生产,隧道窑的断烧面为米左右)。截止年月瓦嘎砖厂共有个。整顿,规范,取缔砖厂的概况为了环境保护,为了规范和厂区标准化,打造马岭镇瓦嘎新型墙体建材工业园区,马岭镇政府对瓦嘎砖厂进行规范整顿,并印发了《马党通【】号》文件这份文件上提出三个标准:环境必须达到国家排放标准,生产规模要年产量达到万块以上,厂区标准化(有办公楼和职工宿舍楼,厂区绿化必须达到,厂区路面硬化,废水处理等),并强调现有的轮窑必须在规定时间内取缔,现有的隧道窑断烧面必须达到米―米之间,没有达到的隧道窑也必须取缔。随后印发了《兴府办发【】号》文件强调新建成或整改的隧道窑除符合规定的标准外,产能必须达到年产万块以上,新建隧道窑断烧面为米。三马岭镇政府的决定限期取缔轮窑。隧道窑可以整改达到要求后投产。可以按要求新建隧道窑达标后投产。四对马岭镇政府出台的政策表示疑惑“限期取缔轮窑”,国家没有任何一个部门出台明文规定要取缔轮窑的文件,在出台的相关文件中也只是规定砖厂的准入条件。我们那么多家轮窑为什么连个整改或技改的机会都不给,轮窑也是可以有条件整改达标的,而马岭镇政府是直接取缔。“隧道窑可以整改达到要求后投产”,隧道窑的整改为什么不按省出台的文件所提的参数进行整改,文件明文规定了断烧面必须达到米―米等相关参数,而马岭镇政府提出的整改方案参数严重与省出台的准入条件参数不相符(断烧面为米的窑子和厂房要投资万元能建成,而断烧面为米―米的窑子和厂房则需要投资―万才能建成)“可以按要求新建隧道窑达标后投产”这条实际上是骗人的,价值几百万的隧道窑可以花少量的投入进行所谓的整改,并且参数完全不符合国家准入条件就可以投产。而新建一个符合国家准入条件的隧道窑则要花几仟万人民币。五合理诉求要整改?要规范就必须公开,公正,公平。必须严格按照国家准入条件,有整改条件的所有企业都可以选择整改,最终达不到国家准入条件的必须坚决取缔。国家准入条件必须公开,并且要出具有明文规定的准入条件参数的文件。到目前为止,国家还没有明确的政策文件要求取缔或强制性取缔全部轮窑砖厂的文件,马岭镇政府一定要取缔轮窑,必须要拿出国家明文规定的支撑文件,否则必须给出合理赔偿。整顿规范验收的信息必须公开,必须按照国家规定准入条件验收,接受广大人民群众的监督。现有轮窑砖厂的各种证照手续多数不全,原因是马岭镇政府在提出整顿前,向相关部门打招呼停办或停审,造成各轮窑砖厂证照手续到期和多数不全,希望有关部门就这个问题查处马岭镇政府如此行为的合法性,给我们轮窑业主一个合理的说法。如果马岭镇政府一定要采取不公平,不公正的举动取缔轮窑砖厂或是强拆轮窑不给予合理的理由和赔偿,我们一定要集体上访省政府直到国务院
&&& 来信人,您好!&&& 您反映的问题经兴义市人民政府办公室调查核实,回复如下:&&&&为扎实做好马岭镇页岩砖厂规范整治工作,日,兴义市人民政府办公室研究制定了《市人民政府办公室关于印发兴义市规范整治烧结页岩砖行业工作方案的通知》(兴府办发z号)文件,日,市人民政府办公室再次印发了《兴义市人民政府办公室关于进一步做好页岩砖厂行业规范整治工作的通知》(兴府办发z2014{1号)文件,并于日马岭镇会议室召开瓦戛砖厂整治动员大会。马岭镇及时成立了瓦戛页岩砖行业规范整治工作指挥部,印发了马党通z2013{48、马党通z2013{49号和马府通z2014{19号等文件。经过半年多的艰苦工作,现马岭镇瓦嘎片区有十二家页岩砖厂正在进行整改,其余砖厂没有整改。&&& 一、关于“要整改、要规范就必须公开、公正、公平。必须严格按照国家准入条件,有整改条件的所有企业都可以选择整改,最终达不到准入条件的必须坚决取缔。”&&& 马岭镇瓦嘎页岩砖厂规范整治的全过程是公开、公正、公平的,并且有影像资料,严格按照国家准入条件开展整治,经市页岩砖整治领导小组组织相关部门人员验收合格,方可生产,凡是验收不合格的砖厂一律停产整改,直至验收合格为止。&&& 二、关于“国家准入条件必须公开,并且要出具有明文规定的准入条件。”&&& 在组织召开的砖厂负责人参加的相关工作会上,市工科局、市环保局等市整治领导小组成员单位领导及工作人员传达讲解介绍了国家、省的关于烧结页岩砖的有关法律法规和政策规定。如相关业主对此有疑问,可到马岭镇和兴义市环保局、工科局等查询。&&& 三、关于“到目前还没有明确的政策文件要求取缔或强制性取缔全部轮窑砖厂的文件,马岭镇政府一定要取缔轮窑,必须要拿出国家明文规定的支撑文件,否则必须给出合理赔偿。”&&& 马岭瓦嘎页岩砖厂规范整治工作是根据国务院、省节能减排有关文件精神而开展的,根据《环境保护法》、《大气污染防治法》、《安全生产管理法》、《土地管理法》、《矿产资源管理法》、《省人民政府关于推进墙体材料革新和建筑节能工作的意见》(黔府发z2006{27号)、《贵州省新型墙体材料“十二五”发展规划》、《贵州省人民政府办公厅转发省国土资源厅关于全国整治和规范矿产资源开发秩序实施意见的通知》(黔府办发z2005{94号)、《贵州省住房和城乡建设厅、贵州省发展和改革委员会关于开展贵州省城市城区禁止使用粘土制品县城禁止使用实心粘土砖工作的通知》(黔建墙革通z号)、《贵州省住房和城乡建设厅关于烧结实心砖有关问题的通知》(黔建墙革通z号)等法律、法规及有关文件精神,经市人民政府研究,对国家明令禁止、污染严重、技术落后、产能较小的28门以下轮窑、无顶窑、马蹄窑等土窑生产线的烧结页岩砖企业关停整治,符合法律规定政策要求。至于要求对缔轮窑业主给予合理赔偿,目前没有政策依据。&&& 四、关于“整顿规范验收的信息必须按照国家规定准入条件验收,接受广大人民群众的监督。”&&& 马岭瓦嘎页岩砖厂整治规范验收的信息做到公开,做到按整治规定验收,对整治企业的验收情况实行张榜公示,接受各砖厂业主、人民群众和有关部门的监督。&&& 五、关于“现有轮窑砖厂的各种证照手续多数不全,原因是马岭镇政府在提出整顿前,向相关部门打招呼停办或停审,造成各轮窑砖厂证照手续到期和多数不全,希望有关部门就这个问题查处马岭镇政府如此行为的合法性,给我们轮窑业主一个合理的说法。”&&& 各砖厂的各种证照停办或停审,是市政府各职能部门依法依规进行的。市政府已经召开专题会议明确,只要砖厂整改结束经相关部门验收达标,将及时给予办理相关手续。&&&&六、关于“如果马岭镇政府一定要采取不公平、不公正的举动取缔轮窑砖厂或是强拆轮窑不给合理的理由和赔偿,我们一定要集体上访省政府直到国务院。”&&& 开展砖厂规范整治工作,取缔违法违规的页岩砖厂,市政府有关工作部门和马岭镇将做到坚持按规定公平公正公开进行,并接受各方面的监督。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 日&
扫一扫在手机打开当前页面

我要回帖

更多关于 小额理财 的文章

 

随机推荐