背景:php-fpm一般来说是够用,难免不够用,一是怎么样看,二是怎么样判断是否真够用,博主用了一个命令:netstat -anpo | grep "php-cgi" | wc -l 去和自己配置php-fpm.conf作对比,再者是对nginx出现各种错误都出现502揽在自己身上了,于其说nginx是为了安全,还不如说是也给排查问题增加了难度,再就是超时等,nginx有nginx的超时,php有php配置的超时,双方都是一个相互关联的问题,这些都是对于lnmp架构里经常遇到的问题。

统计Nginx日志里有502的行数有一个大体的了解,如下:
cat a.txt
183.60.235.59 - - [31/Jan/2015:00:00:06 +0800] "GET /forum/0/index.html HTTP/1.1" 302
183.60.235.59 - - [31/Jan/2015:00:00:06 +0800] "GET /forum/0/index.html HTTP/1.1" 302
183.60.235.59 - - [31/Jan/2015:00:00:06 +0800] "GET /forum/0/index.html HTTP/1.1" 502
183.60.235.59 - - [31/Jan/2015:00:00:06 +0800] "GET /forum/0/index.html HTTP/1.1" 302
183.60.235.59 - - [31/Jan/2015:00:00:06 +0800] "GET /forum/0/index.html HTTP/1.1" 302
183.60.235.59 - - [31/Jan/2015:00:00:06 +0800] "GET /forum/0/index.html HTTP/1.1" 302

cat a.txt |awk '{print "line:"NR " status:"$9}'|grep 502
line:3 status:502

——————————————————————————————————————————————
Nginx 502的触发条件

  502错误最通常的出现情况就是后端主机当机。在upstream配置里有这么一项配置:proxy_next_upstream,这个配置指定了 nginx在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况拉,默认是error timeout。error就是当机、断线之类的,timeout就是读取堵塞超时,比较容易理解。我一般是全写上的:

proxy_next_upstream error timeout invalid_header http_500 http_503;  不过现在可能我要去掉http_500这一项了,http_500指定后端返回500错误时会转一个主机,后端的jsp出错的话,本来会打印一堆 stacktrace的错误信息,现在被502取代了。但公司的程序员可不这么认为,他们认定是nginx出现了错误,我实在没空跟他们解释502的原理 了……
阅读全文
背景:当用popen打开多个command时会出现重用变量,二是会用连字符进行连接command返回的变量,两次popen会有两个地方出现问题。
$handle = popen($command, "r");
        do {
            $excuteResult = fread($handle, 2024);
            if (strlen($excuteResult) == 0) {
                pclose($handle); //关闭pipe
                break;
            }
            $excuteResultAll .= $excuteResult;
        } while (true);
//这儿用到的$excuteResultAll 变量,下面还要用,防止污染,则需要给NULL值清空,用unset后需要再定义一次相同的变量,否则会出现:
Undefined variable: excuteResultAll in /data/htdocs/jackxiang.com/index.php on line 354
        do {
            $excuteResult = fread($handle, 2024);
            if (strlen($excuteResult) == 0) {
                pclose($handle); //关闭pipe
                break;
            }
            $excuteResultAll .= $excuteResult;
        } while (true);

______________________________小demon实践如下:______________________________
php null.php
<?php
$foo = "";
$foo = "jack";
unset($foo);
$foo .= "xiang";
$vars = get_defined_vars();

通过unset后,$foo变量用点连接时运行如下:
[22-Sep-2014 14:29:59 Asia/Shanghai] PHP Notice:  Undefined variable: foo in /tmp/null.php on line 6
[foo] => xiang
而不用unset而用NULL后:
<?php
$foo = "";
$foo = "jack";
$foo = NULL;
//unset($foo);
$foo .= "xiang";
$vars = get_defined_vars();
print_r($vars);
解决了这个变量的问题:
[foo] => xiang

说明这样做是可行的,完毕。
iframe跨域传值超过2M的问题解决
使用iframe进行传值时,如果采用URL的方式传递,则最大只能传递大约2k的数据,超过这个长度就会被截断了,那么是否可以采用post的方式传值呢?答案是可以的,我们可以采用js创建一个form表单,并将此form提交到iframe上,这样就能做到打破2k数据的限制。


还需要注意2个问题:

1 tomcat下post不能超过2M的问题
这个需要将tomcat的配置文件server.xml修改一下:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" maxPostSize="0"/>
maxPostSize为0时,表示不用限制长度。

2 跨域的问题
跨域不影响iframe的post传值,发送方的tomcat无需更改,只是需要将接收方的tomcat的maxPostSize修改为0即可。

