分类目录归档:php

PHP开启opcache以及一些参数设定

php5.5+ 自带了opcache 编译的时候指定–enable-opcache 然后vi php.ini 允许opcache.enable_cli=1 本来以为这样就可以了 好把 too young 这个参数只是给你编译了一个opache.so 自己还得加载一下这个so文件

重启php-fpm opcache就可以工作了 它会把你的php编译之后的代码缓存 查看phpinfo 你会发现有个cache hits cache misses

有时候我们可能需要不缓存某些文件

opcache.blacklist_filename(默认值:无)
Zend Optimizer + 黑名单文件的位置.
Zend Optimizer + 黑名单是一个文本文件包含了那些不能被加速的文件名.文件格式为每行一个文件名.
文件名须为一个完整的路径或者紧紧一个文件前缀
(如:/var/www/x 屏蔽了 /var/www 文件和目录中所有以 ‘x’ 开始的文件或者目录). 需要屏蔽的文件通常符合下面三个原因中的一个:
1. 目录包含了自动生成的代码, 如 Smarty 或者 ZFW 的缓存.
2. 执行加速时代码无法很好的运行, 从而耽误了编译时评估.
3. 代码触发了一个 Zend Optimizer + 的 Bug

更多详细参数看下面第一个链接
* http://www.onepx.com/update-php-5-5-opcache.html
* http://www.laruence.com/2013/11/11/2928.html

PHP中的一些坑

此贴记录下coding in php中的一些坑

先来看看switch

乍一看 应该是进入第一个case 其实不然 switch 匹配的是case中表达式的值 不能把case当if用
这里第一行case ($key >= 0 && $key <= 10)
0>=0 && 0<=10 这个条件表达式 的值为 true switch($key) 中传过来的是 0

0和true 匹配 当然匹配不上。 下面几行都是false
第二行 0 和false就搞上了(switch非严格匹配,自动转换类型) 所以当然是第二个case.

svn update XX.svn-base 系统找不到指定的文件

svn服务器架设在linux系统上,svn客户端在windows上,在update的时候可能会出现“Can’t open file.

XXXX/tmp/text-base/XX.svn-base 系统找不到指定的文件”的错误。

这是由于Linux服务器上的目标文件中存在两个相同文件名的文件。因为linux系统的文件名区分大小写,windows系统不区分文件名的大小写,例如readme.txt和ReadMe.txt在linux系统上是两个不同的文件,但是在windows下将是同一个文件,当从linux服务器更新到windows上时,就会出现上述问题。

解决办法:

TortoiseSVN –> Repo-Browser

在弹出的窗口中,选择其中重名的文件之一,右键,delete,Ok .

重新update一下。

symfony1.X 中文教程收录

  • 第一天:开始项目(中文版英文版
  • 第二天:项目(中文版英文版
  • 第三天:数据模型(中文版|英文版)
  • 第四天:控制器和视图(中文版|英文版)
  • 第五天:路由配置(中文版|英文版)
  • 第六天:更多模型知识(中文版|英文版)
  • 第七天:创建分类页(中文版|英文版)
  • 第八天:单元测试(中文版|英文版)
  • 第九天:功能测试(中文版|英文版)
  • 第十天:表单(中文版|英文版)
  • 第十一天:表单测试(中文版)|英文版)
  • 第十二天:管理程序生成器(中文版|英文版)
  • 第十三天:用户(中文版)|英文版)
  • 第十四天:休息一天(中文版|英文版)
  • 第十五天:Feed(中文版|英文版)
  • 第十六天:Web Service(中文版)|英文版)
  • 第十七天:搜索引擎(中文版|英文版)
  • 第十八天:AJAX(中文版|英文版)
  • 第十九天:Internationalization and Localization(中文版|英文版)
  • 第二十天:The Plugins(中文版|英文版)
  • 第二十一天:The Design Day(中文版|英文版)
  • 第二十二天:The Cache(中文版|英文版)
  • 第二十三天:The Deployment(中文版|英文版)
  • 第二十四天:Anther Look at symfony(中文版|英文版)

Missing argument 2 for wpdb::prepare()

wordpress升级到3.5突然出现这个问题 去footer.php查看
$post_datetimes = $wpdb->get_row($wpdb->prepare(“SELECT YEAR(min(post_date_gmt)) AS firstyear, YEAR(max(post_date_gmt)) AS lastyear FROM $wpdb->posts WHERE post_date_gmt > 1970″));
预处理丢失了一个参数
改为这样既可
$post_datetimes = $wpdb->get_row($wpdb->prepare(“SELECT YEAR(min(post_date_gmt)) AS firstyear, YEAR(max(post_date_gmt)) AS lastyear FROM $wpdb->posts WHERE post_date_gmt > %d”,’1970′));
和C语言差不多 动态绑定参数

再给个普遍点的例子,这样写法是正确的:

$wpdb->prepare( “SELECT * FROM table WHERE id = %d”, $id );

win+apache+php5.3.x+fastcgi+zend guard loader

背景:
win7+apache2.4 vc9 + php5.3.20 nts vc9 + LoadModule fcgid_module modules/mod_fcgid.so +zend gurad loader3.3
note:php5.3与zend解密组合 只能是php nts 版的 5.3版本的php包里没有php5apache2_x.dll 即不能用apache2handler方式 所以选择fastcgi

配置:
在apache的httpd.conf最下面添加如下

不能启动的问题:

