经常会遇到的css兼容性问题
8年前
  • 0
  • 0

经常会遇到的css兼容性问题

弄过网页布局的同学都应该知道一件事情——在火狐、chrome、opera这些浏览器弄得好好的页面到了IE6中却让你无语。是的,那也就是浏览器的css兼容性问题,在IE6下有些事情就出了一些令人意想不到的bug~~所以在写css的时候推荐使用多个浏览器同时调试,才能保证兼容性问题一个接一个地被解决。

20110710191930

而这篇文章就是总结一下一些paperen经常遇到的css兼容性问题以及解决方法。直接切入主题吧。

阅读更多
Just For Fun
8年前
  • 1
  • 0

Just For Fun

话说很久很久以前有个人,他的名字叫paperen,他一直想弄一个聊天工具……而又在同时他不知不觉间步入了WEB的领域,但他依然想弄个聊天工具……于是直到这篇Just For Fun的面世……

一个很囧的引子……其实呢,paperen我在毕业之前就弄了一个,那时打算将它作为毕设的,但结果用了那时在诺网期间那个IP屏蔽的东西作为自己的毕设~~这次再弄了一个,纯属是弄着玩而已,不过也花了些少功夫,代码架构上就一般般,并没有太多面向对象的味道,其实一开始是想发表一个关于在线的东东,结果弄着弄着就加上了聊天对话的东西……下面放出DEMO与RAR包的地址(如果你想做得更好,paperen可以说我这个还远远不够~~但这并不影响你去实现你想实现的更cool的东西):

DEMO paperen.com/demo/just-for-fun/

阅读更多
还是JS图片gallery
9年前
  • 0
  • 0

还是JS图片gallery

