php多进程时,遇到mysql has gone away的解决

首先,描述下大致情况,后台脚本方式运行PHP,因为有多个任务需要同时运行,采用了PHP的多进程方式。

但是发现程序很容易就遇到mysql has gone away的问题。

每个子进程新建自己的数据库连接,长连接时需要用mysql_ping保持

相关文章:


bind_textdomain_codeset undefined

雪豹上,对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

相关文章:


EICAR标准病毒测试文件

将一下内容保存为文件即可

  1. X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

相关文章:


mysql编码

set names gbk 等同于以下3句
set character_set_client=gbk; 这句告诉 MySQL 我接下来要用的 SQL 语句的编码是 GBK 的
set character_set_connection=gbk; 这句 告诉 MySQL 要把 SQL 语句转换成 GBK 进行处理
set character_set_results=gbk; 这句告诉 MYSQL 查询返回的结果要统一都转换成 GBK 编码的

另外可以使用status命令或者show variables like ‘char%’ 查看当前数据库的默认编码状况

+————————–+—————————————–+
| Variable_name            | Value                                   |
+————————–+—————————————–+
| character_set_client     | latin1                                  |
| character_set_connection | latin1                                  |
| character_set_database   | utf8                                    |
| character_set_filesystem | binary                                  |
| character_set_results    | latin1                                  |
| character_set_server     | latin1                                  |
| character_set_system     | utf8                                    |
| character_sets_dir       | /opt/local/share/mysql5/mysql/charsets/ |
+————————–+—————————————–+

相关文章:


自建CA和服务器证书

  1. openssl genrsa -des3 -out ca.key 1024 //创建CA的私钥
  2. openssl req -new -x509 -days 365 -key ca.key -out ca.crt //根据私钥创建自签名的CA证书
  3. openssl genrsa -des3 -out server.key 1024 //创建web服务器的私钥
  4. openssl req -new -key server.key -out server.csr //根据私钥创建证书申请
  5. openssl x509 -CA ca_crt -CAcreateserial -req -in server.csr -CAkey ca_key -out server.crt //签名server.csr 生成server.crt

相关文章:


PHP中控制proc_open的执行时间

目前想到有两个办法。

一个是fork方式。
发现直接通过进程的alarm信号方式无法控制proc_open的执行。所以用fork方式,通过fork让子进程执行proc_open,父进程则通过alarm的方式控制时间。但是这么做会造成如果有输出值的话会很麻烦,要让子进程一直执行下去,因为没找到好的办法让父进程能获取子进程的输出。当然通过进程间通信能解决,但是太麻烦了。。。

另外个stream_select方式
Read the rest of this entry »

相关文章:


| |

bash for 循环时遇到空格的解决办法

分两种情况:

1. 目录的遍历时,文件名中含有空格

如果用 for i in `ls directory` … 会有问题

应改用 cd directory && for i in * …

2. 遍历文件中的行时,行中含有空格

这种情况有2个办法,一个是用while替换

cat file.txt |while read line … line是需要输出的行内容

另外个办法仍然用for ,使用IFS

IFS_old=$IFS      #将原IFS值保存,以便用完后恢复
IFS=$’\n’         #更改IFS值为$’\n’
for line in `cat file.txt` ...

相关文章:


vsftpd 500 OOPS: cannot change directory

用的是虚拟用户加chroot的方式做的

顺带贴下配置信息

  1. # disables anonymous FTP
  2. anonymous_enable=NO
  3.  
  4. # enables non-anonymous FTP
  5. local_enable=YES
  6.  
  7. # activates virtual users
  8. guest_enable=YES
  9. #guest_username=ftp
  10.  
  11. # virtual users to use local privs, not anon privs
  12. virtual_use_local_privs=YES
  13.  
  14. # enables uploads and new directories
  15. write_enable=YES
  16.  
  17. # disable downloads
  18. download_enable=NO
  19.  
  20. # the PAM file used by authentication of virtual uses
  21. pam_service_name=vsftpd-virtual
  22.  
  23. # in conjunction with 'local_root',
  24. # specifies a home directory for each virtual user
  25. user_sub_token=$USER
  26. local_root=/home/pub/uploads/$USER
  27.  
  28. # the virtual user is restricted to the virtual FTP area
  29. chroot_local_user=YES
  30.  
  31. # hides the FTP server user IDs and just display "ftp" in directory listings
  32. hide_ids=YES
  33.  
  34. # runs vsftpd in standalone mode
  35. listen=YES
  36.  
  37. # listens on this port for incoming FTP connections
  38. listen_port=21
  39.  
  40. # the minimum port to allocate for PASV style data connections
  41. pasv_min_port=62222
  42.  
  43. # the maximum port to allocate for PASV style data connections
  44. pasv_max_port=63333

网上搜到的2种解决办法均无效:

1. selinux的问题

2. 目录权限问题

我这里说下我的第3个问题,非常之愚蠢…

仔细检查配置文件里local_root那行最后有没多点空格或者注释什么,都给干掉!

相关文章:


pysvn checkout时convert UTF8失败

通过设置python的locale即可,和bash处理方式是一样的. 另外补一下bash中的处理是用export方式做的.

  1. import locale
  2.  
  3. language_code, encoding = locale.getdefaultlocale()
  4. if language_code is None:
  5. language_code = 'en_GB'
  6. if encoding is None:
  7. encoding = 'UTF-8'
  8. if encoding.lower() == 'utf':
  9. encoding = 'UTF-8'
  10. locale.setlocale( locale.LC_ALL, '%s.%s' % (language_code, encoding))

相关文章:


tar包文件名乱码的处理

在使用linux做tar包时,拿到win上解压很容易看到文件名是乱码的情况.但是在通过samba看的时候是正常的.

其实是samba本身就支持了utf8编码的处理,tar和zip是不支持的.另外7z这个程序是支持unicode编码处理的,所以如果Linux和win都有7z,可以考虑用这个传,不会产生文件名的乱码,无需再看下午的解决办法.

这种情况是因为linux上是utf-8的系统环境编码,win上是gbk的

解决有2个办法,要么服务器压缩的时候就处理,要么解压时候处理.

我这里直接在压缩时候就处理好,需要手动转文件名的编码.通过工具convmv这个命令(可通过yum方式安装一下)

convmv -f UTF-8 -t GBK $tmp_target_path/ -r –notest 这个命令实现
其中
-f是原编码
-t是目标编码
-r递归处理目录
–notest是直接做替换,不加则提示哪些文件需要被转码

之后再做tar,到win上看就正常了

相关文章:


Page 1 of 191234510...Last »