PHP
九 14th, 2011
首先,描述下大致情况,后台脚本方式运行PHP,因为有多个任务需要同时运行,采用了PHP的多进程方式。
但是发现程序很容易就遇到mysql has gone away的问题。
每个子进程新建自己的数据库连接,长连接时需要用mysql_ping保持
相关文章:
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
Database
四 25th, 2011
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/ |
+————————–+—————————————–+
相关文章:
mysql
PHP
四 21st, 2011
目前想到有两个办法。
一个是fork方式。
发现直接通过进程的alarm信号方式无法控制proc_open的执行。所以用fork方式,通过fork让子进程执行proc_open,父进程则通过alarm的方式控制时间。但是这么做会造成如果有输出值的话会很麻烦,要让子进程一直执行下去,因为没找到好的办法让父进程能获取子进程的输出。当然通过进程间通信能解决,但是太麻烦了。。。
另外个stream_select方式
Read the rest of this entry »
相关文章:
fork | PHP | 并发
Linux
四 12th, 2011
分两种情况:
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` ...
相关文章:
bash
Linux
四 7th, 2011
用的是虚拟用户加chroot的方式做的
顺带贴下配置信息
- # disables anonymous FTP
- anonymous_enable=NO
-
- # enables non-anonymous FTP
- local_enable=YES
-
- # activates virtual users
- guest_enable=YES
- #guest_username=ftp
-
- # virtual users to use local privs, not anon privs
- virtual_use_local_privs=YES
-
- # enables uploads and new directories
- write_enable=YES
-
- # disable downloads
- download_enable=NO
-
- # the PAM file used by authentication of virtual uses
- pam_service_name=vsftpd-virtual
-
- # in conjunction with 'local_root',
- # specifies a home directory for each virtual user
- user_sub_token=$USER
- local_root=/home/pub/uploads/$USER
-
- # the virtual user is restricted to the virtual FTP area
- chroot_local_user=YES
-
- # hides the FTP server user IDs and just display "ftp" in directory listings
- hide_ids=YES
-
- # runs vsftpd in standalone mode
- listen=YES
-
- # listens on this port for incoming FTP connections
- listen_port=21
-
- # the minimum port to allocate for PASV style data connections
- pasv_min_port=62222
-
- # the maximum port to allocate for PASV style data connections
- pasv_max_port=63333
网上搜到的2种解决办法均无效:
1. selinux的问题
2. 目录权限问题
我这里说下我的第3个问题,非常之愚蠢…
仔细检查配置文件里local_root那行最后有没多点空格或者注释什么,都给干掉!
相关文章:
vsftpd
Python
三 28th, 2011
通过设置python的locale即可,和bash处理方式是一样的. 另外补一下bash中的处理是用export方式做的.
- import locale
-
- language_code, encoding = locale.getdefaultlocale()
- if language_code is None:
- language_code = 'en_GB'
- if encoding is None:
- encoding = 'UTF-8'
- if encoding.lower() == 'utf':
- encoding = 'UTF-8'
- locale.setlocale( locale.LC_ALL, '%s.%s' % (language_code, encoding))
相关文章:
pysvn
Linux
三 28th, 2011
在使用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上看就正常了
相关文章:
乱码