1 注意如果你以前指定了PHPIniDir的位置 一定要注释掉!!!!!
2 如果出现了诡异的html无法解析 那么很有可能是缺少
DefaultType text/plain
解释:
有时会发生这样的事:服务器会被要求提供一个文档,而这个文档的类型无法由它的MIME类型映射所决定。
服务器必须通知客户端其文档的内容类型。所以当一个未知类型出现时,将会使用DefaultType 。

或者你也可以用AddType text/html .html 来指定 这句话就是指将html后缀的文件当做text/html

附加zend:
在php.ini中附加
[Zend]
zend_extension=”E:/web/php5.3.20ts/extras/ZendLoader.dll”
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3

参考资料:

http://fuzzytolerance.info/blog/apache-mod_fcgid-and-php-on-windows/

SAPI CLI CGI 名称解释

SAPI ==Server Application Programming Interface  即服务端应用编程端口
note: sapi不是isapi isapi只是sapi的一种 是微软提供的

CLI和 CGI 是不同的 SAPI。

在 PHP 4.2.0 到 PHP 4.2.3 之间的 Windows 发行包中,CLI 的文件名为 php-cli.exe,相同文件夹下的 php.exe 为 CGI。从 PHP 4.3.0 版本开始,Windows 的发行包中 CLI 的执行文件为 php.exe,被放置在一个单独的名为 cli 的文件夹下,即 cli/php.exe。在 PHP 5 中,CLI 存在于主文件夹中,名为 php.exe,而 CGI 版本名为 php-cgi.exe

从 PHP 5 起,一个名为 php-win.exe的新文件随包发布。它相当于 CLI 版本,但是 php-win 不输出任何内容,便不提供控制台(不会弹出“DOS 窗口”)。这种方式类似于 php-gtk。需要使用 –enable-cli-win32选项来配置它。

Note: 如何得知自己使用的是哪个 SAPI?

在命令行下,运行 php -v 便能得知该 php 是 CGI 还是 CLI。请参考函数 php_sapi_name() 以及常量 PHP_SAPI

string php_sapi_name ( void )

Returns a lowercase string that describes the type of interface (the Server API, SAPI) that PHP is using. For example, in CLI PHP this string will be “cli” whereas with Apache it may have several different values depending on the exact SAPI used. Possible values are listed below.

Returns the interface type, as a lowercase string.

Although not exhaustive, the possible return values include aolserverapacheapache2filterapache2handlercaudiumcgi (until PHP 5.3), cgi-fcgiclicontinuityembedisapilitespeedmilternsapiphttpdpi3webroxenthttpdtux, and webjames.

以上是引用的官方文档  从这里我们可以看出 cgi apache2handler fasctcgi isapi 都只是一种sapi而已!!!

区别我们在上一篇文章可以看到

php cgi fast-cgi cli isapi apache模式

php一共分为五大运行模式:包括cgi 、fast-cgi、cli、isapi、apache 模块的 DLL

CGI
CGI即通用网关接口(Common Gateway Interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执 行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。
CGI方式在遇到连接请求(用户 请求)先要创建cgi的子进程,激活一个CGI进程,然后处理请求,处理完后结束这个子进程。这就是fork-and-execute模式。所以用cgi 方式的服务器有多少连接请求就会有多少cgi子进程,子进程反复加载是cgi性能低下的主要原因。都会当用户请求数量非常多时,会大量挤占系统的资源如内 存,CPU时间等,造成效能低下。

CGI-FCGI
fast-cgi 是cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。
继续阅读

php各种运行模式

人都搞晕了 总结一下:
php用很多运行模式 基本上我们在win下开发中常用的都是把php当做apache一个模块 通过LoadModule php5_module “E:/path/php5apache2_x.dll 来生效

这就是典型的模式了

APACHE2HANDLER
PHP作为Apache模块,Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出 现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计 算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。
apache模块的DLL:
该运行模式是我们以前在windows环境下使用apache服务器经常使用的,而在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。(是apache在CGI的基础上进行的一种扩展,加快PHP的运行效率)
isapi  apachle module (loadmodule  xxxx.dll)都是多线程
fastcgi 是多进程
nts版本的php适合fastcgi
ts版本的php适合isapi or Apache  2.x  Handler

参考资料:我就不复杂粘贴了

wamp缺少Zend Optimizer(Zend Guard Loader)的解决办法

在网上down了一套源码  发现经过zend加密  缺少Zend Optimizer 奈何wamp集成包根本没有这个组件   几经摸索  终于解决php5.3.x缺少Zend Optimizer  的问题  特此记录下来 。

1版本问题

php5.3.x 不能用zend optimizer  取而代之的是zend guard loader

Product Version Format/Size Notes
Zend Guard 5.5.0 (EXE) 59.88 MB Release Notes
Zend Optimizer (Runtime for PHP 5.2 and earlier) 3.3.3 (ZIP) 0.33 MB Release Notes
Zend Guard Loader (Runtime for PHP 5.3) 5.5.0 (ZIP) 0.07 MB Release Notes

PHP5.3.x版本如果想使用Zend Guard Loader,必须下载NTS的版本,而且必须是VC9编译的。这两点一定要注意,有一个不对都没法用Zend Guard Loader。

悲剧的是我发现wamp所带的php基本上是ts版本的(这个在phpinfo中可以看到)。。

 

1 no_ssl 与openssl

在apache官网上 我们发现windows版本有两种类型 分别是no_ssl和openssl

openssl多了个ssl安全认证模式,它的协议是HTTPS而不是HTTP,这就是带有SSL的服务器与一般网页服务器的区别了。一般情况下,我们下载no_ssl版本的就ok了。

2