请使用str_getcsv替代explode解析csv

CSV格式提供了我们对数据的导入导出,对数据格式要求不严格的场景很适合,而且导出的数据excel可以直接打开,然后编辑重新导入。由于csv 每行使用“,”来分割每列自然会联想到explode 来转为数组便于操作,之前的项目中一直这么使用,可是最近有个功能需要判断该列为空,导入的数据是空的,我使用 $a == “”  来判断,用var_dump 下来的结果竟然是false ,试着采用empty竟然还是不为空,可是页面上确实没有显示,再次var_dump下 $a 发现长度为2,看来,有不可见 字符,查看页面源代码有
&#10字符,对应ASCII是“\r\n”。

ascii

原来是回车换行符。虽然可以使用正则过滤,但是还是查了下去,有个str_getcsv 可以替代explode。返回值都是一样的。强烈建议使用这个函数替代,支持>=PHP5.3版本。

维基百科CSV

str_getcsv函数

发表在 笔记 | 标签为 | 留下评论

jquery序列号表单serialize如何排除元素

serialize(),可以序列化一个表单内容,在ajax提交表单很方便。但是,很多情况下用户的表单信息不是需要全都知道。比如信用卡账号和相关CVV码,这时候提交到我们后台前需要进行排除。

网上看到有这样使用的,不知道是版本问题还是我弄错了,然并卵。

[javascript]
$("form[name=’forname’]").not($("input[type=’hidden’]")).serialize();
[/javascript]

改成

[javascript]
$("form[name=’forname’] :not(#test1,#test2,#test3………..)").serialize();
[/javascript]

发表在 笔记 | 标签为 , | 一条评论

正则验证巴西的cpf,cnpf,cep

CNPJ (公司税号)
CPF (个人税号)
CEf (邮编)


//cpf,cnpj
var cpf = /^\d{3}.\d{3}.\d{3}-\d{2}$/;
var cnpj = /^\d{2}.\d{3}.\d{3}\/\d{4}-\d{2}$/;


//cep
var cep = /^\d{5}-\d{3}$/;

这里有巴西的cnpf,cpf,cep测试信息。
https://developers.ebanx.com/integrations/testing/fake-customer-data/fake-brazilian-customer-data

发表在 笔记, 经验分享 | 留下评论

online2欧安装windows

刚刚在论坛上面收了一台2欧onlie的服务器,续费才1.99欧实在是值了,现在需要安装windows玩玩
1.进入恢复模式

微信截图_20160828233645

2.选择引导
选择ubuntu 12.4 然后点击
Click here to launch the rescue system
微信截图_20160828233536

3.获取账号密码

微信截图_20160828233511

这个页面不要关闭,也不要点击“Boot in normal mode”,按钮,不然又回到正常模式了。

4.登陆恢复模式

root@debian-512mb-sfo1-01:~# ssh sfsren@195.154.73.103

2003

wget -O- http://soft.lovekk.org/ISO/Windows/windows2003.32bit.raw | dd of=/dev/sda

2008

wget -O- http://soft.lovekk.org/ISO/Windows/windows2008.R2.raw | dd of=/dev/sda

dd完成后点击”Boot in normal mode”,系统会返回正常模式去引导,等待服务器ping通就可以用系统自带的mstsc程序远程连接了。

Windows Server 2003 登录账户密码如下:
用户: Administrator
密码:changeme

Windows Server 2008 R2登录账户密码如下:
用户: Administrator
密码: Changeme!!!

发表在 经验分享 | 留下评论

onbeforeunload阻止用户关闭tab

<script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
   window.onbeforeunload = function () {
        $('#test').addClass('test'); // do function
        return false;
    }
    $(window).keydown(function(event) {
      if (event.keyCode == 116) {//按f5时页面自动重新加载
         window.onbeforeunload = null;
   }});
</script>     
<body>
    <div id="test"></div>
</body>

结果可以发现 id为 test的div ,添加了一个test的class。

发表在 笔记 | 标签为 | 留下评论

开启.htaccess重写规则对吞吐率的影响

关闭.htaccess

D:\xampp\apache\bin>ab -n 10000 -c 100 http://www.test.com/test.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.test.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.2.22
Server Hostname:        www.test.com
Server Port:            80

Document Path:          /test.php
Document Length:        0 bytes

