PHP
九 14th, 2011
首先,描述下大致情况,后台脚本方式运行PHP,因为有多个任务需要同时运行,采用了PHP的多进程方式。 但是发现程序很容易就遇到mysql has gone away的问题。 每个子进程新建自己的数据库连接,长连接时需要用mysql_ping保持 相关文章: bind_textdomain_codeset undefined PHP中控制proc_open的执行时间 使用apache 的PHP cgi时遇到的Internal Server Error可能原因 PHP json解析的注意事项 使用cgi作为php运行的命令需要注意的
PHP
PHP
六 6th, 2011
雪豹上,对php动态编译gettext成功后,发现这个函数还是不能用。 编译的一般过程是: 1。 编译gettext 2。 到php的扩展目录gettext下 phpize然后编译 编译安装后,发现部分函数可用,部分不可用。 排查了很久,通过在ext/gettext/ 目录下 configure编译时,输出 checking for GNU gettext support… yes, shared checking for bindtextdomain in -lintl… yes checking for ngettext in -lintl… no checking for dngettext in -lintl… no checking for dcngettext in -lintl… no checking for bind_textdomain_codeset in -lintl… no 很明显,我要的函数,没给编进去 进行跟踪,发现是这几句的测试代码,都没加-L库,很奇怪。因为我的路径比较特殊,指定在了/src/gettext下。继续跟踪,在configure脚本中发现一句 (4200) LDFLAGS=$O_LDFLAGS 好像是把LDFLAGS还原回去,不知道configure脚本为啥这么做。直接给注释了,再重新编,就都是yes了。 另,php版本是5.3.4 相关文章: [...]
gettext
PHP
四 21st, 2011
目前想到有两个办法。 一个是fork方式。 发现直接通过进程的alarm信号方式无法控制proc_open的执行。所以用fork方式,通过fork让子进程执行proc_open,父进程则通过alarm的方式控制时间。但是这么做会造成如果有输出值的话会很麻烦,要让子进程一直执行下去,因为没找到好的办法让父进程能获取子进程的输出。当然通过进程间通信能解决,但是太麻烦了。。。 另外个stream_select方式 相关文章: php多进程时,遇到mysql has gone away的解决 bind_textdomain_codeset undefined 使用apache 的PHP cgi时遇到的Internal Server Error可能原因 PHP json解析的注意事项 使用cgi作为php运行的命令需要注意的
fork | PHP | 并发
PHP
三 8th, 2011
1. 检查cgi文件的权限(执行等) 2. 检查你的文件内容是不是unix格式的,就是看换行符是不是有多.可以用dos2unix转. 3. 通过如下的perl脚本检查是否web服务器正确配置,包括scriptalias等 #!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello, World."; 4. 最后再检查PHP.ini中的配置,找到如下,进行设置 cgi.force_redirect = 0 相关文章: php多进程时,遇到mysql has gone away的解决 bind_textdomain_codeset undefined PHP中控制proc_open的执行时间 PHP json解析的注意事项 使用cgi作为php运行的命令需要注意的
cgi
PHP
一 30th, 2011
1. 首先是key必须用引号,而且应该是双引号。 2.中文或者其他语言等,必须用UTF-8编码。这个很重要,而且推荐使用utf8_encode。我之前使用iconv转出来无法解析,很郁闷。 相关文章: php多进程时,遇到mysql has gone away的解决 bind_textdomain_codeset undefined PHP中控制proc_open的执行时间 使用apache 的PHP cgi时遇到的Internal Server Error可能原因 使用cgi作为php运行的命令需要注意的
json | PHP
PHP
一 10th, 2011
使用php cgi而非cli作为PHP命令行的解释命令时,需要注意部分设置。根据手册的说明,使用cli时,默认有了如下的支持: Overridden php.ini directives Directive CLI SAPIdefault value Comment html_errors FALSE It can be quite hard to read the error message in your shell when it’s cluttered with all those meaningless HTML tags, therefore this directive defaults to FALSE. implicit_flush TRUE It is desired that any output coming from print(), echo() and friends is immediately written to the output [...]
cgi | PHP
PHP
十二 9th, 2010
使用apache 的CGI方式读取PHP,发现配好开页面就是报Premature end of script headers。 网上很多都说权限什么的,我查了都OK。 最后php -v时发现是cli的模式。。我想到编译时用的–apxs=….. 难道不行?网上一查,果然是,用了这个参数就会被编译成cli的方式了。于是立即去除重新编译。 之后如果出现 Security Alert! The PHP CGI cannot be accessed directly。请修改ini文件中的 cgi.force_redirect = 0 相关文章: php多进程时,遇到mysql has gone away的解决 bind_textdomain_codeset undefined PHP中控制proc_open的执行时间 使用apache 的PHP cgi时遇到的Internal Server Error可能原因 PHP json解析的注意事项
PHP
PHP
十一 27th, 2010
用了这么久的PHP,今天在看代码时突然看到个陌生的函数。 declare 翻了下手册,写的有点模糊,google之,并自己试验了一下。 先简单说明,declare这个函数只支持一个参数就是ticks,函数表示记录程序块,需配合register_tick_function 函数使用。ticks参数表示运行多少语句调用一次register_tick_function的函数。并且declare支持两种写法: 1. declare(ticks = 1); 整个脚本 2. declare(ticks = 1) { 内部的代码做记录 … } <? declare (ticks = 1); //这句这么写表示全局的脚本都做处理 function foo() { //注册的函数 static $no; $no++; echo $no."======"; echo microtime()."\n"; } register_tick_function("foo"); //注册函数,后面可以跟第2个参数,表示函数的参数 $a = 1; for($i=0;$i<5;$i++) { //这里的循环也是语句,会做一次判断$i<5的判断执行 $b = 1; } ?> 上述代码除了函数体不算执行代码,其他都会做一次执行,运行可看到执行的次数和时间。用于代码调试较好。 [...]
PHP
PHP
十 4th, 2010
如标题所示,该错误的处理方式是这样的: ini_set(’gd.jpeg_ignore_warning’, 1); 问题好像是出现在PHP5 和GD2的时候,记录下来。 相关文章: php多进程时,遇到mysql has gone away的解决 bind_textdomain_codeset undefined PHP中控制proc_open的执行时间 使用apache 的PHP cgi时遇到的Internal Server Error可能原因 PHP json解析的注意事项
PHP
Linux | PHP | Perl
六 12th, 2010
转自:http://www.x2009.cn/articles/what-is-a-unix-timestamp-unix-timestamp-unix-time-as-well-as-the-method-of-converting-ordinary-time.html 什么是Unix时间戳(Unix timestamp)? Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix 系统、类Unix系统中,也在许多其他操作系统中被广告采用。 目前相当一部分操作系统使用32位二进制数字表示时间。此类系统的Unix时间戳最多可以使用到格林威治时间2038年01月19日03时14分07秒(二进制:01111111 11111111 11111111 11111111)。其后一秒,二进制数字会变为10000000 00000000 00000000 00000000,发生溢出错误,造成系统将时间误解为1901年12月13日20时45分52秒。这很可能会引起软件故障,甚至是系统瘫痪。使用64位二进制数字表示时间的系统(最多可以使用到格林威治时间292,277,026,596年12月04日15时30分08秒)则基本不会遇到这类溢出问题。 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000) getTime()返回数值的单位是毫秒 Microsoft .NET / C# epoch = (DateTime.Now.ToUniversalTime().Ticks – 621355968000000000) / 10000000 MySQL SELECT unix_timestamp(now()) Perl time PHP time() PostgreSQL SELECT extract(epoch FROM now()) Python 先 import time 然后 time.time() Ruby 获取Unix时间戳:Time.now 或 Time.new 显示Unix时间戳:Time.now.to_i SQL Server SELECT [...]