8个最佳PHP库

 英文原文:8 Best Php Libraries for Developers

  PHP标准库 (SPL)的目的就是提供一组接口,让开发者在PHP5中充分利用面向对象编程。因此本文我们搜集了8个最好的,能辅助开发者简化他们的工作,为他们的开发任务服务的PHP库。

1. Whoops : 更好的php错误报告库

whoops

Whoops是一个易于处理和调试错误的PHP库 。它提供基于堆栈的的错误处理和好看的错误界面。它有个简单的API来处理异常,跟踪帧和数据,并能和任何框架整合(随时可用的集成端和Silex)。

 

2. PhpFastCache

phpfastcache

phpFastCache 是一个开源的 PHP 缓存库,只提供一个简单的 PHP 文件,可方便集成到已有项目,支持多种缓存方法,包括:apc, memcache, memcached, wincache, files, pdo and mpdo。可通过简单的 API 来定义缓存的有效时间。

 

3. Eden : 功能强大的 PHP 库

eden-php-library

Eden是一个开源且免费的PHP快速开发类库。它包含很多组件用来自动加载、事件驱动、文档系统、缓存、模板、国际化、数据库、web服务、支付网关、装载和云服务技术。为了给我们最好的选择,他已经将现有的函数实现了与谷歌服务(Youtube, Drive, Contacts, Analytics, Checkout, Maps),Facebook(脸谱), Twitter(推特), Tumblr(轻博客), PayPal(贝宝), Authorize.net, FedEx(联邦快递), UPS(联合包裹服务公司), Amazon + Rackspace Clouds(亚马逊+Rackspace 云)等服务的交互。

 

4. Php Error

php-error

PHP Error 是一个开源的 PHP 库,用于转换标准的 PHP 错误信息,主要用于开发过程中的调试。PHP Error 紧密集成到 PHP 环境中,显示带语法高亮的错误提示。

 

5. Detector

detector

Detector是一个开源的PHP类库用于检测关于用户的浏览器环境的许多东西。它可以获得浏览器的使用和浏览器的html5 css3功能,分析是否移动电话、平板电脑、桌面或网页爬虫和其他项如:颜色深度, 视口尺寸、cookie等支持。类库可以自动适应新的浏览器、版本和设备对每一个浏览器使用独特的用户代理字符。

 

6. Opauth

opauth

Opauth 是一个开源的 PHP 库,提供了 OAuth 认证的支持,让你无需关注不同 Provider 之间的差别,提供统一标准的访问方法。目前支持 Google、Twitter 和 Facebook,其他的 Provider 支持也将陆续提供。同时也支持处理任何 OAuth 认证提供方。

 

7.pChart

pchart

pChart 是一个 PHP 类库用来创建各种图表,可从 SQL 查询、CSV 文件以及手工提供图表的数据来源。强项是图表的渲染质量,该项目开发活跃,每周都有新特性和 bug 修复。

 

8. Php Thumb

phpthumb

PHP Thumb 是一个 PHP 的类用来生成图片的缩略图。 只需数行代码即可,支持多种图片来源,包括文件系统或者数据库,支持大多数图片格式。并可对图片进行旋转、剪切、加水印等等。可执行定义缩略图的质量,提供内建的缓存以降低服务器的负载。

CSDN论坛PHP版主推荐的开发者看的书籍

 《Jquery 权威指南》

《深入PHP 面向对象.模式与实践》

《PHP5 MYSQL5 Web开发技术详解》 我买的第一版 比较多错误的地方,不过知识面比较广

《高性能Javascript》

《Javascript高级程序设计》不知道现在出到第几版了可能是第三

《MySQL5 权威指南》也许是第四版了

《PHP 和MySQL Web开发》 这本圣经可以有

《精通 正则表达式》 电子工业出版 

php基于phpQuery的通用采集类

  用phpQuery来做采集,非常地简单,没有头疼的正则表达式的困扰,类似JQ的选择器操作,很容易上手。