来自:http://housen1987.iteye.com/blog/1695065
/*
Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of getimagesize(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. ind:\vhost\include\inc_custom_fields.php on line178
*/

我把php.ini的display_errors = on改成display_errors = off // (不显示错误)
就不显示了。

虽然没有什么影响。但是心里还是有个疙瘩。。。
百度上没有找到什么答案,然后在google上 找到了。

修改php.ini就可以了。

1. 在PHP.ini中搜索关键字 : allow_call_time_pass_reference 没有的自行建立。
2. 将 Off 改成 On ,Web Server重起就OK了~
allow_call_time_pass_reference = Off 变成 allow_call_time_pass_reference = On


ps

文档注解为:

是否启用在函数调用时强制参数被按照引用传递。此方法已不被赞成并在 PHP/Zend 未来的版本中很可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。鼓励大家尝试关闭此选项并确保脚本能够正常运行,以确保该脚本也能在未来的版本中运行(每次使用此特性都会收到一条警告,参数会被按值传递而不是按照引用传递)。

在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函数声明时指定那个参数需要通过引用传递。


可以在函数里修改外面变量的值:


这样写就有前面描述的一系列问题:


说白了就是不能传一个地址给一个定义的函数参数里不是地址,这会有问题。
这块特别是在foreach这块的php实现上可能有一点缺陷也好,总之,想抛弃c的&取地址符号是php简单的根源。

执行结果如下:
---------- 调试PHP ----------
Deprecated: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of test1().  If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in D:\wamp\www\array_walk.php on line 11

PHP Deprecated:  Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of test1().  If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in D:\wamp\www\array_walk.php on line 11
输出完成 (耗时 0 秒) - 正常终止



像pdo的foreach陷阱和这有关,究其原因, 也就是bindParam和bindValue的不同之处, bindParam要求第二个参数是一个引用变量(reference),引用这种东东在PHP里出现其实怎么说好呢,有它有好处,用不好大大的坏,陷阱的根源,像c不是c的PHP的问题是PHP发展的争议根源,如果多都用c里的特性,那PHP完全可以成为一个类java的常驻内存server,乃至内存实现上也可有进步,但会编写复杂,掌握难度加大:
http://weibo.com/1170999921/ylgFcpe1f
http://www.laruence.com/2012/10/16/2831.html
https://jackxiang.com/post/7425/
背景:时下都流行enum类型的使用tinyint,那enum就真没有用的价值了么?
PHP低级编程的兄弟是这样来看这个问题的,我作下笔录如下,期望能客观的理解这个enum字段的优点及缺点:
膘哥观点:
    enum有优点。但个人觉得。。。缺点更多,客观的讲:优点主要是在建数据 库的时候就可以把一些值给规范好。缺点是。。enum不适合PHP。主要是PHP是弱类型,如:你insert into ..... set a= 1,你没法知道你是想 a= '1' 还是 a= 1(a='1'是插入值1,a=1是插入enum的第一个值,尤其php弱类型的,如果int的,很少有人在sql里加双引号。),这是PHP和mysql 在使用enum 最大的问题。所以。。安心点啦。干脆点直接tinyint。

单曲观点:
    我觉得没什么优点,对数字型的enum,简直就是梦魇,boolean  tinyint(1) 0,1 status  tinyint(1)  1,2,3,4,5,6..tinyint欢淫你~~。如:audit_result enum(1,2,3),set audit_result = 1;...容易出现膘哥所说的混淆。

简单观点:
   少用,一般都是用tinyint替代。

天枫观点:
   我觉得除了状态直观  没什么优点,我一般直接int,tinyint([1or2or3]) 到底有啥区别?(后面会简单探讨下,这里面的1or2or3区别。)

中庸观点:
   a=1是插入enum的第一个值,尤其php弱类型的,如果int的,很少有人在sql里加双引号,基本上是不加引号的。

竖琴螺观点:
   六种情况就:tinyint(1)  -1,-2,1,2,3,4

上面各种观点重点集中在PHP这种弱类型语言对引号不重视,
程序员不写容易引起插入的语句不是自己想要的结果的问题,
容易出现int时没有用引号导致插入了新值而不是定的那个值:


结论:要插入enum的值,字段必须加引号,不加引号当然是数字,数字就是key,不是value。
规劝:
1)enum是整型这样的错误很容易发生,尤其是php弱类型的,一般新来一个人,没注意enum类型,就会犯错。
2)数据库说明清楚的话,或者可选择的全是字符串的话,还没什么,但是里面有数字,难免有新手犯错,养成加引号的习惯很重要。
最终结论:
历史原因,要把enum改成tinyint程序改动太大了,用了的没必要改·~,以后新建的时候,尽量使用tinyint就好。
这种字段的重复内容过多的,索引建不建,关系不大,这种在mysql叫索引的势太低,其查询效果不太好:(英文是这么翻译的:https://jackxiang.com/post/1405/)。
————————————————————————————————————————————————————————————————————
tinyint(1)和tinyint(4)一样的,都是-127到128或者0到256。unsigned属性全是正,和c语言unsigned int有点类似:
tinyint(1)   -128 ~ 127
tinyint(1) unsigned  0 ~ 255

为何表示的最大正数比最小负数的绝对值少1呢?
第一位是符号位,1表示负数
所以负数可以到128,正数只能到127
-128正127
如:0111 1111  正数  ,负数 1111 1111
提问:
Mysql里int(1)和int(11)差别很大的,mysql的int,有个属性 ,UNSIGNED ZEROFILL  后面的ZEROFILL,就是有定义的位数不够则用零补齐对齐一下(这儿可能涉及到索引的性能罢):int,  长度(M)=5, 属性=UNSIGNED ZEROFILL(无符号,用0来填充位数),00001,00002。
但这个tinyint呢,tinyint(1)和tinyint(4)一样的?
看这文章后:http://blog.csdn.net/lysygyy/article/details/5983433
我估计:mysql这块对一个字节不像int这种四个字节要进行对其前部分进行部分字节索引,如果说tinyint(1)和tinyint(4)是一样的表示范围情况下,但mysql对tinyint数字长度位数作了可设置的限定,从理论上说其存在硬盘里的字节是不一样才是合乎逻辑的,这块估计还是为了对字节进行对齐方便索引等,以提升效率为主罢,l如:ike keyword%    索引有效,如果统一对齐,索引效果会不会更好呢?我也只是猜测。
————————————————————————————————————————————————————————————————————
在网上找了下这个enum的mysql的大体实现如下:
一)enum的存储原理我仔细查看了下手册。是这样的:
在建立这个字段时,我们会给他规定一个范围比如enum('a','b','c'),这时mysql内部会建立一张hash结构的map表,类似:0000 -> a,0001 -> b,0002 -> c。
当我插入一条数据,此字段的值位a或b或c时,他存储在里面的不是这个字符,而是对应他的索引,也就是那个0000或0001或0002。
同样,enum在mysql手册上的说明:
ENUM('value1','value2',...)
1或2个字节,取决于枚举值的个数(最多65,535个值)
除非enum的个数超过了一定数量,否则他所占的存储空间也总是1字节。


二)tinyint:
类型  字节  最小值  最大值
      (带符号的/无符号的)  (带符号的/无符号的)
TINYINT  1  -128  127
他的最小存储所占空间也是1字节。


最后,Enum,既然要用它,就不必要使用什么0,1,2来代替实际的字符串了。甚至中文字符串。他并不会对数据库性能进行多余开销。因为对于它来说,你使用'0','1','2'和'张三','李四','王五'数据表所占的存储空间一样。但是考虑到我们实际应用时数据需要从db服务器回传到web app,所以在网络传输时,当然还是尽可能的传输小数据比较好。所以如果很在意这些,还是不用它好了。


mysql中关于bit,enum,tinyint三种数据类型的差别 :
http://blog.csdn.net/shadowsniper/article/details/7071004

慎用mysql的enum字段:
http://www.neatstudio.com/show-1498-1.shtml
背景:最近vps上安了PHP Version 5.4.30,没有加速器...性能不高,加上vps硬件不行,还得加上一个ea啥的,apc,有一个lpcache.so不错,安上。

PHP5.5开始内置了Zend OPcache的缓存系统,这个系统在5.2-5.4下也是可以使用的。经过测试,在php5.4下的加速性能明显,效果比5.2+ea还要好,在此推荐安装。
CentOS6中yum源中已经有git的版本了,可以直接使用yum源进行安装
yum -y install git
编译步骤:
git clone git://github.com/zend-dev/ZendOptimizerPlus.git
cd ZendOptimizerPlus
$PHP_DIR/bin/phpize
./configure \
  --with-php-config=$PHP_DIR/bin/php-config
make && make install

./configure --with-php-config=/usr/local/php/bin/php-config

配置步骤:

在 php.ini 内增加

zend_extension=/...full path.../opcache.so

下面这段是官方推荐的配置参数,可以更加提升性能,建议使用:

opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

另:PHP5.5下只需要编译时增加 --enable-opcache 参数即可:


静态编译配置不配置无所谓了?
PHP是这样的:
[root@jackxiang ~]# php -v
PHP 5.5.15 (cli) (built: Aug 10 2014 15:18:31)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
但好像用那个下载的php统计好像说是没有发现这个opcache,奇了怪了,呵。
ocp.php?FILES=1&GROUP=2&SORT=3
出现:Opcache not detected?
原因:
配置好这个opcache后没有重启php-fpm,所以,重启动好了。
[root@jackxiang ~]# php -m|grep OP
Zend OPcache
Zend OPcache
————————————————————————————————————————

出现:You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
如果想看到底命中多少百分比的opcache,有个php可以运行下:
https://gist.github.com/ck-on/4959032/download#

configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
说需要安装re2c
执行以下命令
wget http://sourceforge.net/projects/re2c/files/re2c/0.13.5/re2c-0.13.5.tar.gz/download
tar -zxvf re2c-0.13.5.tar.gz
cd re2c-0.13.5
./configure && make && make install


推荐使用:Zend OPcache 控制面板:
https://gist.github.com/ck-on/4959032

来自:http://chen.so/post/71/
http://www.laogui.com/Zend-Opcache
新一代 PHP 加速插件 Zend Opcache:
http://www.laogui.com/Zend-Opcache
最后,
效果还是有的,这个数值表现出的效果是相当的明显:
Cache hits   15338969
Cache misses   294
————————————————————————————
op于ea的性能对比:http://dafengzi.com/?p=4


是否可以一起安,更牛x呀,哈哈:Add Time:2014-08-20
————————————PHP高级研究群———————————————
PHP里的Zend的OPcache 和 eaccelerator 同时使用是不是效果更好?
上午 10:49:58
啥也不会
14/8/20 星期三 上午 10:49:58
会冲突
七夜
14/8/20 星期三 上午 10:51:58
直接opcache就行

————————————低级PHP码农———————————————
PHP里的Zend的OPcache 和 eaccelerator 同时使用是不是效果更好?
【活跃】[沪部]-莫莫
14/8/20 星期三 上午 10:40:19
胡扯的吧
【活跃】[沪部]-莫莫
14/8/20 星期三 上午 10:40:28
opcache  选一个吧
【活跃】[沪部]-莫莫
14/8/20 星期三 上午 10:40:33
选opcache 吧
上午 10:40:50
【活跃】[沪部]-莫莫
14/8/20 星期三 上午 10:40:50
两个功能重叠了 你觉得好吗?【


听说高版本的PHP连Memcache都自带了,莫莫给了一文章:
http://blog.csdn.net/zqtsx/article/details/23942605
摘录片段:
安装MEMCACHE,和OPCACHE扩展
(因为php5.5X+版本已经内置了memcache和opcache扩展,所以不必另行下载,即可采用以下方式进行编译)
1.memcache
如果需要为php增加memcache扩展,按如下方法进行:
cd /usr/local/php/bin
./pecl install memcache

安装时会提示是否开启session支持,根据需要输入no 或者 yes,安装后路径如下:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/memcache.so

需要手动配置到php.ini中,增加如下内容,即表示启用memcache扩展:
extension=memcache.so
保存后,重启Apache,或PHP-FPM。


/usr/local/php/bin/pecl install memcache
Installing shared extensions:     /tmp/pear/temp/pear-build-root9N8MRR/install-memcache-2.2.7/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/
一阵编译......
Build process completed successfully
Installing '/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/memcache.so'
install ok: channel://pecl.php.net/memcache-2.2.7
configuration option "php_ini" is not set to php.ini location
You should add "extension=memcache.so" to php.ini

service php-fpm restart

看样子,这个pecl是想做一个类linux的yum 或apt-get啊。
从InnoDB引擎转换成MyISAM引擎,看完本文,你应该懂得如何操作以把MyISAM引擎转换成InnoDB引擎了(请确保InnoDB开启,MySQL命令行下SHOW ENGINES命令查看)。

mysql> ALTER TABLE  boblog_history   ENGINE=InnoDB;
Query OK, 2808 rows affected (0.76 sec)
Records: 2808  Duplicates: 0  Warnings: 0

