欢迎与本博客交换友情链接
2018年08月13日 12:25

友情链接规则:
1. 仅限个人博客,原创文章,技术类、日记类优先。
2. 请先做好本站链接,样式:每天启航
3. 博客开通满半年,文章满50篇。

固定链接 | 发表评论(0) | Trackback(0)

干货分享4:防止下载/提交数据不完全
2018年08月13日 09:16

简述:有了这一功能,用户提交留言时,再也不用按Ctrl+A、Ctrl+C来防止发送失败而丢失。

在过去开发的项目里,有些部分用户需要提交、或修改数据,偶尔有时候会因为服务器响应慢而导致文字下载不完全、提交数据不完全或丢失。在新项目里,我想到了一个新办法:

1. 防止文字下载不完全的方案:
用户需要编辑文章时,在<textarea></textarea>标签1中下载的服务器的文字部分,用PHP的strlen函数,获取该文字的长度值。该页面,建立一个AJAX,并建立另外一个<form>,内含<textarea></textarea>标签2,用户打开页面,该AJAX会让网页自动提交标签2的文字内容,由服务器来判断标签1、标签2的strlen()是否一致,如果一致则下载完全。

之所以这样做,而不在客户端用JavaScript的length,是因为全角字符,JavaScript会识别为长度1;PHP会识别为长度2(ANSI编码),或长度3(UTF-8编码)。

2. 防止提交数据不完全的方案:
在<form>里,建立一个隐藏的<input>,用来获取<textarea></textarea>的最后几个字符,同时,在<textarea>标签里用onkeyup=……来自动改变这个<input>的值。提交后,在服务器端进行对比,如果这个<input>与<textarea>提交的数据的最后一段字符相同,则说明提交成功。

3. 防止提交后找不到服务器的方案:
要提交时,在客户端的JavaScript写入Cookies数据;提交成功后,在服务器端清除这个Cookies。

虽然这3个步骤比原先复杂了好多,但是对于一个重要的项目,会有很好的用户体验。

固定链接 | 发表评论(1) | Trackback(1)

阿福卡能否作为主号?
2018年08月12日 08:58

有网友这样提问。

如果号码好一点,当主卡完全没问题。我就用133阿福卡+139移动为主卡。阿福卡2代无法订阅500M流量。阿福卡2代不适合上网,如果不怕麻烦,每天APP签到能获得10M流量。
我习惯带2个手机。上网的话,可以再办张上网的卡,比如阿福简单卡15元月租(2G),或者19元6G的那种。

如果是像1333333XXXX(秦皇岛),1331000XX8X(上海),1330333XXXX(张家口),133+区号,1336666XXXX(北京)这样的号,无论是什么套餐,必须做主号。

河北阿福卡2代之所以没有开发出相应的优惠流量包,可能是电信疏忽,或者不想管这个套餐。到营业厅要求加流量,可能答复需要变更到19元,39元,59元的套餐。

阿福卡对我个人来说,是珍宝。因为能本地本网免费,另外通话费0.1元已经优惠到底(优惠到快要爆表),以前我的电信卡套餐是市话0.25。和飞信+阿福卡也能每月免费打100分钟,但是很少用。

对于运营商的现状,会鼓励用户用39元以上的流量套餐,所以双卡也是不得已的选择。像我平时用WIFI较多,上网偶尔用一下,北京ifree每月的30M免费流量(一年不清零)还足够用。
阿福卡如果每天签到,每年有3.6G流量,数量也是相当可观的,可惜流量只是当月有效。

固定链接 | 发表评论(0) | Trackback(0)

干货分享3:防止重复提交的新方案
2018年08月11日 08:45

新项目的用户注册,需要严格防止重复提交,因为重复提交会导致相应的数据错误。昨天突然出现灵感,提交后,让程序判断需要写入的数据库文件的最后修改时间,如果距离现在的时间在3-5秒内,则不写入数据,这是运行在服务器端的程序部分。

