`
xinglongbing
  • 浏览: 152342 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

遇到的几个Php问题

 
阅读更多

1.Zend Stdio中Ctrl+鼠标左键以及F3都无法定位Php源代码。

可能的方案:

a.引自http://www.exploit.cz/php/zend-studio-code-autocomplete-fix.html 删除用户目录Zend文件夹中的org.eclipse.dltk.ui.prefs文件重启一下就ok了;(我当初重新装了Ubuntu,Zend文件夹是从原来电脑拷贝过来,而且新系统使用了新的Zend Stdio版本。可能跟这个有关)

b.右键点击项目 -> configure -> Add PHP Support试试。

 

2.发现Php中正则替换函数preg_replace有一个很强大的功能:除了字符串正则替换还能够把replacement当作php code来运行(如果replacement是函数其参数可以通过占位符从正则匹配到的原字符串获取,参数的使用方式有点像apache的rewrite)。

The e modifier makes preg_replace treat the replacement parameter as PHP code after the appropriate references substitution is done. Tip: make sure that replacement constitutes a valid PHP code string, otherwise PHP will complain about a parse error at the line containing preg_replace.

 

以下内容来源:http://blog.sina.com.cn/s/blog_64e2219d01010299.html

 $post=preg_replace("/\[html\](.+?)\[\/html\]/eis","htmlcode('\\1')",$post);
修饰符:
在正则表达式里面的修饰符可以改变正则的很多特性,使得正则表达式更加适合你的需要(注意:修饰符对于大小写是敏感的,这意味着"e"并不等于"E")。正则表达式里面的修饰符如下:
i :如果在修饰符中加上"i",则正则将会取消大小写敏感性,即"a"和"A" 是一样的。
m:默认的正则开始"^"和结束"$"只是对于正则字符串如果在修饰符中加上"m",那么开始和结束将会指字符串的每一行:每一行的开头就是"^",结尾就是"$"。
s:如果在修饰符中加入"s",那么默认的"."代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!
x:如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。
e:本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码。
A:如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说"/a/A"匹配"abcd"。
E:与"m"相反,如果使用这个修饰符,那么"$"将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。
U:和问号的作用差不多,用于设置"贪婪模式"。
?表单非贪婪匹配,即尽可能少的匹配

#############
##总结模型###
#############
1.直接在preg_replace第2个变量执行的模式:
echo preg_replace("/test/e",$h,"jutst test");
?>
提交http://127.0.0.1/test/11/preg.php?h=phpinfo()
实例如:phpbb的viewtopic.php变量$highliht_match提交php代码执行漏洞

2.通过\\1[或者\\n]提取第3个变量里的php代码并执行的模式:
echo preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "\\1", $h);
?>
提交:http://127.0.0.1/test/11/preg.php?h=[php]phpinfo()[/php]

preg_replace与ereg_replace那个效率更高

  编程序,总有一种感觉,去年的程,到了今年,总感觉慢了好多,应该这就是优化所在,自己的知识更深,技术也在更,所以每过一段时间,再读读您写 的程序,看有没有可以优化的地,这是一个程序员应该做的行动。preg_replace()是Perl内置的一种文字匹配模式,不过用起来一些参数会比 ereg_relace()复杂一些,实际的项目运用中,用ereg的人还是不,近日我写了一个获取HTML中的文本的函数,发现 preg_replace()居然比ereg_replace()快了近一倍,两个函数如下:

用preg_replace()
引用代码:function GetHtmlText($str)
{
$str = preg_replace("/<sty(.*)\/style>|<scr(.*)\/script>|<!--(.*)-->/isU","",$str);
$alltext = "";
$start = 1;
for($i=0;$i<strlen($str);$i++){
    if($start==0 && $str[$i]==">") $start = 1;
    else if($start==1){
    if($str[$i]=="<"){ $start = 0; $alltext .= " "; }
    else if(ord($str[$i])>32) $alltext .= $str[$i];
    }
}
$alltext = preg_replace("/&([^;&]*)(;|&)/"," ",$alltext);
$alltext = preg_replace("/ {1,}/"," ",$alltext);
$alltext = preg_replace("/ {1,}/"," ",$alltext);
return $alltext;
}

用ereg_replace()
引用代码:function GetHtmlText($str)
{
$str = eregi_replace("<sty(.*)/style>|<scr(.*)/script>|<!--(.*)-->","",$str);
$alltext = "";
$start = 1;
for($i=0;$i<strlen($str);$i++){
    if($start==0 && $str[$i]==">") $start = 1;
    else if($start==1){
    if($str[$i]=="<"){ $start = 0; $alltext .= " "; }
    else if(ord($str[$i])>32) $alltext .= $str[$i];
    }
}
$alltext = ereg_replace("&([^;&]*)(;|&)"," ",$alltext);
$alltext = ereg_replace(" {1,}"," ",$alltext);
$alltext = ereg_replace(" {1,}"," ",$alltext);
return $alltext;
}

  经过多次测试对,用preg_replace()的函数普遍在 0.08-0.12秒之间,用ereg_replace()的函数却去到0.35-0.38秒之间,测试的网页为百度的主页,我的系统是图拉丁 1.1G的CP,384M的内存。
  如果你的程序中还有使用ereg处理较长文本的,建议马上更改过来。

 

分享到:
评论

相关推荐

    安装PHP可能遇到的问题“无法载入mysql扩展”的解决方法.zip

    解决这个问题的步骤一般包括以下几点: 1. **检查php.ini**:打开php.ini文件,确保`extension=mysqli`或`extension=pdo_mysql`(根据你的需求)没有被注释掉。如果使用的是旧版的MySQL扩展,查找`extension=mysql`...

    几个主流PHP软件的include结构

    本主题将深入探讨几个主流PHP软件的`include`结构,以便理解它们如何有效地管理和重用代码。 首先,`include`或`require`语句在PHP中用于引入其他PHP文件,这样可以将代码划分为多个独立的文件,每个文件负责特定的...

    ECshop 迁移到 PHP7版本时遇到的兼容性问题

    ECShop在迁移到PHP 7时,遇到了一系列的兼容性问题,主要有以下几个方面: 1. 构造方法不兼容问题:在PHP 7中,已经不再支持与类名相同名称的构造方法,必须使用__construct()作为构造函数名。在ECShop的代码中,...

    安装凡客模板出现的几个问题和解决办法

    ### 安装凡客模板遇到的问题与解决策略 在安装凡客模板的过程中,用户可能会遇到一系列的技术难题。本文将详细探讨这些常见问题及其相应的解决方案,帮助用户顺利安装并使用模板。 #### 一、乱码问题及其解决方法 ...

    亲测thinkphp3.1.3完美支持php7 thinkphp3.1.3--for php7.zip

    7. **社区支持**:ThinkPHP拥有活跃的社区,开发者可以在遇到问题时寻求社区的帮助,或者参与讨论和分享经验。 总的来说,这个压缩包提供了一个经过验证的ThinkPHP3.1.3版本,适用于PHP7环境,可以帮助开发者高效地...

    电子书-php常见错误总结

    以下是几个关键知识点: 1. **变量获取问题**: - 在PHP4.2以后的版本,默认情况下`register_globals`被设置为`off`,这意味着直接使用变量名无法自动获取POST、GET等请求数据。 - 若要解决这个问题,你可以通过...

    PHP中读取文件的几个方法

    以上介绍了 PHP 中常见的几种读取文件的方法:`fread()`、`fgets()`、`fgetss()`、`file()` 和 `readfile()`。每种方法都有其适用场景,开发者应根据具体需求选择合适的方法来完成文件读取任务。理解这些基本的文件...

    使用mysql中遇到的几个问题

    此外,PHPMyAdmin是一个非常流行的开源工具,特别适合PHP开发者,它提供了直观的Web界面,用于创建和管理MySQL数据库、表、用户权限等。 在MySQL中创建存储过程与SQL Server(MSSQL)有所不同。在MySQL中,存储过程...

    PHP编程的几十个例子 (附图片+源码)

    通过这些实例,开发者不仅可以深化对PHP5语法的理解,还能学习到实际项目中可能遇到的问题及解决方案。 总的来说,"PHP编程的几十个例子"和"PHP编程一百例"为学习者提供了一个全面的实践平台,有助于他们掌握PHP5与...

    基于PHP的戏子影视自动采集网站源码 php版.zip

    为了运行和理解这个源码,我们需要解压文件并查看其内容,包括但不限于以下几个方面: 1. **核心功能**:源码的核心部分可能包含PHP脚本,它们负责自动从互联网上的各个影视资源站点抓取信息,如电影、电视剧的标题...

    找不到php_mbstring.dll或php_exif.dll的解决方法

    这些错误提示表明了几个关键点: 1. **动态库加载失败**:PHP在启动时尝试加载指定路径下的dll文件(例如 `php_exif.dll`、`php_mbstring.dll` 或 `libmcrypt.dll`),但未能成功。 2. **路径问题**:错误消息中提到...

    解决windows下安装Apache+PHP出现LoadModule takes two

    此错误的发生主要由以下几个原因导致: 1. **路径配置不正确**:确保`LoadModule`指令中的路径指向正确的PHP共享对象文件(如`php5apache2.dll`)。如果文件不存在或路径错误,则会导致加载失败。 2. **文件命名问题...

    php中文乱码问题 初学php最学见的问题

    根据提供的部分代码示例,可以看出存在几个问题: 1. **未指定HTML文档的字符集**:应该在`&lt;head&gt;`部分添加`&lt;meta&gt;`标签来声明字符集。 2. **未设置PHP脚本的字符集**:在PHP脚本开头应使用`header()`函数来设置...

    windows下php5.3 v9 redis扩展 php_redis.dll

    标签“redis”,“windows”,“php”,“5.3”,“v9”分别对应了以下几个关键概念: 1. **Redis**:是一个基于键值对的数据存储系统,支持字符串、哈希表、列表、集合和有序集合等多种数据结构,可以实现快速读写...

    ecshop php5.2以上版本,php5.3 5.5 5.6均可用

    ECShop的PHP版本兼容性改进有以下几个方面的意义: 1. **性能优化**:更高版本的PHP通常会提供更好的性能和安全性,使得ECShop商城运行更快,抵御安全威胁的能力更强。 2. **扩展支持**:更新的PHP版本通常会包含...

    网站开发中遇到UTF8出现乱码问题.pdf

    这些问题主要集中在以下几个方面: 一、HTML页面转UTF-8编码问题 1. 首先,需要在HTML文档的部分,标签之前添加标签来声明编码:`; charset=utf-8' /&gt;`。 2. 确保HTML文件本身的编码是UTF-8无BOM格式。可以使用编辑...

    php_solr.dll ,php5.3版本

    描述中提到“php5.3版本的php_solr.dll,很难找到的哦”,这暗示了几个关键点: 1. **兼容性问题**:随着 PHP 不断更新,旧版本的支持逐渐减少,像 PHP 5.3 这样的较早版本的扩展可能难以在官方源或常规渠道找到。 2...

    php环境5.4一键安装包

    3. "套件说明.txt":提供了关于安装包的详细信息,包括安装步骤、注意事项、可能遇到的问题及解决方案,是用户进行安装操作的重要指南。 4. "文件校验.txt":记录了所有文件的MD5或SHA1等校验值,用于验证下载的...

    php_gd2_php_gd.dll_

    如果在服务器或开发环境中遇到“PHP GD扩展未启用”或“找不到php_gd.dll”等相关错误,通常是因为这个文件缺失或者版本不兼容。此时,你需要确保该文件存在于PHP的`ext`目录下,并且在php.ini配置文件中正确启用了`...

    几百套PHP学习资料.txt

    3. **参与社区交流**:加入PHP相关的论坛或社群,与其他开发者交流心得,解决遇到的问题。 总之,《几百套PHP学习资料》为初学者提供了一个良好的起点,通过系统的学习和不断的实践,相信每位学习者都能在PHP的世界...

Global site tag (gtag.js) - Google Analytics