看到标题你都明白这次又是说啥了,还是JS图片展览的效果,but,这次同时附上 psytopic.com 里面的那个gallery(准确点来说是盗窃回来的),paperen弄来他们的js,css,同时搜索了关于lightory这个信息,准确点来说是个开发者(根据css文件开头的备注找到了这个线索),paperen当然也不确定是不是这个lightory(t.sina.com.cn/lightory),但可以肯定而且令我惊讶的是微博这位又是一个90后的杰出开发者(又让paperen觉得中国的IT未来一片光明,我们需要的只是创新而已),访问了 他的blog 与摆摆书架(http://bookfor.us/)paperen喜欢这样的UI,摆摆书架的玩法大家也可以了解下,挺有意思的。

多余的东西就到此为止了,说得有点多了……好吧,一开始就来个DEMO给大家看看(psytopic.com的那个)。

20110326212041

阅读更多
关于Mysql的两个实用技术
9年前
  • 0
  • 0

关于Mysql的两个实用技术

paperen对mysql的接触是从玩php开始的,paperen并没有学过SQL,但是自学了一些,对于mysql其实也不是专研得太深,而最近又重新看一遍《PHP和MySql Web开发 第4版》才有发现mysql中有些东西paperen到现在还没有玩过~~所以现在paperen再亲自测试一下并拿出来跟大家分享一下,其实大家有这本书的话不妨自己翻开,再看看12,13章的内容,当然如果你是已经了解并玩得很熟了那么可以忽略了。

大概总结了下,这两章介绍了一些玩法有:mysql prepared,pear mdb2,权限分配,sql优化分析,备份与恢复数据库,主从同步数据库,innodb事务与外键,存储过程。都是一些很实用的技巧,而这里paperen只具体说说主从同步数据库与存储过程,其他技巧自己去查查资料吧。

主从同步数据库,这个概念应该很好理解,其实就是集群数据库的概念,在客户端看上去数据库只有一个,但是实质上不止一个,可能是多个数据库在维持,实质上说这个技巧是为了保证web平台的稳定而使用的,paperen觉得这个技巧并不是用来防止数据出错(数据出错站在mysql的层面来看是根本没法避免的,只能靠备份来预防)是为了提高可靠性。

阅读更多
IDE中你最喜爱的字体是哪个
9年前
  • 0
  • 0

IDE中你最喜爱的字体是哪个

理论上说这是一篇提高我们写代码时的幸福感的文章,you know~paperen也对这个捣腾了许久,好的IDE是会让你写起代码来更加顺手,而当你找到了你喜爱的IDE后是否有想过将代码的字体也改得更好看更舒服一点,那敲起代码来就更舒服了,对眼睛也更好一点,you know有一句话是没错的“代码如诗”……

当然啦,这个话题是无关任何语言平台的,关乎的只是代码的外表美,嗯~确实比较肤浅……you see,paperen目前习惯使用的IDE是netbean+dreamweaver,前者写php代码后者写css与js,一直都习惯这样做的了,paperen很喜欢netbean但是代码的字体总不是那么好看……相对于dreamweaver而言,在dreamweaver中如果你的文件编码是utf8的话它默认使用的字体是Courier New的,如果你的编码是gbk/gb2312的话那么默认的字体就是宋体,但是paperen倒是觉得宋体下的英文难看了。

下面先放出一个paperen测试过程中试用的字体,你可以在里面选择你觉得顺眼的对比对比。paperen目前的首选字体是Courier New 15号的,而dw中也是Courier New 12pt,感觉雅黑怎不太好看呢,有点失望,难道是paperen的雅黑字体是盗版的……

阅读更多
多少
9年前
  • 3
  • 2

多少

“用多少天用多少年的跌跌撞撞才找到終點”,越成長就越喜歡陳奕迅的歌,發覺每首歌都好好聽。沖涼時唱一個,等公交時哼一段,睡覺前聽一首~~

不知道不覺得又一年了,時間就是這麼快,畢業已經半年了,還是不時地想念宿舍的弟兄們,paperen想他們大概也變了,跟大學的朋友交流也越來越少了,偶爾在綫上聊幾句,一開始還有給部分人發短信報告一下自己的生活,電話一開始也有打過,但是漸漸的就少了,paperen不知道能不能用越來越陌生來形容,但是在paperen認為不至於陌生,因為再碰到他們的時候可能不如大學的那樣青春了那樣單純了,但是在paperen腦中他們還是我在大學認識的他們,而paperen還是他們在大學認識的paperen……

冬至到底是什麼一個節日,聖誕節,元旦,paperen對節日沒什麼感覺,只對放假敏感…聖誕節夜晚的街上應該挺美的,假的聖誕樹,繽紛的燈泡,但對於paperen來說也就是一轉眼過去的東西。晚上回蝸搭的差不多都是末班車,一直喜歡坐在最後的位置,靠著窗,有時後會對著車窗發呆有時候會在做手指操…而看著外面不斷後退的街道與途人,還是能清晰地告訴我“這裡是深圳,這個是繁華的城市”。

阅读更多
最近碰到的一些WEB安全问题
9年前
  • 0
  • 0

最近碰到的一些WEB安全问题

近来paperen总想写点东西但又写不出来,每月一篇还真"月经"似的……最近对公司的WEB项目进行一些安全测试,又提及到一些WEB安全的问题,改了那个烂摊子差不多半年了才终于来到了安全测试的份上,阿叔用了不少软件来检测这个web项目,结果正如paperen想象中一样,N多漏洞提示。之前的代码写得确实不太严谨呢,对一些参数就明显没有过滤,这样导致的问题会比较严重,比如一个叫Cross Site Scripting的漏洞(就是一个能注入javascript的漏洞无论在URL还是提交的表单里面注入),严重的是SQL Inject漏洞(sql注入是在参数中构造特殊的字符串从而爆出数据库重要信息或者能执行一些危险的操作),除了程序本身导致的漏洞外还有一些服务器配置的漏洞也需要修复,但是60%的漏洞主要是由程序导致的,这确实是程序员要明白的,一个好的web程序不应该只是从可运行性上去分析,重视质量你会得到更多。

阿叔使用了好几个测试工具,其实测试出来的结果基本都是差不多的,以下的漏洞主要是使用一个叫iiscan(亿思公司的)的来扫描站点得到的漏洞报告,还是蛮不错的。

在此说下碰到的几个漏洞。

阅读更多
js日历控件 扒自Discuz
9年前
  • 0
  • 0

js日历控件 扒自Discuz

一直一直以来就想整理出一个js控件,每次paperen要弄js日历控件就得上网找,当然jquery-ui的可以但是又觉得貌似需要的引擎有点多本身就需要jquery的框架又要引入ui的js文件还有图片与css,重要的是它那个改起来不会……而一些不兼容浏览器的控件也有(干脆就不用了不兼容不能拉出来见人的)。而今天终于有机会让paperen我扒了discuz的下来(在ie,火狐,opera下测试没问题,其他的就不知道了),并最终整合到只有一个js文件就能调用,当然也需要一些css文件的支持,不然会不好看。

DEMO地址 http://paperen.com/demo/js-calendar/

20101017140222

阅读更多
你是这样处理来自$_GET的数据吗
9年前
  • 0
  • 1

你是这样处理来自$_GET的数据吗

最近看恶心代码太多了,也写了太多垃圾代码了……真是哦弥陀佛……感觉paperen变垃圾……

唉~~不多说了,直接开始正文算了。放代码,对比一下下面两个sql变量,然后入库查询,你觉得有问题么?

$id = isset($_GET['id']) ? $_GET['id'] : '';
if ($id) {
$sql = 'select * from goods where id='.$id;
echo $sql.'
';

$r_1 = $db->select($sql);
print_r($r_1);

echo '----
';

$sql = "select * from goods where id='$id'";
echo $sql.'
';

$r_2 = $db->select($sql);
print_r($r_2);

echo '----
';
}

表面上看上去都是可以的,当test.php?id=1时输出sql这个变量都是一样的,但是如果我随意改变一下这个id呢?改为test.php?id=1 or 1=1,你就会看到区别了。

阅读更多
js碰撞游戏一枚
8年前
  • 0
  • 1

js碰撞游戏一枚

一直都觉得javascript可以玩得很cool。所以终于尝试了使用js来写了一个小游戏,界面上其实也没什么特色~~普普通通吧,paperen将这个游戏取名为(untouchable)不可触及,游戏规则其实很简单,不要让那个按钮与那些飞来飞去的小球发生碰撞,看你能熬到多少秒。

20110521142514

 untouchable游戏地址  http://paperen.com/demo/collision/

阅读更多
不要忽略了前端的性能
9年前
  • 0
  • 1

不要忽略了前端的性能

将《高性能网站建设指南》读完了,感觉很好,这本书值得大家一读。让paperen对前端性能优化有了更多了解。steve souders 将所有法则都描述得很彻底,很简洁。书中一些观点更是让paperen深刻“只有10%-20%的最终用户响应时间花在了下载HTML文档上,其余的80%-90%时间花在了下载页面中的所有组件上”,“如果将后端响应时间缩短一半,整体响应时间只能减少5%-10%,如果关注前端性能,同样是将其响应时间减少一半,则整体响应时间可以减少40%-45%”,总结得真的很到位,更重要的是你在阅读过程中会通过例子自己体会到作者这些观点。

光看封面都挺有意思的,留意那只狗的比例。

20110327151826

阅读更多
加密的GET参数
9年前
  • 1
  • 0

加密的GET参数

WEB驱动事件与交互的最基本的方法就是通过GET参数,我想你懂paperen说的是什么意思的。

www.example.com/news/?id=234

www.example.com/goods.php?id=2

阅读更多
[转载] 网页的栅格系统设计
9年前
  • 0
  • 0

[转载] 网页的栅格系统设计

先声明一下,这篇文章转载至TaobaoUED博客,还是一篇很旧的文章,但旧不要紧paperen觉得值得分享所以就转载了。原文url http://ued.taobao.com/blog/2008/09/17/grid_systems/  或者你还没有了解过栅格这个名词,但不要紧通过这篇文章你就能了解到栅格在web设计上的应用,好文章值得转,好技能值得你拥有,so,paperen决定转载这篇文章,第一次转载(paperen连图片也截下来了)。

20110125094921

栅格系统的形成

阅读更多
关于smtp发送邮件一些东东
9年前
  • 0
  • 0

关于smtp发送邮件一些东东

最近paperen公司的那个搞了一年的东西也差不多可以拿出来了,至少在数据上可靠了点,界面上就……程序上就更……关于丢失密码的处理会有涉及到给会员的注册邮箱发送邮件功能,其实就是运用了SMTP这个服务。

正如对PHP函数有了解的人都应该知道PHP中有一个mail函数,直接调用它理论上就可以发送邮件了

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

你能从手册中获得更多例子,这个函数确实是太方便了,以至于paperen一开始也会对它感到神奇,因为实在是搞不清为什么一个函数就能发送一封邮件,直观上看来貌似这个函数能直接跟邮局联系。但实质上它要起作用需要服务器的支持,简单来说你的服务器需要有SMTP 服务。

很幸运公司的服务器有这个服务,但也很不幸运直接调用mail函数来发邮件的结果并不能让自己满意。当然paperen也找了不少网上提供的发送邮件代码,结果都不是很满意的,有些邮箱能收到有些邮箱收不到,而且绝大部分都是一些主流的邮箱,例如163,126等

所以paperen觉得还是有必要自己搞清楚一下这个原理,其实真的没那么神秘。

或者你开始你需要对smtp有一个基本的了解,paperen貌似以前大学的时候就学过这个,但书上学得确实没有实践中学的劲。

或者你可以看看以下链接的内容

然后动动手试试在"黑屏"下发一封邮件玩玩。下图为telent localhost 25后的界面,可以使用help参数查看命令。

20110113210420

如果有一台服务器而且有smtp服务的话不妨可以试试,paperen公司里面就有一台对外的服务器可以玩,oy~~不过如果没有服务器也不要紧,你可以使用第三方的smtp服务的,参见下面的例子(使用163的)

在cmd下输入 telnet smtp.163.com 25

20110113210644

就能登陆到163的smtp服务了,不过首先要使用helo命令打个招呼先

220 163.com Anti-spam GT for Coremail System (163com[20101010])
helo paperen
250 OK
auth login
334 dXNlcm5hbWU6
//你帐号的base64码
334 UGFzc3dvcmQ6
//你帐号密码的base64码
235 Authentication successful
mail from:
250 Mail OK
rcpt to:
250 Mail OK
data
354 End data with .
mime-version:1.0
from:paperen
to:paperen
subject:test
content-type:text/html; charset="utf-8"
//这里要空两行,1行
//2行
hello world!
.
250 Mail OK queued as smtp4,DtGowLCbrgVa+y5N1C9xAA--.11142S2 1294924769

20110113212115

其中334两行分别要填写您在163的帐号与密码,而且要用base64码,这个也很容易嘛,可以用php中的base64_encode函数帮你或者用在线工具 http://tool.114la.com/base64.html  复制后在黑屏里面右击粘贴就可以了,也不用自己照着输入。

后面其实也就没什么了,mail from你懂的,rcpt to也就是要发给谁。不过要注意一下在data后,也就是在写邮件内容前空两行。然后到gmail看看吧。

20110114091637

这就使用命令行模式下成功发送了一封邮件了,这就是发送邮件的原理。Of course~光来点英文的信件也没神马意思,我们就是喜欢玩花样的,或者你觉得"发中文内容还不容易嘛,也是拷贝的功夫",在黑屏下的确不支持中文输入法的,没错也得用拷贝的方法将中文弄到邮件内容里面去,但别高兴得太早,如果你以为就这么简单那么你就错了,结果发送过来的邮件就是一堆乱码"??????????????????",N个口……问你死未……

其实发中文的关键也在于要对内容进行一下base64加密,并在邮件头加上一个声明

Content-Transfer-Encoding: base64

那么发送的内容就ok了,不过至于邮件的标题嘛,详见下面,因为标题处有些少复杂,需要加上一些字符来标识。

所谓懒惰是动力是对的,想象一下如果我们都是在命令行下发送邮件的话……发一封邮件少则需要15分钟,多则半个小时……这真的让人崩溃了,就连paperen自己面对着这个黑屏状态敲着无数遍重复的命令也快要崩溃了(还不能输错,paperen不知道如何删除之前的输入……只能覆盖而且覆盖后的命令会乱码的,你试试看就明白),就写一个程序让它帮我们发送邮件好了。

下面开始来更爽的,就是搞一个发邮件的php程序。

或者在开始之前你需要了解关于socket的知识  http://baike.baidu.com/view/13870.htm

简单来说socket就是ip+端口号的意思,你需要跟其他机子交流你需要链接到正确的端口号上并且该端口号应该有进程在接收与处理数据,或者大概就是这个意思吧~~而正如在命令行下操作发送邮件,我们首先要做的就是要连上smtp服务器,然后再输送命令与数据,所以我们第一步是要连接到服务器smtp服务监听的端口上,163的就是25。

php内置关于socket操作的函数也够全面的了,自己可以在手册中输入socket看看。

对于连上163的smtp,首先使用的是fsockopen(Open Internet or Unix domain socket connection)打开一个socket连接,fsockopen返回的是一个资源类型的数据,换言之可以使用fgets来获取在socket上传输的数据。

$smtp_server = 'smtp.163.com';
$smtp_port = '25';
$fp = fsockopen( $smtp_server , $smtp_port );
echo fgets( $fp );
//220 163.com Anti-spam GT for Coremail System (163com[20101010])
fclose( $fp );

既然可以这样搞,故下面的代码就明了,注意的是可能需要判断一下服务端返回的状态,是否错误,是否可以继续。不过在这个例子中paperen就不写这么严谨了,毕竟最后会分享一个摘自uchome的利用socket发送邮件的函数。

$username = '***';//您邮箱的帐号,@前面的
$password = '***';//密码

$from = 'paperen@163.com';//寄信人邮箱
$to = 'paperen@gmail.com';//收件人邮箱
$smtp_server = 'smtp.163.com';//smtp服务器
$smtp_port = '25';//端口
$message = "Hello paperen,i use php send a mail to you,very cool yet?";//邮件内容
$subject = "Test Only";//邮件标题

set_time_limit(0);

$fp = fsockopen( $smtp_server , $smtp_port );
if( substr( fgets( $fp ), 0, 3 ) != '220' ) exit('connect error');

//hello
fputs($fp, "helo 163\r\n");
if( substr( fgets( $fp ), 0, 3 ) != '250' ) exit('helo error');

//auth login
fputs($fp, "auth login\r\n");
if( substr( fgets( $fp ), 0, 3 ) != '334' ) exit('user error');
fputs($fp, base64_encode( $username ) . "\r\n" );
if( substr( fgets( $fp ), 0, 3 ) != '334' ) exit('pwd error');
fputs($fp, base64_encode( $password ) . "\r\n" );

//auth success
if( substr( fgets( $fp ), 0, 3 ) != '235' ) exit('auth failed');

//mail from
fputs($fp, "mail from:<{$from}>\r\n" );
if( substr( fgets( $fp ), 0, 3 ) != '250' ) exit('mail from error');

//rcpt to
fputs($fp, "rcpt to:<{$to}>\r\n" );
if( substr( fgets( $fp ), 0, 3 ) != '250' ) exit('rcpt to error');

//data
fputs($fp, "data\r\n" );
if( substr( fgets( $fp ), 0, 3 ) != '354' ) exit('data error');

//header
$headers = "mime-version: 1.0\r\n";
$headers .= "from: paperen<{$from}>\r\n";
$headers .= "to: paperen<{$to}>\r\n";
$headers .= "subject: {$subject}\r\n";
$headers .= "content-type: text/html; charset=utf-8\r\n";

fputs($fp, "{$headers}\r\n\r\n" );
fputs($fp, "$message\r\n");
fputs($fp, ".\r\n");

if( substr( fgets( $fp ), 0, 3 ) != '250' ) exit('sendmail failed');
echo 'OK';

fclose( $fp );

20110114205835

就是这么简单就可以用php帮你搞掂,是不是很cool~

下面附带自己在uchome摘出来的一个sendmail函数,具体配置需要自己根据自己需求修改才可以发送,paperen测试过gmail,163,126,sina,hotmail,qq均可以收到邮件。

关于中文标题与内容乱码的问题自己参照sendmail这个函数中看吧,看完你就明白了,主要是43行到53行的代码要看看。

$email_subject = '=?' . $mail['charset'] . '?B?'.base64_encode(preg_replace("/[\r|\n]/", '', '['.$mail['sitename'].'] '.$subject)).'?=';
$email_message = chunk_split(base64_encode(str_replace("\n", "\r\n", str_replace("\r", "\n", str_replace("\r\n", "\n", str_replace("\n\r", "\r", $message))))));

$headers = "From: $email_from{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: ". $mail['sitename'] ."{$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: text/html; charset=" . $mail['charset'] . "{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}";

下载地址 这里

呼·~~好不容易才写完一篇,希望对使用php发送邮件或者想玩玩底层发邮件的你有点帮助吧

阅读更多
稍微高级一点的SQL注入
9年前
  • 1
  • 0

稍微高级一点的SQL注入

正如之前paperen的 你是这样处理来自$_GET的数据吗 里面说的,还有很久之前的 小心sql注入漏洞 ,都是涉及到SQL注入的一些东西,其实您如果对SQL注入有兴趣的话不妨点击paperen友情链接中的习科论坛去那看看,里面很多帖子都是有关入侵的,而paperen在这个组织不知不觉间也都快4年了。废话也就不多说了,直接入话题。

还记得在“你是这样处理来自$_GET的数据吗 ”里面写到的那个SQL,

$sql = 'select * from goods where id='.$id;

不对传入来的数据进行任何过滤甚至不用单引号抱起来会导致的问题在那篇文章中已经说的比较明确了,如果您能猜到数据库其他表的话还能查到其他表的内容,而这次paperen想说一些使用这个漏洞更高级的一个技巧。

阅读更多
GooMa[纯属恶搞]
9年前
  • 0
  • 0

GooMa[纯属恶搞]

前几天paperen跟一位也是从事php行业的朋友聊天,之后他向paperen展示了他做的一个物质系统,那数据确实蛮多的,远程过去看他玩了会,paperen就看中了那个搜索提示功能,咦!当输入中文的时候也可以有提示哇~~从而又想起前前几天一位从事java的朋友问paperen一个中文索引的问题,咦!当时不就是想到一个如何对姓名排序的问题,就像paperen部索爱W550C的电话簿中输入L会找到李,梁的姓,当时看到那个搜索提示觉得很神奇(虽然google的时候也经常是有了……但是你总不能给google发个邮件问问你首页那个搜索提示是咋整的捏吧),paperen一直是以为用数据库来做这个功能,但是那位朋友说了一个神奇的功能“中文转拼音”。wow~~这次赚了,所以就有了这个“姑妈”啦。

中文转拼音的源代码去google一下就大把,这里随便放个链接,猛点here

good!总而言之,是一堆比较长的代码,看不懂就当养养眼吧。下面放出demo地址-猛点here,压缩包地址-猛点here

阅读更多
uchome中提示框的调用
9年前
  • 1
  • 0

uchome中提示框的调用

众所周知的事情,discuz的产品是被广泛使用的,大部分论坛都是使用discuz的,而uchome也作为discuz在sns领域的产品被广泛使用,充分扩展了论坛用户的联系,从一个论坛变为一个社区。而且关键是源代码公开的,也就是说你可以看它的代码并根据自己需要加入自己的代码与二次开发,或者二次开发discuz的产品能被作为php程序员的基本技能之一。

最近,也不能说是最近了……近一个月……paperen研究了uchome,虽然也并没有把所有功能都看完,但是整体的模式还是明白了,有MVC的味道。paperen主要看了cp.php与space.php的代码,还有它是如何处理ajax的请求的。而paperen发的这篇博文的主题就是一个很简单ajax的运用。

20101007104820

阅读更多
传说中的SPL
9年前
  • 3
  • 2

传说中的SPL

SPL,PHP 标准库(Standard PHP Library),paperen之前在《PHP高级程序设计:模式、框架与测试》一书中就见过这个词,但是那时貌似没有认真对待它,而今天paperen再重新查阅了spl相关的资料,证实了一样东西“值得一试并值得加以融入到以前的编码模式中”。放在前面,本文并不是要详说spl中的具体东西,而是纯属个人吹水……

可能您也没怎么了解有关spl的东西,但是建议您不妨查阅一下资料,在google输入php spl您会得到一些很吸引人的标题,比如“PHP SPL,遗落的宝石”,确实值得您浏览一番滴~~

”spl从 PHP 5.0 起内置的组件和接口,并且从 PHP5.3 已逐渐的成熟“,但目前spl貌似没怎被开发使用。当然啦,在使用spl之前还是得需要一定的代码基础,因为大部分都是与类或者接口打交道的,如果您连什么叫类都不是太清楚的话,相信阅读手册会可能会有点困难,您至少需要有些少oop(Object Oriented Programming)面向对象的基础。

阅读更多