ALTER TABLE  boblog_blogs     ENGINE=InnoDB;
ALTER TABLE  boblog_calendar  ENGINE=InnoDB;
ALTER TABLE  boblog_categoriesENGINE=InnoDB;
ALTER TABLE  boblog_counter   ENGINE=InnoDB;
ALTER TABLE  boblog_forbidden ENGINE=InnoDB;
ALTER TABLE  boblog_history   ENGINE=InnoDB;
ALTER TABLE  boblog_linkgroup ENGINE=InnoDB;
ALTER TABLE  boblog_links     ENGINE=InnoDB;
ALTER TABLE  boblog_maxrec    ENGINE=InnoDB;
ALTER TABLE  boblog_messages  ENGINE=InnoDB;
ALTER TABLE  boblog_mods      ENGINE=InnoDB;
ALTER TABLE  boblog_pages     ENGINE=InnoDB;
ALTER TABLE  boblog_plugins   ENGINE=InnoDB;
ALTER TABLE  boblog_replies   ENGINE=InnoDB;
ALTER TABLE  boblog_tags      ENGINE=InnoDB;
ALTER TABLE  boblog_upload    ENGINE=InnoDB;
ALTER TABLE  boblog_user      ENGINE=InnoDB;

来自:http://www.samhere.net/mysql_innodb_to_myisam.html
当访问 https 时,跳 http:



来自:http://www.nowamagic.net/librarys/veda/detail/287
https://github.com/netputer/netputweets/commit/009286e9f4b8bdbe0b7fb2e3c4824265d43b877b
PHP Fatal error:  Call to undefined function session_is_registered() in
Fatal error: Call to undefined function session_register() in

听说是有安全问题,容易被猜中,so,这个函数已经被废弃了。。。
一、检查php.ini里面register_globals=是否设置为on。或者是直接使用session_start();然后用$_session[],取值。
二、将session_register("autonum");变成$_SESSION["autonum"];就可以解决旧版本转换新版本
这个直接用国内的也成,实践OK:
http://tieba.baidu.com/p/3086275811

一、wordpress博客最近变慢之解决(fonts.google.com)

进入wordpress后台管理,选择“外观”,再选择“编辑”。
在右边,选择“模板函数(functions.php)”

注意:多个模板时有一个下拉:
模板
模板函数(functions.php)

然后在左边的编辑框内,查找googleapis.com
然后按如图的方法注释掉这行。
然后再点“更新文件”
好了,就完成了。
需要注意的是,这样操作后,你查看博客文章的源码,还是可以看到fonts.googleapis.com的引用那行。
但是只要退出管理员登录wordpress后,就可以看到,源码里,已经没有这行了。

来自:http://blog.csdn.net/metababy/article/details/28892173

二、Wordpress 只能将修改保存到可写的文件。参见Codex文档以了解更多。

使用wordpress的朋友都知道wordpress博客程序后台有个主题编辑器,是让我们方便的在后台直接编辑修改主题源文件用的,小简觉得这个功能很实用也很方便!
小简用nginx服务器装wordpress的时候,在这个wordpress网站后台主题编辑器的使用上遇到了点问题!可以确定wordpress数据完整搬移!
像以前,小简在wordpress后台使用主题编辑器修改完代码后下面有一个“更新文件”的按钮!我们只要点一下这个按钮,修改的内容就可以保存了。
小简把网站数据搬到服务器后,在wordpress后台主题编辑器里修改了一些源码,改完后想就去点击“更新文件”按钮,却发现更新按钮不见了,在原来那个地方找不到那个按钮了!(如图)
--------------------------------------------------------------------------------
原来显示“更新文件”的那个位置变成了“文档:函数名(下拉框)“查询”按钮,下面还有一行字“只能将修改保存到可写的文件。参见 Codex 文档以了解更多。”
--------------------------------------------------------------------------------
权限
现在小简面临的问题是,wordpress后台主题编辑器里编辑好的代码,无法保存?
出现问题当然要解决了,这个问题其实很简单,涉及到了权限问题,记得小简曾经分享过pureftpd新建FTP账户无法管理文件(没有权限)的解决方法,同样的权限问题!
在之前小简已经分享过lnmp搭建WordPress博客后台不能显示所有主题和无法编辑主题的问题的解决方法,这个算是小简遇到的第二个关于wordpress后台主题编辑器的问题。。。
解决方法很简单,我们ssh使用命令:
查看源代码打印帮助1 chown www:www -R /home/wwwroot/www.jannn.com/
其中/home/wwwroot/www.jannn.com/这个是古月小简博客的目录路径,你需要改成你自己网站的!然后刷新下,后台主题编辑器就可以恢复正常了!
关于目录属主和属组修改代码解析
chown www:www -R /home/wwwroot/www.jannn.com/
命令中第一个www为UID,第二个www为GID, -R递归
UID是拥有者ID(User ID)也就是用户ID
GID就是群组ID(Group ID)
Linux系统中的所有文件/文件夹都有拥有者ID和群组ID,即UID和GID.
一般从一个服务器迁移应用程序到另一个服务器时将需要更改文件/文件夹的所有者.
如果你之前服务器上文件/文件夹所有者为root,如果我们没有更改文件/文件夹的所有者,那么使用ftp账户执行操作(比如写入)就不能正常操作!同样,Wordpress等程序也无法正常上传附件,在wordpress后台主题(插件)编辑器中对源文件做了修改也如法写入保存。
代码中利用chown指令将目录的所有权限指派为www用户及www组