Concurrency Level:      100
Time taken for tests:   41.672 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1880000 bytes
HTML transferred:       0 bytes
Requests per second:    239.97 [#/sec] (mean)
Time per request:       416.724 [ms] (mean)
Time per request:       4.167 [ms] (mean, across all concurrent requests)
Transfer rate:          44.06 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.9      1      16
Processing:   141  412  24.3    413     838
Waiting:      127  412  23.9    413     520
Total:        143  414  24.2    415     839

Percentage of the requests served within a certain time (ms)
  50%    415
  66%    418
  75%    421
  80%    422
  90%    427
  95%    433
  98%    459
  99%    492
 100%    839 (longest request)

开启.htaccess

D:\xampp\apache\bin>ab -n 10000 -c 100 http://www.test.com/test.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.test.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.2.22
Server Hostname:        www.test.com
Server Port:            80

Document Path:          /test.php
Document Length:        0 bytes

Concurrency Level:      100
Time taken for tests:   42.438 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1880000 bytes
HTML transferred:       0 bytes
Requests per second:    235.64 [#/sec] (mean)
Time per request:       424.380 [ms] (mean)
Time per request:       4.244 [ms] (mean, across all concurrent requests)
Transfer rate:          43.26 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   1.0      1      65
Processing:   140  420  31.5    419     789
Waiting:      126  420  31.3    419     727
Total:        142  422  31.5    420     791

Percentage of the requests served within a certain time (ms)
  50%    420
  66%    426
  75%    430
  80%    432
  90%    439
  95%    457
  98%    519
  99%    541
 100%    791 (longest request)

通过AB压力测试可以发现,未开启htaccess是吞吐率为239.97,开启htaccess吞吐率为235.64。
每秒相差4.33,对性能有稍微影响,但是影响不大,实际上htaccess受规则的影响很大,结果可能会更糟糕,建议多次测试取平均。

发表在 笔记 | 标签为 , | 留下评论

关于stripslashes函数去除反斜杠的问题。

请看代码


<?php
$test = array("url"=>"http://www.google.com","name"=>"谷歌");
$new_str = json_encode($test);
echo $new_str;
echo "</br>";
echo stripslashes($new_str);
echo "</br>";
echo str_replace("\\/","/",$new_str);
?>

执行结果

20160317115934

对于PHP开启了魔术方法的时候,我们可以使用stripslashes函数来解决,但是有一种情况下是不能这么做的,当Json中包含中文的时候,中文被转义成\u这样的编码,这样会使json中文失效。我们可以直接使用字符串替换的方式来解决。


echo str_replace("\\/","/",$new_str);

如果你的php版本php5.4或以上,可以这样

echo json_encode("中文", JSON_UNESCAPED_UNICODE);

这样生成中文不会转义编码。

发表在 笔记 | 标签为 | 留下评论

configure: error: Cannot find libmysqlclient under /usr解决办法

通过查找64位机器上面libmysqlclient.so在 /usr/lib64/mysql/libmysqlclient.so里面

php默认会到/usr/lib/libmysqlclient.so 查找。

[bash]

cp  /usr/lib64/mysql/libmysqlclient.so  /usr/lib/libmysqlclient.so

[/bash]

参考:

http://wangmukun.blog.51cto.com/651644/236029

发表在 笔记 | 留下评论

openssl编译动态扩展

openssl 1.0.1编译动态扩展的时候

[bash]

./config –prefix=/usr/local/openssl -d shared

[/bash]

加上-d 的时候出现如下错误

/usr/bin/ld: libcrypto.a(x86_64-gcc.o): relocation R_X86_64_32 against `a local symbol’ can not be used when making a shared object; recompile with -fPIC

openssl

换成下面的方式就正常了。

[bash]

./config no-asm shared –prefix=

[/bash]

发表在 笔记 | 2条评论

centos安装vsftp

[bash]

yum install vsftpd

useradd -d /var/www/html/ -s /sbin/nologin ftp_user

passwd ftp_user

vim /etc/vsftpd/vsftpd.conf

[/bash]

将anonymous_enable改为NO,阻止匿名上传
将chroot_list_enable和chroot_list_file的注释去掉,阻止用户访问上级目录

在/etc/vsftpd下建立chroot_list文件
建立完成后,在其中添加用户ftp_user,(一行一个)使其只允许访问指定目录。

重启

[bash]

/etc/init.d/vsftpd restart

[/bash]

参考:

http://cuimk.blog.51cto.com/6649029/1306637

发表在 笔记 | 留下评论

解决curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

最近一台测试机器使用curl访问 https://api-3t.sandbox.paypal.com/nvp,报如下错误。

curl

在其他机器上访问确是正常的。可能是openssl库引起,打算升级下openssl库

[bash]
wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1.tar.gz
tar xvf openssl-1.0.1.tar.gz
cd openssl-1.0.1
./config –prefix=/usr/local/openssl
make && make install
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
echo "/usr/local/openssl/lib" /etc/ld.so.conf
/sbin/ldconfig -v
openssl version -a
[/bash]

查看版本

opensslversion

编译Curl

[bash]
wget https://curl.haxx.se/download/archeology/curl-7.15.0.tar.gz
tar xvf curl-7.15.0.tar.gz
cd curl-7.15.0
./configure –disable-shared –prefix=/usr/local/curl –with-ssl=/usr/local/openssl/
make &amp;&amp; make install
/usr/local/curl/bin/curl -V
#如果编译报relocation R_X86_64_32 against `a local symbol’ can not be used when making a shared object; recompile with -fPIC错误 请在 configure 后面加上 disable-shared
[/bash]

curlversion

发现 OpenSSl版本为1.0.1

再次测试

[bash]
/usr/local/curl/bin/curl https://api-3t.sandbox.paypal.com/nvp
[/bash]

curl_paypal

可能由于CA过期,于是到,https://curl.haxx.se/ca/cacert.pem下载最新的CA ,重新编译curl进Curl,cacert.pem是从https://curl.haxx.se/ca/cacert.pem下载下来的。/etc/pki/tls/certs/ca-bundle.crt是目标位置。

[bash]
./configure –disable-shared –prefix=/usr/local/curl –with-ssl=/usr/local/openssl/ &nbsp;–with-ca-bundle=/etc/pki/tls/certs/ca-bundle.crt –with-ca-path=cacert.pem
[/bash]

再次访问,成功了。

[bash]
/usr/local/curl/bin/curl &nbsp; &nbsp;https://api-3t.sandbox.paypal.com/nvp
[/bash]

参考文档:

http://www.jb51.net/LINUXjishu/287588.html

https://curl.haxx.se/docs/sslcerts.html

https://curl.haxx.se/ca/cacert.pem

https://www.paypal-knowledge.com/infocenter/index?page=content&id=FAQ1766&expand=true&locale=en_US

发表在 笔记 | 留下评论

卡西欧EF550更换电池

几年前淘宝买的EF550,我估计是高仿的,中间好几年没有戴过,最近翻出来发现不走了,可能没电了吧,去外面买了个电池,型号是SR927W,纽扣电池(氧化银)。买了25元,也不知道真假。

IMG_20160205_212915

由于没有工具,找来起子,用起子顶住后盖的卡口处,逆时针旋转。

IMG_20160205_212955

取出来的电池。

IMG_20160205_213051

将新的电池更换进去,可以用起子挑起电池旁边的弹片。将电池卡住,盒盖,用起子顺时针拧紧。

发表在 经验分享 | 标签为 | 留下评论

linux命令行下如何保持用户名密码

在服务器上pull最新测试资源十分不便,每次都得输入密码。采用在客户端保存密码,避免每次输入。

cd ~
touch .git-credentials
vim .git-credentials
https://{username}:{password}@github.com
git config --global credential.helper store

发表在 笔记 | 留下评论

php file_get_contents函数谨慎使用

最近我们的一个服务器由香港迁移到国内,开始几天还算正常。突然,有一天测试通知我们说不能支付了,页面白屏,原来页面504 Time Out 了,随后我们查看了下日志model层已经都走完了,当时并没有去怀疑view层问题,把目标投向服务器配置,最后还是没有发现问题,后来我们干脆把view层写成空白的,程序能成功执行,看来问题在view层,后来我们发现是使用了file_get_contents 函数造成的,由于在国内GFW原因file_get_contents 去请求yahoo的一个汇率接口导致超时。而且file_get_contents 并不受 set_time_limit 设置影响。

从PHP5开始 file_get_contents支持context,我们可以在 context中设置time out 避免整个页面的超时。

发表在 笔记 | 留下评论

(gnome-ssh-askpass:24029): Gtk-WARNING **: cannot open display:

git clone 时候报错

20160120102326

(gnome-ssh-askpass:24029): Gtk-WARNING **: cannot open display:

unset SSH_ASKPASS

发表在 笔记 | 留下评论

extension与zend_extension区别

最近编译了很多PHP扩展,有的使用zend_extension加载,有的使用extension加载,一直不明白这两种有什么区别,又来才明白。

1.zend_extension加载zend引擎的扩展,extension是加载php的扩展。
2.zend_extension使用绝对路径,extension基于extension_dir路径加载。

发表在 笔记 | 留下评论

php如何使用activemq

公司需要用到activemq,也趁这个机会学习了下activemq
1.安装java环境
jdk可以到http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载,可以下载rpm包安装

tar xvf jdk-8u65-linux-i586.tar.gz
mv jdk1.8.0_65/ /usr/local/java
vim /etc/profile

在底部加入下面的环境变量
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

20160115162811

然后重新登陆ssh

java -version

20160115163201

1.下载activemq

wget http://ftp.jaist.ac.jp/pub/apache/activemq/5.13.0/apache-activemq-5.13.0-bin.tar.gz
tar xvf apache-activemq-5.13.0-bin.tar.gz

2。安装stomp扩展

我们这里使用stomp协议进行通信
php原生是不带这个库的,可以在这边下载。https://pecl.php.net/package/stomp

wget https://pecl.php.net/get/stomp-1.0.9.tgz
tar xvf stomp-1.0.9.tgz
cd stomp-1.0.9/
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

20160114143142

最后添加extension=stomp.so到php.ini中

20160114143653

重启webserver

打印phpinfo

20160114143958

到这里stomp扩展就安装成功了。PS:安装stomp扩展,PHP版本必须5.2.2以上。

3.运行activemq

cd /root/apache-activemq-5.13.0/bin
./activemq start
INFO: Loading '/root/apache-activemq-5.13.0//bin/env'
INFO: Using java '/usr/bin/java'
INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details

netstat -an|grep 61616
netstat -an|grep 8161

20160114214041

activeMQ默认配置下启动会启动8161和61616两个端口
8161是activeMQ自带的管理后台的端口
61616是activeMQ服务默认端口即通信端口

登陆activeMQ管理后台

http://192.168.1.2:8161/

20160114214807

默认用户名/密码:admin/admin

修改用户名密码

activeMQ基于jetty服务器

配置文件可以在conf/jetty.xml中找到

20160114215955

将name=”authenticate” 的value=”false” 改为true

然后编辑conf/jetty-realm.properties文件配置密码

格式为
密码:用户名,角色
admin: admin, admin

发表在 笔记 | 留下评论

/sbin/insserv: No such file or directory

root@ubuntu:~# chkconfig httpd off
/sbin/insserv: No such file or directory

cd /sbin
ln -s ../usr/lib/insserv/

发现报/sbin/insserv: Permission denied,后来才发现/usr/lib/insserv/其实是个目录

cd /sbin
rm -rf insserv
ln -s ../usr/lib/insserv/insserv 
chkconfig httpd off

成功

更改前

20160113180031

更改后

20160113180050

发表在 笔记 | 留下评论

使用Apache定义程序环境变量

我们可以使用SetEnv 参数,https://httpd.apache.org/docs/2.2/mod/mod_env.html

在VirtualHost中添加SetEnv,

<VirtualHost *:80/>
DocumentRoot "/var/www/"
ServerName www.test.com
SetEnv ENV production
</VirtualHost>

在程序公共地方定义

define('ENVIRONMENT', isset($_SERVER['ENV']) ? $_SERVER['ENV'] : 'development');

这样,程序运行的时候会优先加载Apache的配置,即,常量ENVIRONMENT为production,然后加载production的配置文件,如果Apache,没有设置环境配置则是development。

 

发表在 笔记 | 留下评论

Unable get outgoing proxy connection: Still unable to dial tcp://http://www.doesnotexist.com:80 after 3 attempts

Unable get outgoing proxy connection: Still unable to dial tcp://http://www.doesnotexist.com:80 after 3 attempts

20160106

请关闭lantern,点击Fiddler顶部的黄色提示条,用于重新加载系统代理配置,刷新浏览器。

发表在 经验分享 | 留下评论