服务器端以前我的设计方案是,注册时如果重复提交,会提示“已被注册”,这带来的问题,会让注册者误以为被别人注册过。这个新方案,解决了这个问题。

客户端,以前我的方案是自己想的办法:submit的按钮建立一组<div></div>标签1,然后编写一个和submit样子完全一样的button按钮,button按钮也建立一组<div></div>标签2,标签2用<div style=display:none>来隐藏这个button按钮。当提交后,让submit的按钮的div标签1的display为none(即隐藏),同时让标签2的button去掉隐藏。

固定链接 | 发表评论(0) | Trackback(0)

新增“程序设计”的分类
2018年08月10日 08:20

程序都是根据方案而编写。很多时候,为了解决一个问题,需要想很多的办法,这就是程序设计。在不同的语言,不同的平台,都可以用相同的方案。比如我在开发中,同样的功能,有时候在PHP里实现,有时在Shell编程里实现,有时在JavaScript里实现。

有时不具体到哪个语言,或者只提出方案、办法的时候,这些博客收录在这个新的目录“程序设计”里。

地址是 http://blog.emxel.com/category/program/

固定链接 | 发表评论(0) | Trackback(0)

干货分享2:调试 - VPS发邮件显示“由root@localhost.localdomain代发”彻底解决
2018年08月07日 09:35

因为新项目中需要向用户自动发送验证电子邮件,所以很需要服务器发邮件的功能。

调试了整整2天,搜索了网上的大量文章,大部分都没有效果。今天在想办法的无意当中,解决了这个问题,所以特此作为干货分享。这2天在调试中,无论如何修改hostname,@后面始终是localhost.localdomain。昨天发现国外的客服邮件的发件人,会显示“由abc@serverabc.com代发”,感觉非常酷。(本次的调试结果,无意中连“由***代发”都没有了,纯属无心插柳柳成荫。)

测试环境,是干净的CentOS 5新机,已安装PHP,新机的配置方法如这一篇。本次测试用的是OVZ,因为默认直接支持sendmail,无需任何配置。

测试中,我发现代发人有时是root@localhost.localdomain,有时是apache@localhost.localdomain。后来发现,这是因为root的用户名,是我用shell命令直接发邮件,会显示“由root@localhost.localdomain代发”。而我用php的exec()函数调用shell命令,来运行VPS上的sendmail,会显示“由apache@localhost.localdomain代发”。

于是想到通过建立用户,然后更改Apache所在的用户,就可以顺利更换@前的用户名。步骤为:

步骤1. shell命令:

adduser yourabc && passwd yourabc

注:这里的yourabc,是您要新建的用户,它就是将要在@前显示的名称,例如我的用户名是webshu,输入这样的shell命令:adduser webshu && passwd webshu

然后会提示输入此用户的密码。

步骤2. 更改Apache的用户组,下载/etc/httpd/conf/httpd.conf文件,在本地修改后上传。此文件是Apache的配置文件,用户文本工具打开,找到这2行:

User apache
Group apache

把apache改成为您的名字,例如:
User yourabc
Group yourabc

步骤3. 查看主机名、添加在127.0.0.1这一行,这一步非常重要,如果没有这一步,发邮件会很慢。

shell命令:

hostname

下载/etc/hosts文件,用文本工具编辑,然后上传。

大约在第3行,会看到自己的主机IP,IP后面跟着一个名字,实际这个就是主机名,和刚才的hostname命令后显示的名称是一样的。找到第1行,也就是127.0.0.1这一行,原有的localhost.localdomain localhost这些保留,在最后的localhost加一个空格,再加上现在的主机名。例如我的主机默认的主机名是server81,添加后的效果如:

127.0.0.1 localhost.localdomain localhost server81
# Auto-generated hostname. Please do not remove this comment.
104.223.255.255 server81

步骤4:更改主机名,这一步非常重要,会显示@后面的域名。