PHP代码
  1. <?php  
  2.   
  3.   /** 
  4.   *通用列表采集类 
  5.   *版本V1.3 
  6.   *作者:JAE 
  7.   * 
  8.   */  
  9.     require_once '../phpQuery/phpQuery/phpQuery.php';  
  10.     class QueryList{  
  11.           
  12.         private $pageURL;  
  13.          private $regArr = array();  
  14.          public $jsonArr = array();  
  15.          private $regRange;  
  16.          private $html;  
  17.          /************************************************ 
  18.          * 参数: 页面地址 选择器数组 块选择器 
  19.          * 【选择器数组】说明:格式array("名称"=>array("选择器","类型"),…….) 
  20.          * 【类型】说明:值 "text" ,"html" ,"属性"  
  21.          *【块选择器】:指 先按照规则 选出 几个大块 ,然后再分别再在块里面 进行相关的选择 
  22.          *************************************************/  
  23.          function QueryList($pageURL,$regArr=array(),$regRange='')  
  24.          {  
  25.              $this->pageURL = $pageURL;  
  26.       
  27.              //为了能获取https://  
  28.                $ch = curl_init();  
  29.                 curl_setopt($ch, CURLOPT_URL,$this->pageURL);  
  30.                 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   
  31.                 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  
  32.                 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);   
  33.                 $this->html = curl_exec($ch);  
  34.                curl_close($ch);  
  35.                  
  36.              if(!empty($regArr))  
  37.              {  
  38.               
  39.                   $this->regArr = $regArr;  
  40.                  $this->regRange = $regRange;  
  41.                  $this->getList();  
  42.              }  
  43.                  
  44.          }  
  45.          function setQuery($regArr,$regRange='')  
  46.          {  
  47.              $this->jsonArr=array();  
  48.              $this->regArr = $regArr;  
  49.              $this->regRange = $regRange;  
  50.              $this->getList();  
  51.          }  
  52.         private function getList()  
  53.          {  
  54.           &amp

phpQuery占用过多内存的解决方法

 phpQuery是一个用php实现的类似jQuery的开源项目,可以在服务器端以jQuery的语法形式解析网页元素。 相对于正则或其它方式匹配网页方式,phpQuery使用起来要方便的多。

 
在使用phpQuery采集网页时,遇到一个问题:在处理大量网页之后,phpQuery占用的内存数量非常惊人(很快就超过了1G),
 
比如这段代码:
 
while (true) {
    phpQuery::newDocumentFile($htmlFile);
    // 处理网页元素…
    echo memory_get_usage() . "
";
}
谨慎运行上面这段代码,它会很快用光你的内存。
 
经过查看phpQuery的源代码终于发现了问题所在,phpQuery在每处理一个网页就会产生一个DOMDocumentWrapper 对象,而每个DOMDocumentWrapper 对象会被保存在静态成员$documents中(phpQuery::createDocumentWrapper中),这个变量是一个数组,每解析一个网页数组元素就增加一个。
 
phpQuery::$documents[$wrapper->id] = $wrapper;
 
找到问题后,解决就很容易了,每次解析完一个网页,把phpQuery::$documents置空即可。
 
while (true) {
    phpQuery::newDocumentFile($htmlFile);
    // 处理网页元素…
    phpQuery::$documents = array();//unset(phpQuery::$documents);
    echo memory_get_usage() . "
";
}
内存占用稳定了。

CI重写规则导致404错误,硬伤啊

   最近公司的新项目在做整合,几个频道原来是不同的域名不同的站点都是独立的文件夹,现在要公用Application目录和CI库目录等文件夹,为了便于管理与避免冲突,控制器controllers文件夹里各频道的控制器分别放在一个子目录里。为了让原来的访问地址一样有效,得重写.htaccess里的RewriteRule规则。

  原来的规则:RewriteRule ^(.*)$ /index.php/$1 [L]     #隐藏了index.php

  控制器转移到了user目录里,由于我想当然地在规则里直接加上了user:

  RewriteRule ^(.*)$ /index.php/user/$1 [L]

  可是访问时出现了404错误,访问/index.php/user/controller这样的网址又是正常的。

  经过解读CI代码,发现了造成这个问题的原因:非参数方式传递控制器名等信息时,获取URI数据是从当前链接获取的,而非重写后的,导致文件夹数据丢失。

  后经CI交流群Hex提醒,在config/routes.php里设置了路由,解决了:

$route['(S+)']="user/$1";

 

 

PHP里SERVER环境变量的几个重要元素

   $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。这也就意味着大量的此类变量都会在<a href="http://www.faqs.org/rfcs/rfc3875" target="_blank">CGI 1.1 规范</a>中说明,所以应该仔细研究一下。

 
  1、$_SERVER["HTTP_HOST"]
  当前访问的域名,当端口号非80时会带上端口号。
 
  2、$_SERVER["SERVER_NAME"]
  手册里说:如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。 
  一般是输出当前访问的域名,不带端口号。网上有文章说(作者说经过测试):“默认情况下直接输出apache的配置文件httpd.conf中的ServerName值”。可是我测试时发现并非这样,依旧只是输出访问的域名。我的环境:Win7+Apache2.2.8+PHP5.4.23
 
  3、$_SERVER["REDIRECT_STATUS"]:当使用重定向时,能获取到这个元素的值。这个在多个错误页面指向同个页面的时候很有用,如:
文件:.htaccess
# .htaccess file.
 
ErrorDocument 404 /error-msg.php
ErrorDocument 500 /error-msg.php
ErrorDocument 400 /error-msg.php
ErrorDocument 401 /error-msg.php
ErrorDocument 403 /error-msg.php
# End of file.
 
文件: error-msg.php
<?php
$HttpStatus = $_SERVER["REDIRECT_STATUS"] ;
if($HttpStatus==200) {
    #some code
}
if($HttpStatus==400) {print "Bad HTTP request ";}
if($HttpStatus==401) {print "Unauthorized – Iinvalid password";}
if($HttpStatus==403) {print "Forbidden";}
if($HttpStatus==500) {print "Internal Server Error";}
if($HttpStatus==404) {print "404. Not found.";}
 
?> 
 
  4、$_SERVER["HTTP_USER_AGENT"]
  当前请求头中 User-Agent: 项的内容,如果存在的话。该字符串表明了访问该页面的用户代理的信息,也就是客户端浏览器的一些信息,可以通过 get_browser() 来获取更详细的信息
 
  5、$_SERVER["SERVER_ADDR"]
  浏览当前页面的用户的 IP 地址
 
  6、$_SERVER["REMOTE_ADDR"]
  服务器IP地址
 
  7、$_SERVER["DOCUMENT_ROOT"]
  站点根目录
 
  8、$_SERVER["SCRIPT_FILENAME"]
  当前访问页面的完整磁盘文件路径
 
  9、$_SERVER["REQUEST_TIME"]
  请求开始时的时间戳。从 PHP 5.1.0 起可用,REQUEST_TIME_FLOAT则能获取精确到小数点后两位的值
 
  10、$_SERVER["QUERY_STRING"]
  查询字符串,俗称的参数,即网址里第一个问号后面的字符串。
 
  11、$_SERVER["REQUEST_URI"]
  网址里域名后开始的字符串,包括第一个斜杠/
 
  12、$_SERVER["SCRIPT_NAME"]
  当前脚本的路径与名称,相对于站点根目录,当需要指向当前页面时,此数据非常有用。
 
  13、$_SERVER["PHP_SELF"]
  网址中域名后第一个问号前的字符串
 
  14、$_SERVER["HTTP_REFERER"]
  引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。
 
  15、$_SERVER["argv"]
  传递给该脚本的参数的数组。

Yslow 之 高性能网站建设指南(High.Performance.Web.Sites)

 YSLOW 只是 Yahoo 前端发布的一个评测网站前端质量的插件。它的原理是基于 Yahoo 前端工程师提出来的优化方案。关于YSlow的详细解释网上资料大都不详尽,而且说法有多偏差。

 

[高性能网站建设指南——前端工程师技能精粹(英文原版)].O_Reilly.High.Performance.Web.Sites

 

YSlow 的权威解释可以参照书籍《High Performance Web Sites》O’Reilly出版的。

 

电子工业出版社翻译了这本书,中文名叫《高性能网站建设指南》,想深入研究高性能网站建设的前端工程师可以看看。这本书纸质版的就二十几块钱。只有扫描版的电子版,貌似还不太清晰。

 

[高性能网站建设指南——前端工程师技能精粹(英文原版)].O_Reilly.High.Performance.Web.Sites

 

 

apache做反向代理抓后台的iis

1、Apache加载代理模块
httpd.conf
 
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
 
2、Apache站点配置
httpd-vhosts.conf
 
NameVirtualHost 192.168.0.22:80
 
<VirtualHost www.xxx.cn>
    ServerAdmin xxx@xxx.com
    ProxyPass / http://192.168.0.22:81/
    
    SetEnv force-proxy-request-1.0 1
    SetEnv proxy-nokeepalive 1
 
    ProxyPassReverse / http://192.168.0.22:81/
    ServerName www.ccc.cn
 
    ErrorLog logs/www.ccc.cn-error_log
    CustomLog logs/www.ccc.cn-access_log common
</VirtualHost>
 
 
前提
 
IIS   81 端口(或其它非80端口,Apache站点配置里代理抓取的端口与此一致)
apache2.2   80 端口
www.xxx.cn 域名指向 到 192.168.0.22
用户访问  www.xxx.cn 通过 apache 转向到 192.168.0.22 这个IP的 81端口,也就是 IIS服务。
若将 http://192.168.0.22:81改成网络上的其它存在的网站网址,则可代理访问该网站。

PHP框架大全

PHP的框架不少,先弄个列表,有空慢慢了解。

1. Yii,是一个基于组件的高性能的PHP的框架,用于开发大规模Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主体化,I18N和L10N,Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。而且这个框架的价格也并不太高。

2. Symfony 2

3. Laravel

4. CakePHP

5. Zend Framework:

6. Kohana

7. FuelPHP

8. Prado

9. Phalcon

10. Aura

11.CodeIgniter,比较容易上手的PHP框架。CodeIgniter是一个应用开发框架——一个为建立PHP网站的人们所设计的工具包。其目标在于快速的开发项目:它提供了丰富的库组以完成常见的任务,以及简单的界面,富有条理性的架构来访问这些库。使用CodeIgniter开发可以往项目中注入更多的创造力,因为它节省了大量编码的时间。

12.ThinkPHP,国人开发的PHP框架

13.Yaf,鸟哥用C开发的PHP扩展框架,也是国人的

Call to undefined function curl_init()的解决方案

   最近在开发一个天猫医药馆接入的小页面。遇到一个PHP环境造成的错误,在使用curl时出现错误Fatal error: Call to undefined function curl_init()

  试了各种办法,即将放弃的时候终于找到了正确的解决办法,现摘录如下,以备不时之需。

今天部署一个PHP应用的时候碰到一个问题,打开网页的时候显示Fatal error: Call to undefined function curl_init(),解决的方法如下

1)在php.ini里把extension=php_curl.dll的注释解开,重启apache,然后页面显示依然显示。

2)检查一下php_curl.dll的依赖,结果发现下面这几行东西 

Module: php_curl.dll

===========================

   libeay32.dll    

ssleay32.dll 

将上面的两个DLL另存至C:WINDOWSsystem32目录下;再次重启apache,发现问题还是有。

 3) 想了想,最后经过Dependency Walker软件的帮助,终于分析出了相应的DLL文件没有,libeay32.dll和ssleay32.dll是php自有的,找出了没有zlib.dll文件,然后到BAIDU去找这个缺少的DLL下载后COPY到C:WINDOWSsystem32目录下。然后重启APACHE。—问题解决了。