来自:http://www.jannn.com/1356.html
背景:作为swoole项目的顾问,平时工作时间很少看QQ群里如此有系统讲到swoole的热重启实现,特转载。
阅读全文
前面不成立,后面就不运行了,解决这个问题很简单如:

这样就很好的解决这个问题了。
来自:http://www.111cn.net/phper/31/46438.htm

Notice: Undefined offset 的解决方法,
在PHP 5.3.5中出现Undefined offset: 0的解决方法:
http://blog.csdn.net/jallin2001/article/details/6644194

附带:
解决phpmyadmin安装过程中Notice: Undefined offset: 以及Function eregi() is deprecated 的报错信息:
http://jackxiang.com/post/7028/

解决办法:在php.ini里面设置error_reporting = E_ALL & ~E_NOTICE,error_reporting 不能有分号,有分号表示不使用这个设置。如果有多个error_reporting,以最后一个为准。 操作后,问题解决。
; error_reporting
;   Default Value: E_ALL & ~E_NOTICE
;   Development Value: E_ALL | E_STRICT
;   Production Value: E_ALL & ~E_DEPRECATED

;   E_ALL & ~E_NOTICE  (Show all errors, except for notices and coding standards warnings.)
;   E_ALL & ~E_NOTICE | E_STRICT  (Show all errors, except for notices)
;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
;   E_ALL | E_STRICT  (Show all errors, warnings and notices including coding standards.)

   这问题很常出现在数组中的,程序是能正确地运行下去,但是在屏幕上总会出现这样的提示:Notice: Undefined offset: ….. 网上普遍是采用抑制其显示的方法,即更改php.ini文件中error_repoting的参数为”EALL & Notice “,这样屏幕就能正常显示了.