shell命令:

hostname yourdm.com

此步骤在重启Apache后会立即生效,但是重启系统后会失效。永久更改主机的方法请在百度上搜索,然后调试,我经过测试多次,更改/etc/sysconfig/network文件,暂无法实现永久更改。

步骤5. 重启Apache,shell命令:

service httpd restart

测试:

前面已经安装PHP。默认的PHP路径为/var/www/html,在/var/www/html目录下建立一个1.php。1.php写入这样的语句:

<?exec('echo -e "Subject: biao ti\nTo: abc@abc.com\nFrom: yourabc@yourdm.com\nMessage text" | sendmail -t');?>OK!

附:上述这个exec()函数里的sendmail命令直接发邮件,单是这一项,前两天查找资料、调试所花的时间不低于8小时,最后才成功,这几乎是唯一正确的写法。因为别的写法,无法发送成功,或者会让有的邮箱拒收、或者进入垃圾邮箱。
而且,此写法是直接调用CentOS原生的sendmail,无需额外安装mailx。

步骤6. 此步骤可省略。如果不能发送,可以尝试配置/etc/mail.rc这个文件,添加SMTP信息,具体可以在网上搜索一下。我发现里面的发件人名称、密码是可以任意填写的,但是SMTP地址必须是个存在的域名。

10秒钟后查看自己的abc@abc.com邮箱,此时很惊叹,因为现在连“由***代发”都没有了,发件人直接显示yourabc@yourdm.com。虽然CentOS系统里复杂的原理暂时无法得知,但是已经实现了非常酷的功能。请注意,步骤2、步骤4,实际上是在分别修改yourabc、yourdm.com。步骤5编写的PHP文件,From后面的发件人地址,必须与此相同,就不会显示“由***代发”,而且对方能够正常查收,且不会进入垃圾邮件箱。一旦不同,可能会拒收,或者直接进入垃圾邮件箱,有时也能正常查收。至此,已经解决了一个很大的问题。

但是,新的问题又出现了。在隔几分钟后,尝试更改这个1.php文件,发送给别的地址,或者同个地址,发现同个地址需要间隔很长时间才能再次发送;或者需要间隔很长时间才能发给别的地址。很可能是这个VPS空间做了限制,限制发送邮件的数量,这个解决不了,只能更换配置更高的VPS了,毕竟我的测试机是一年几美元的空间。

固定链接 | 发表评论(1) | Trackback(1)

干货分享1,调试:新机安装PHP+NoSQL
2018年08月06日 08:41

Linux的VPS,OVZ自带Apache。系统越老,往往效率越高,所以我选用版本最老的CentOS 5。因为官方已经抛弃CentOS 5,安装软件时总会提示Eg. Invalid release.txt,所以每次安装软件前必须更换CentOS-Base.repo文件,现在还能正常使用,它位于/etc/yum.repos.d/CentOS-Base.repo。服务器上的这个默认文件已经彻底作废,可以从网上搜索一个可用的文件替换上。

首先,无需运行软件更新(即yum update)。

1. OVZ的CentOS 5,在重新系统后或新机这样安装Apache+PHP+NoSQL:

yum -y install php && service httpd restart

只需这一步即可,默认直接支持Rewrite。

2. KVM的CentOS 5,在重新系统后或新机这样安装Apache+PHP+NoSQL:

yum -y install httpd && yum -y install php && service httpd restart

只需这一步即可,默认直接支持Rewrite。

3. Ubuntu系统暂时不多调试,因为默认没有Apache、不支持Rewrite。这里给出我已经多次的调试记录:

以Ubuntu 12为例:

apt-get -y update && apt-get -y install apache2 && apt-get -y install php5

Ubuntu系统的Rewrite配置麻烦一点,可以在网上搜索到。

固定链接 | 发表评论(1) | Trackback(1)

几个微信历史版本占用资源小记
2018年01月16日 16:53