问题是解决了,但是总想不透offset:接下去的数字(如 Notice: Undefined offset: 4 ….)是什么意思.还有,句子里的语法明明是正确的,为什么会出现警告.冷静地思考了好几遍并尝试了每种可能
终于找到了答案.offset:接下去的数字是出错的数组下标,一般是超出了数组的取值范围,如定义了数组$A[]有10个元数,如果出现了$A[10]就会出现错误(Notice: Undefined offset: 10 ….),因为数组的下标是从0开始的,所以这个数组的下标就只能是0~9.因此在出现这类问题时,不要急于用抑制显示的方法(更简单的可以在当前文件的最前面加上一句”error_reporting(填offset:接下去的那个数字);,一定要注意你所用的数组下标,仔细思考一下,问题一定会很快得到解决的 !发也有可能是unset数组后再尝试读取其内容,php手册中有:

$array[1] ='www.111cn.net';
echo $array[0] ;
输入结果是
Notice: Undefined offset: 1 in D:wwwrootwraskseo404.php on line 5 下面我们来看解决办法
解决这个问题很简单如

echo isset($array[0])?$array[0]:'数组未定义';
这样就很好的解决这个问题了。
来自:http://www.111cn.net/phper/31/46438.htm

实践如下:

---------- 调试PHP ----------
数组未定义
输出完成 (耗时 4 秒) - 正常终止


来自:http://wenwen.sogou.com/z/q309347664.htm
背景:装了个php,说是现在apc和ea都不行了,这个叫opcache的比较牛x,来处:http://www.laruence.com/2013/11/11/2928.html
一、不同,就是不一样:
不同于APC, O+除了是Opcodes Cache以外, 还做了很多的Opcodes优化, 这个PPT就是主要列举了一下主要的优化们.
也不同于eacc, O+做的优化更多一些.
这个特性, 就使得O+要比APC快不少, 从Benchmark来看(Zend/bench.php), O+能节省5%的CPU IR, 能快7%以上.
另外就是, 随着Opcache进入PHP源代码树, APC我们也就不在做更新了, 主要的精力都迁移到了O+的进一步开发上.
所以, 建议大家都切换O+吧(支持5.2 到最新的5.5). 基本上只需要改一个配置, 你就能得到性能提升, 何乐而不为呢? 是吧.

二、在哪儿才能下载得到呢?
http://pecl.php.net/package/ZendOpcache

三、一个Opcache的推荐配置:
[opcache]
zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so
opcache.enable_cli=1
opcache.memory_consumption=128 ;共享内存大小, 这个根据你们的需求可调
opcache.interned_strings_buffer=8 ;interned string的内存大小, 也可调
opcache.max_accelerated_files=4000 ;最大缓存的文件数目
opcache.revalidate_freq=60 ;60s检查一次文件更新
opcache.fast_shutdown=1 ;打开快速关闭, 打开这个在PHP Request Shutdown的时候
// 会收内存的速度会提高
opcache.save_comments=0 ;不保存文件/函数的注释


[Zend Opcache]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so"
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
;opcache end
背景:买了个vps云主机,安了一个lnmp,发现nginx启动后,其没法访问,通过curl又能访问,但22端口又可以使用,原来是防火墙给挡住了,so,得让防火墙给打开这个80端口可以访问,方法如下。
阅读全文
背景:PHP探针里有一个:服务器实时数据(CPU型号 [4核] ...)  网络使用状况(eth1 :  已接收 : 1.03612 GB  已发送 : 0.20958 GB) 这个是肿实现的?
阅读全文
背景:群里讨论的,我也没用过,一搜索以前我也贴过类似的:http://jackxiang.com/post/7226/  ,先记下吧。
http://XX.XX.com/group/456/articles/show/134097  (应该是来自某大公司内网做了改造。)
这是我们之前对pb4php做的改造
1.补充了sint32、sint64和fixed32等常用数据类型的支持
2.增加了DebugString调试函数支持。

阅读全文
背景:新窗口打开下载页时出现Firefox第一次会提示拦截。

window.open() 可谓是 弹窗广告的利器, 不过因为浏览器的拦截机制越来越完善, 打开几率也越来越低了.
之前在百度上看到很多种写法,如:
    通过 js 去触发某按钮的click事件
    通过 js 去触发某form的submit事件,并且form的target 设置为_blank
    不过经过我的测试,发现都已经不再兼容了于是想到了下面这个办法:



加入关闭功能:

其中用到的原理就是
通过用户真实的点击 触发window.open() 打开一个新窗口(因为是真实的用户行为,浏览器会认为是用户意愿,不会进行拦截)
然后再通过js去更改新窗口的 location

来自:http://www.phplover.cn/post/480.html


原理:
window.open是javascript函数,该函数的作用是打开一个新窗口或这改变原来的窗口,不过一般用来的是打开新窗口,因为修改原来的网页地址,可以有另一个函数,那就是window.location,他可以重定向网页地址,使网页跳转到另一个页面。

我现在要说的是window.open函数的几个使用策略,一般情况下,如果你直接在js中调用window.open()函数去打开一个新窗口,浏览器会拦截你,认为你将弹出广告等用户不想得到的窗体,所以如果不想让浏览器拦截你,你可以将这个函数改为用户点击时触发,这样浏览器就认为是用户想访问这个页面,而不是你直接弹出给用户。

所以常用的方法就是在超链接里加入onclick事件,如<a href="javascript:void(0)" onclick="window.open()"></a>这样用户点击这个超链接,浏览器会认为它是打开一个新的链接,所以就不会拦截。

可是有时候我们会遇到想要弹出一个窗口,可是却是在onckick事件执行后,才去弹出来的,这时就会被浏览器拦截,我们可以通过下面的方法来避免,就是先用window.open打开一个窗口,然后修改地址。如var tempwindow=window.open('_blank');打开一个窗口,然后用tempwindow.location='http://www.baidu.com';使这个窗口跳转到百度,这样就会呈现弹出百度窗口的效果了。

方法二:
由于在使用window.open时,在很多情况下,弹出的窗口会被浏览器阻止,但若是使用a链接target='_blank',则不会,基于这一特点,自己封装了一个open方法:

实践OK代码如下所示:

调用方式如下:
<input type="button" id="btn" value="向东博客" onclick="openwin('http://jackxiang.com');" />
php 一行行读取文本文件:


PHP获取文件行数:
背景:
下面是获取文件的行数的方法:
一个文件如果知道有几行的话,就可以控制获取一定的行数的数据,然后放入数据库。这样不管的读取大文件的性能,还是写入数据库的性能,都能得到很大的提高了。
下面是获取文件的行数的方法

接下来好操作了吧?
以下的程序主要是每次最大入库1000条,余数不足1000的就入余数。
入库10W条数据时间也才几秒,所以说性能是大大滴的好的。


如果你还有更好的操作文件的方法,或者是更好的入库的方法,可以联系我,我们交流下。

来自:http://www.redyun.net/technology/101.html
原创:http://blog.csdn.net/spring21st/article/details/8439172
http://www.wenlingnet.com/index.php/172/
使用PHP将大文件导入到数据库中:
http://www.love4026.org/313613/%E4%BD%BF%E7%94%A8php%E5%B0%86%E5%A4%A7%E6%96%87%E4%BB%B6%E5%AF%BC%E5%85%A5%E5%88%B0%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%AD/
背景:在虚拟主机域名里安装dokuwiki,出现:Parse error: syntax error, unexpected $end, expecting ',' or ';' in /home/jackxiang/domains/jackxiang.com/public_html/wiki/inc/html.php on line 1082  ,但是自己的测试机用的apache里没有这个问题,Nginx下也没有这个问题,查了下,原来是虚拟主机没有打开:short_open_tag:short_open_tag  On  On 。
PHP报错:Parse error: syntax error, unexpected $end, expecting T_FUNCTION in...
The error may caused by a missing curly bracket in PHP script coding. Beside, it may also caused by error in PHP coding in class definition, as in PHP, a class definition cannot be broke up and distributed into multiple files, or into multiple PHP blocks, unless the break is within a method declaration.



首先要检查是不是缺少了PHP脚本的结束标记, "?>" 或者缺少了 ";"或者是“}”;还有一个原因是一个PHP类的代码不能在多个文件或者多个PHP块。
原来Parse error 提示一般是 语法错误,使用了开放的标签,语句没有结束 也就是编程基本的一些错, 比如没注意 语句结束加 ";" 或者 if(){...} 后面忘了"}"  ;〈?php...?〉忘了“?〉”。仔细检查代码,果然是一处漏掉了“}”,修改程序正常运行.
But more commonly, the error is often caused by the use of Short Open tags in PHP,
To use short open tags, it must be enabled in PHP.INI. Search for short_open_tag in PHP.INI, and change the value to On. The line should look line:

short_open_tag = On


如果没有错,则:
其实更多的也是最主要的是因为使用了<? ?>的简写标签,这就需要在PHP.ini中开启短标签,设置方法是打开php.ini,找到short_open_tag = Off,修改为short_open_tag = On。
short_open_tag  On  On
来自:http://hi.baidu.com/luoziding/item/e34dc12d25c0ba9fb6326369
背景:下了一个新浪微博的PHPSDK,里面有<?=$a?>输出,但是我用的wamp套件输出不了,换成echo就能输出来。

php <?= > 问题
$i = o;<?= $i ?>为什么输不出来结果呢?换成echo就能输出来,我很奇怪,是不是我的配置文件没配好,请大家帮帮我!谢谢

在php.ini文件中设置short_open_tag为on即可,但是不建议使用这种简短风格的写法!
规范写法:<?php echo $i; ?>
————————————————————————————————————
解决方法:

wamp默 认有2个地方
; - short_open_tag = Off [Portability]
short_open_tag = Off
当 在wamp里php里勾选short open tag时,这两个地方都变成On
需要改2个地方吗?验证ing
; - short_open_tag = Off [Portability]
short_open_tag = On 不行,重启也不行
; - short_open_tag = On [Portability]
short_open_tag = On 不行,重启也不行
把 php里的short open tag勾选了,才行,php.ini都是On,其他并未改变,难道还有别的文件?
搜索发现有2个 php.ini
C:\wamp\bin\php\php5.2.8
C:\wamp\bin\apache\Apache2.2.11\bin
现 在wamp里勾选,apache文件夹里的ini变成2个on,php文件夹里的还是off。
使用phpinfo查看,最终证明只有 C:\wamp\bin\apache\Apache2.2.11\bin\php.ini里的一个short_open_tag = On管用,而且编辑文本不会使wamp的勾选变化。

要在PHP文件中的PHP.INI文件改了才起作用.

摘自:http://hi.baidu.com/123123la/item/e84c431eb823f9fe65eabf98

实践如下:
打开wamp后,在任务栏里左键,找到PHP项,后在PHP-》PHP设置里的short open tag勾选上。
short_open_tag = On //如只编辑php.ini的文本不会使wamp的勾选变化。
分页: 6/18 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 下页 最后页 [ 显示模式: 摘要 | 列表 ]