现在大多数软件都是老版本运行速度快,能用老版本尽量用老版本。从微信的“关于微信→系统通知”,可以看出各个版本的大致发布时间。如今的微信已经越来越臃肿,这次测试中,把微信的数据清空后再卸载、安装另一个版本,然后登录一个微信帐号后,清空聊天记录,查看它的数据大小。结果如下:

版本号推出大致时间新帐号登录后的数据应用大小
6.2.0.542015年5月20.8M39.11M
6.3.132016年2月1日20.9M47.93M
6.5.32016年12月30日43.89M49.2M
6.5.162017年10月左右68.93M58.64M
6.6.12017年12月29日203M66.95M

这些版本的功能区别是:
1、安卓4.1的双核/四核手机上,6.2.0.54运行比6.3.13快30%以上;
2、从6.3.13开始,朋友圈有分组功能;
3、6.5.3是能登录新用户的最后一个版本;(如果用6.3.13登录新用户,会提示版本过低,解决办法是先安装6.5.3,登录之后再安装6.3.13)
4、6.5.16是能添加新好友的最后一个版本;(6.3.13也能添加好友,但是短时间内只能添加两三个好友,超过了会提示版本过低、操作频繁;6.5.3现在添加好友,这几个月试过不少次,对方永远没有反应。)
5、6.6.X是最新的版本,也几乎是能注册新微信的最后版本,因为现在微信对注册的控制越来越严格,版本稍微老一点,发送短信zc**到10690700367,之后会一直没有反应。

微信对稍微旧一点的版本的功能限制,更新非常快,几乎3个月左右就会更新一次,进一步限制老版本的功能

原生安卓4.3或以上的手机,运行6.5.16、6.6.X目前很流畅,安卓5.0或以上的手机,更没有问题,现在很多人普遍使用安卓6.0、7.0、8.0的手机。

原生安卓4.1.X的双核/四核手机,运行6.2.0.54较流畅。
原生安卓4.2.X的四核手机,运行6.3.13十分流畅,运行6.5.X微信会很卡。我的主力上网手机现在是安卓4.2.2,四核/512M运存,本来是可以再战3~5年,但是依照微信的臃肿速度,也许只能再坚持一两年就彻底无法用。

6.2.0.54版本:

6.3.13版本:

6.5.3版本:

6.5.16版本:

6.6.1版本:

固定链接 | 发表评论(2) | Trackback(0)

CMHK(中国移动香港)卡的用处
2018年01月15日 17:46

前几天论坛上有网友在问了这种卡的一些问题,正好我手中有3张正在服役的这样的卡。大部分人认为这种卡没有用,但在某种特定情况下,还是有一定的作用。特别是你身在深圳,会特别喜欢这种卡。通话费也不贵,6元港币月租的那种,在内地漫游拨打内地、香港,0.7港币/分钟,充值打折后合0.44元人民币/分钟

巧合的是,去年我竟然买到和我香港亲人一样的号段的卡,我叔公。他的号码是+852 951XXXXX,2007年的时候他就有这个号。我在2017年,在马云家买到的号也是+852 951XXXXX。

CMHK卡最近我做过通话的实验,测试点为北京、河北,清晰度和本地移动卡没有区别。通话的传声速度(延迟),也与本地移动卡没有区别,延迟非常非常小,约0.1秒,说明它的2G网络是借用内地中国移动的本地网络(本来就是移动自己公司),因此在内地使用时通话与内地的移动卡没有区别。上网没有测试过,很可能也一样,就是流量太贵。

CMHK卡在内地使用的益处:
1. 好玩。
2. 能和香港亲友联系。
3. 有业务需要的人,可拓展香港的业务。
4. CMHK卡能在内地漫游的目前有2种资费。其中一种是月租2港币,在内地漫游打往香港1.9港币。另一种月租6港币,在内地漫游打往香港0.7港币(充值打折后、乘以汇率约合0.44元人民币/分钟)。虽然月租不同,但是都有有效期,合下来都是约7元人民币/月。
要是以前,这第2种卡在内地直拨香港,就很便宜,现在没有优势了,因为现在移动的12593、17951,前几天我测试了一下拨打香港(北京移动卡,测试点北京、河北),都是0.39元/分钟。
5. 有强烈的归属感,如果会讲粤语,会更有这种感觉,两地尤如一家。所以,想去哪个地区、国家旅游,人不用去,买一张那里的卡就行了。

如果上述条件都不符合,这种卡就没有作用。这种卡不适合用来上网,费用很高。当然,这种卡也有缺点,中国移动香港的储值卡,目前最不完善的是充值的有效期不能累加,而是从充值当天开始算有效期180天,如果之前的有效期没用完会清零,重新计算。

例如,某个号码的有效期是到2018年5月1日,假如我今天充一张有效期180天的充值卡,内地的老神州行充值之后有效期会变为2018年5月1日+180天=2018年11月1日。而CMHK卡,充值后是会清除2018年1月15日~2018年4月30日的有效期,充值之后的有效期是2018年1月15日+180天=2018年7月15日。这是多么不方便的惊天bug!香港储值卡的有效期最长是180天,多张充值卡的有效期不能累加。这看起来并不是人为故意,而是套餐开发人员的疏漏。

香港卡的功能非常少。实际使用起来,内地的卡好用得多、便宜得多。

固定链接 | 发表评论(0) | Trackback(0)

VPS每次重启后必做的优化工作
2018年01月12日 09:21

经过很多次的试验,CentOS、Debian、Ubuntu系统都暂时无法在开机是让它自启killall -9命令,用sleep的Shell语句让它在开机3或5分钟后再自动执行killall -9,依然不起作用。所以,这项工作必须在每次系统重启后手工添加。正好昨天收到主机商的邮件,每个VPS空间都收到了服务器要重启一次的通知:

对于OpenVZ,每次重启后需要手工执行一次这个Shell命令
killall -9 syslogd

对于KVM,每次重启后需要手工执行一次这个Shell命令
killall -9 syslogd && for ((a=1;a<=5;a++)); do echo 1 > /proc/sys/vm/drop_caches; sleep 10800; a=2; done

说明:上述语句测试过,对CentOS 5极其有效,因为我用的是这个系统的VPS(这个系统运行PHP效率最高);Ubuntu 12测试,能运行,是否起作用未测试。

killall -9 syslogd这句对于服务器优化有至关重要的作用,CentOS 6或以上的版本要用killall -9 rsyslogd
这句的含义是杀死syslogd或rsyslogd进程,如果不关掉此进程,主机下的/var/log目录,体积会迅速增加,它是系统日志文件,默认是开启日志的。

for ((a=1;a<=5;a++)); do echo 1 > /proc/sys/vm/drop_caches; sleep 10800; a=2; done 这一段命令,作用是让它每隔10800秒(即3小时)自动释放一次内存。释放内存的语句对于KVM、或独立Linux主机有效,但对OpenVZ不起作用。
OpenVZ想要释放内存,只能用reboot或shutdown -r now的重启命令。

不过,幸运的是,OpenVZ平时在运行时,内存消耗数基本上不变,也就是说很可能会自动释放内存(主机商可能有运行相关软件)。但KVM必须让它自动运行内存,因为我的KVM空间,之前没有自动运行内存,运行了2个多月出现了死机。所以,让它每隔3小时自动释放一次内存,实际上24小时、72小时自动释放一次都可以。

[2018-01-21 11:00更新] 今天测试了Ubuntu 12,手动关闭系统日志的Shell命令是 killall -9 rsyslogd

固定链接 | 发表评论(0) | Trackback(0)

1 2 3 4 5 6 7 8 9

Copyright © 2017-2019 blog.emxel.com 版权所有 Powered by Arsue