易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
PHP输出小技巧

PHP输出小技巧

众所周知,PHP的字符串输出有两种方法,echo , print ,数组除外
对于这两个,讨论的也是很多,什么速度啦,效率啦等等不一而足。
很明显,不管是从手册上也好,网络也好,大家都知道。echo的速度比print快。毕竟echo是语言结构,而print是函数。

顺便再说个小技巧,大量字符串需要合并输出时,可以考虑不用“.”的连接符,因为当你使用echo 的时候,你可以把这些字符串用逗号隔开,效率那是刷刷D,你想。。。可以不要用连接符了,可以节省多少内存啊。再说了echo是语言结构。用语言结构还不够你牛叉的呀。。。

黑黑

PHP中的Cache

PHP中的Cache

为什么。。。为什么。。。
我都写了两千多字了。为什么我按了一下alt 左箭头,跳到了前一页,再回来数据就全没有了。我的天啊。。。
我的心血啊。。。

又要失去信心和兴趣了。MMD

同事拍的chinaJoy照片

同事拍的一些chinajoy照片,很不错。功力还是有一点的,我和他比起来那是。。。相当的差。

我用好相机那是蹧踏了相机,黑黑

闲话少说,放上照片,照片是有NNNNNN多,我只选择了一些我认为不错的漂亮MM,当然还有很多没有看到,我在他放出来的几十张中选 的。。

看看我的眼光如何吧,个人比较喜欢第9张。谢谢[点击缩略图可以查看大图]

如何更好的提高博客性能[转载+自己的理解分析]

如何更好的提高博客性能[转载+自己的理解分析]

本文是从网上COPY而来,本文原始网址为:http://www.wlue.cn/html/200863124143.html,属于SEO一类的文章,对于文章中的一些见解,如果我有不同看法,我会以不同颜色的文字标出。
请看全文:


对于服务器租用者来说,要想在硬件环境、网络环境等来改善自身网站性能,受客观因素的影响可能会有比较大的难度。因此,只能退而求其次,在程序上狠下功 夫。对于独立博客站长来说,使用的博客程序一般都是比较成熟的发行版的程序,这些程序为了适用的广泛性往往在代码中留出了很大的改进余地,因此,我们可以 在这上面下一些功夫。

  提高博客性能方法一: 合并JavaScript文件。

无论是在PJBlog还是其它的博客程序中,都使用了大量的外部JavaScript文件,要知道,引入一个外部文件都要 发送一个HTTP请求,而在所有影响页面响应速度的因素中,HTTP请求是最关键的一个,因此把所有的JavaScrip文件合并到一个 javascript.js的文件中是一个很好的做法。不过,你要注意不同的JavaScript文件中使用了不同的变量和函数名称,你要保证它们合并之 后还能正常工作。在某些情况下,你也可以有两个独立的JavaScript文件;

  提高博客性能方法二:精减你的JavaScript文件。

合并 JavaScript文件是为了减少HTTP请求次数,但是基本上不会在体积上有所改观,所以你还需要精简掉JavaScript文件中那些没有用的东 西,比如注释、换行、空白等,这大概会使你的程序缩小20%~30%的空间。你可以使用ESC 1.14对文件进行压缩,它的压缩率高达60%以上,对于减少响应大小、提高响应速度来说大有裨益;

  提高博客性能方法三:合并CSS文件与精减CSS文件。

和处理JavaScript文件一样,把所有的CSS文件合并到一个style.css中,CSS比 JavaScript 好处理的一点就是它冲突的机率较小,即便有冲突也不会是大问题。精简就去掉多余的样式化的格式,把所有的CSS规则都放到一行中。这款叫作Minify的 程序不但可以压缩CSS还可以压缩JavaScript和PHP程序。不过这里要提醒的是,如果你要合并和精简文件一定要保留原来的文件以便以后程序更改 时使用。 [在这里推荐一个在线更新CSS文件的地址:http://www.cleancss.com/]

  提高博客性能方法四: 使用CSS Spirites。

所谓的CSS Spirites就是所有CSS中用来做背景图像的图片文件都放到一个文件中。在PJBlog以及其它博客程序的皮肤中,作者很多都没有使用CSS Spirites,这样造成每出现一次background规则都要发送一次HTTP请求,而如果使用CSS Spirites则只需要一次HTTP请求,节省不必要的开支。 [说实话,这里有点痛苦,不是每个做网站的人都懂得这点,但即使懂得这点,如果改起来,对原有的CSS文件的改动也非常大,只有建议那些做模版的朋友们在做模版的时候能够考虑这点就好了。]

  提高博客性能方法五: 使用缓存。

对于静态内容(如Flash、 JavaScript、CSS、Image)通过加上Expires头或者Cache-Control来把它们缓存到客户端,这样用户在下次访问的时候就 可以不用下载这样内容了,这样减少了HTTP请求的次数又减少了下载文件的大小。在IIS中设置文件头很简单,在你要设置的文件或者文件夹上右键点击—— 属性——HTTP头,然后勾中“启用文件过期”,设定过期时间,可以是一年或者十年等,还可以指定某个未来的时间,如2010年等。不过你一但设置了 HTTP头,如果你要对文件作出修改你需为修改过的文件重新起一个名字。 [不知道如何在文件中设置过期时间,PHP还能通过设置头来搞定,可是CSS、JS呢?]

  提高博客性能方法六: 启用Gzip压缩。

Gzip压缩针对 JavaScript、CSS等内容一种压缩技术,它能大大减少文件的体积提高传输速率,精简JavaScript和CSS只是去除不必要的内容,而 Gzip压缩则是将文件在服务器端打包、在客户端解包的过程。Apache和IIS6.0都内置了Gzip技术,现代浏览器都支持Gzip技术(即使不支 持它也会告诉服务器不要打包),因此可以放心使用。在IIS6.0中你需要简单配置之后才能使用Gzip技术,而在Apache 1.3中要启用mod_zip,在Apache 2.x使用moflate。Gzip大概可以节省70%的传输空间,目前互联网中有90%浏览器资料支持Gzip传输。

  提高博客性能方法七: 把JavaSCript 文件放在文档的最末尾,而把CSS文件放在之间。

CSS放在之间会加快文档下载。在Yahoo!的研 究中发现,如果你把一个CSS文件置于文档内部,当浏览器加载到这个样式表时会终止所有文件的下载而单独下载它(一般的下载浏览器使用并行下载模式),这 是因为浏览器在下载到一个CSS文件后都要根据CSS内的规则重绘屏幕,这还会导致用户出现白屏。所以要把你所有的样式文件都放在最开始。而把 JavaScript文件放于末尾下载,一方面可以使用户首先获得文档内容,另一方面JavaScript文件的下载和其它文件不同,它不能和其它文件同 时下载,所有的JavaScript文件只有单独一个一个下载。所以在不影响使用的情况下,JavaScript文件要放在末尾加载。 [关于这点,我确实没有什么话好讲的,JS不同于其他的文件,如果网页中有JS需要在加载的时候运行,你能怎么办?说实话,如果不是用JS框架,这一点几乎不能实现,怎么可能把JS放在文件结尾呢?
CSS放在之间,我想指的应该是放在head之间吧]

  提高博客性能方法八: CSS和JavaScript文档要成为独立的外部文件。

这是因为浏览器加载使用的是并行模式,一次可以加载多个内容,把CSS和JavaScript作为单独文件不但可以减小HTML文档的大小,而可以加快下载效率。 [关于这点,在yslow的介绍文件里也有说明,意思是如果有可能,请尽量为你的CSS中的图片和JS使用单独的域名,这样,即使出现404,也不会影响当前页面的下载,可以加快浏览速度,而且放到单独的域名里之后,也可以更方便的使用、设置过期时间什么的]

  提高博客性能方法九: 使用少量的域名。

一般来说一个页面引用的文件(图片、Flash、CSS、JavaScript)不能多于四个主机,因为每多出一个域名就意味着多一个 DNS的查找,在浏览器查找DNS信息的过程中,浏览器由于不知道要访问的IP地址是什么,所以它什么都不做,只是在等待,所以DNS查找的次数越少,响 应速度就越快。 [这一点,我在yslow里面看到了,同样说明,如果我们要放广告的话,尽量使用同一个网站的广告,这样也能避免DNS查找花费太大的时间]

  提高博客性能方法十: 避免CSS中使用Expression。

虽然功能很强大,但是它的计算频率太高,影响网站的整体性能。对于一个CSS Expression来说,即使你滚动一下屏幕它都要重新计算一次,甚至你移到一次鼠标它都要重新计算,所有一个CSS Express在页面中计算10000次是很容易的事情。

以上就如何提高博客性能方法提出的十条建议。


说的虽然是提高博客性能,但几乎对每个网站的优化都有一定的好处。如果需要更详细的介绍,我想,应该是看那篇关于网页设计的14条军规(现在改为20条了),也可以通过yslow来进行检测,看看你的网站被打分多少。yslow的检测是根据以前的14条军规而进行检测的,现在还没有更新的20条。
所谓的军规也是yahoo那帮子人提出来的,现在也成为了一种规范,yslow就是在这个基础上进行开发,不过yslow是FF的插件哦,IE下面有httpwatch插件,可以清楚的看到网站的每一个页面加载花费了多少时间,在哪个文件或者图片上所花费的时间最长,那么就可以有针对性的进行更新了。

[转载]Discuz! 优化的误区

[转载]Discuz! 优化的误区

很多 Discuz! 的用户在论坛规模达到一定程度上,就要经常性的考虑优化的问题。现在网络上的很多热心的技术人都分享了 Discuz! 的优化经验,应该说,很多经验还是不错的,但也有的帖子可能会让用户走入误区。

误区一:SQL 慢,加索引

多数情况下,数据库可能是瓶颈。通过 Slow Query Log 发现执行时间比较长的 SQL 并不难,于是有的人一看 SQL 走了全表扫描,干脆添加个索引好了。

其实这个地方值得商榷的。第一,必须确定一下该 SQL 执行次数到底是怎样的? 执行真的很频繁? 那么对应的页面是否通过 Cache 可以减少对 DB 的冲击? 如果可以,尽量不要添加索引,索引本身对表的负面影响也是很大的,比如降低更新速度,影响并发能力等。

误区二:瓶颈一定在数据库上

前面说,数据库"可能"是瓶颈,但不总是瓶颈,优化的第一步,必需要有针对瓶颈优化。很多时候,图片访问带来的压力甚至比数据库压力还大 --- 有的用户数据库、用户上传的图片文件、Web 服务器都扔到一台服务器上,这时候,第一手去调整 MySQL 或许会有作用,但价值不大。

应该说,瓶颈的有效定位的确是个技术活儿,对于一个新的论坛环境,也有人用逐一尝试法来做,这倒也没什么。

误区四:盲目的静态编译 MySQL

静态编译 MySQL 有好处,但如果系统已经在线上运行了,在原有环境中进行静态编译未必能带来多大好处。我问过一些朋友,静态编译到底带来多大好处? 没有几个人能说清楚。

对于 PHP 也是这样,如果一次优化从其它方式上能带来更清晰、直接的开销,就不要重新编译

误区五:反复尝试,但不建立基准数据

这其实是第四点的延伸。而建立基准数据,实在应该是优化的最基本的步骤。这样才能有效的评估优化的效果。否则的话,象误区一描述的,添加了一个索引,短期内可能感觉快了,长期看,性能可能又会慢下来。

误区六:一次进行多个优化步骤

这可能是比较普遍的"习惯"了,有的朋友喜欢一次调整多个参数或是多个环境的设置,然后观察效果。如果每个步骤都是"对"的话,那么效果看起来是好的。如果有的步骤调节"错"的话,可能会抵消那些有效果的优化步骤。

优化策略是个见仁见智的问题。以上只是个人浅见,欢迎留言探讨。

--EOF--

(关于误区二直接到误区四的问题,请看首页上的话)

PHP sendmail

PHP sendmail

最近很多人问我如何发邮件,为什么mail函数无法发出去。我当时感慨了一下下。。。
mail函数是linux下面默认的发邮件函数,而且需要安装mail服务,同时要在PHP.ini里面配置好才能发送。 也有人嫌phpmailer太大,正好手头有一个discuz发邮件的类改的函数。贴上来。。。抛抛砖引引玉,不要砸人就行。
毛主席说:要温柔。。。

<?php

$mail = array(
'server' => 'smtp.163.com',
'port' => 25,
'auth' => 1,
'from' => '膘叔 <xxxxxx%163.com>' , //一定要是这种格式,否则可能发不出去
'auth_username' => '膘叔',//发信人帐号,登录邮箱用的,一般不用加域,如果发不出去就尝试加上域看看
'auth_password' => '发信人密码', //发信人密码
'maildelimiter' => 0, //断行符是用还是\r还是\n,1为,2为\r其它为\n
'mailusername' => 1, //是否显示发信人名字
'sendmail_silent' => 1,
'charset'=>'utf-8', //这就要看你的设定了,utf-8还是gbk(如果这里改成了gbk,那么,本文件一定要另存为ansi格式,否则就是乱码)
'adminname' => '小苟', //显示在邮箱的发件人
'adminemail'=>'admin%admin.com',//如果没有$email_from邮箱,就用这个默认的
);
$actName = '操作名称' ; //网站名称,会自动放在主题里,或者你也可以试着修改这个来让别人知道你的标题,比如“系统回复”,“签收”,等

sendmail('小苟 <ttttt%vip.qq.com >,gouki <10000%qq.com>' , 'hahahaha' , '内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容');
echo( 'over' );

function sendmail ($email_to, $email_subject, $email_message, $email_from = ''){
global $mail , $actName;
function errorlog ($type='',$info=''){
$data = '['.$type.']'.$info . "\n";
file_put_contents( 'mail_log.txt', $data , FILE_APPEND );
}
$maildelimiter = $mail['maildelimiter'] == 1 ? "" : ($mail['maildelimiter'] == 2 ? "\r" : "\n");
$mailusername = isset($mail['mailusername']) ? $mail['mailusername'] : 1;

$email_subject = '=?'.$mail['charset'].'?B?'.base64_encode(str_replace("\r", '', str_replace("\n", '', '['.$actName.'] '.$email_subject))).'?=';
$email_message = chunk_split(base64_encode(str_replace(".", " ..", str_replace("\n", "", str_replace("\r", "\n", str_replace("", "\n", str_replace("\n\r", "\r", $email_message)))))));

$email_from = $email_from == '' ? '=?'.$mail['charset'].'?B?'.base64_encode($mail['adminname'])."?= <$mail[adminemail]>" : (preg_match('/^(.+?) \<(.+?)\>$/',$email_from, $from) ? '=?'.$mail['charset'].'?B?'.base64_encode($from[1])."?= <$from[2]>" : $email_from);

foreach(explode(',', $email_to) as $touser) {
$tousers[] = preg_match('/^(.+?) \<(.+?)\>$/',$touser, $to) ? ($mailusername ? '=?'.$mail['charset'].'?B?'.base64_encode($to[1])."?= <$to[2]>" : $to[2]) : $touser;
}
$email_to = implode(',', $tousers);

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

$mail['port'] = $mail['port'] ? $mail['port'] : 25;

if(!$fp = fsockopen($mail['server'], $mail['port'], $errno, $errstr, 30)) {
errorlog('SMTP', "($mail[server]:$mail[port]) CONNECT - Unable to connect to the SMTP server", 0);
}
stream_set_blocking($fp, true);

$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != '220') {
errorlog('SMTP', "$mail[server]:$mail[port] CONNECT - $lastmessage", 0);
}

fputs($fp, ($mail['auth'] ? 'EHLO' : 'HELO')." gouki ");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
errorlog('SMTP', "($mail[server]:$mail[port]) HELO/EHLO - $lastmessage", 0);
}

while(1) {
if(substr($lastmessage, 3, 1) != '-' || emptyempty($lastmessage)) {
break;
}
$lastmessage = fgets($fp, 512);
}

if($mail['auth']) {
fputs($fp, "AUTH LOGIN");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 334) {
errorlog('SMTP', "($mail[server]:$mail[port]) AUTH LOGIN - $lastmessage", 0);
}

fputs($fp, base64_encode($mail['auth_username'])."");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 334) {
errorlog('SMTP', "($mail[server]:$mail[port]) USERNAME - $lastmessage", 0);
}

fputs($fp, base64_encode($mail['auth_password'])."");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 235) {
errorlog('SMTP', "($mail[server]:$mail[port]) PASSWORD - $lastmessage", 0);
}

$email_from = $mail['from'];
}

fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
errorlog('SMTP', "($mail[server]:$mail[port]) MAIL FROM - $lastmessage", 0);
}
}

$email_tos = array();
foreach(explode(',', $email_to) as $touser) {
$touser = trim($touser);
if($touser) {
fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">");
$lastmessage = fgets($fp, 512);
errorlog('SMTP', "($mail[server]:$mail[port]) RCPT TO - $lastmessage", 0);
}
}
}

fputs($fp, "DATA");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 354) {
errorlog('SMTP', "($mail[server]:$mail[port]) DATA - $lastmessage", 0);
}

$headers .= 'Message-ID: <'.gmdate('YmdHs').'.'.substr(md5($email_message.microtime()), 0, 6).rand(100000, 999999).'@'.$_SERVER['HTTP_HOST'].">{$maildelimiter}";

fputs($fp, "Date: ".gmdate('r')."");
fputs($fp, "To: ".$email_to."");
fputs($fp, "Subject: ".$email_subject."");
fputs($fp, $headers."");
fputs($fp, "");
fputs($fp, "$email_message.");
fputs($fp, "QUIT");
}
?>

已经写的够详细了,请不要提问,我也不会解答的,谢谢

资料:MSN 登录时出现80048820错误的官方解释

今天刚刚把系统搞定为windows 2008,N多问题接踵而至,最明显的就是俺的MSN用不了了。

下载好wm_install,提示我服务器版本不能使用windows live,汗一下下,于是找出了以前收藏的一个8.5版本的MSN,这个版本也是因为WM不能在2003下使用而特地收藏的。等到安装好,登录时提示我有新版本,是否更新。同意之后,等待了NNNN久,终于更新完毕,结果还是提示我说,服务器版本不能使用。

不得已,关闭程序重开,选择不同意更新,结果它又提示我说不更新就不能使用。那是相当的。

经过我的不懈努力和google的完美展现,终于找到了原因,原来。。。wm9.0beta可以使用,黑黑,打开迅雷,直接拖回一个wm9.0beta,一下子就安装好了。然后登录,然而,愿望总是美好的,现实也总是残酷的。登录的时候出现了80048820错误,咋回事呢?我该咋整呢?

对于这种事,我一向寄希望于google同学,他也不负我的所托,给了我一个链接:http://www.pxue.com/Html/517.html,打开一看,原来是这么一回事啊。。。

Quote:
When you start MSN Messenger you cannot sign in, and you get the message:

Sorry, we were unable to sign you in to the MSN Messenger at this time. Please try again later.

To let us try and troubleshoot the problem, click the Troubleshoot button.

80048820

Fix this error / possible solutionThis error seems to indicate a problem with MSN Messenger's encryption routines.
The usual cause is that the time on your computer is not correct.
To correct the time on your computer, double-click the clock in the bottom right of your screen, in the window that appears you should check both the time and date.
If you use Windows XP, you can automatically correct the time by clicking the "Internet Time" tab, next click the "Update Now" button.
If you still have problems connecting with the time adjusted, try to run this file. This will make sure MSN Messenger can find all the files it needs on your computer.


中文大概意思:当你的MSN 无法登录,且提示错误代码为80048820,这种问题一般是由于你的系统时间不对,先校准系统时间,如果仍然无法登录,可能是由于DLL文件注册信息丢失,下载这个批处理文件 http://www.msn-problems.com/downloads/register-messenger-dll-files.bat 运行一下,问题应该可以解决.

近期反应无法下载批处理文件的比较多,特放到本地供大家下载:
点击下载此文件

注:如果你的系统时间无法同步的话,请使用这个软件来同步时间
时间同步程序 1.0.0.1(http://www.onlinedown.net/soft/23218.htm)

据小道消息说这几天MSN及HOTMAIL无法登陆是因为被屏掉了,所以如果有能力的话,请寻找国外的代理服务器即可正常使用。
此处给大家留一个代理服务器列表页:http://www.proxy4free.com/page1.html

WENDY网友提出这个解决办法:
Quote:
我最近也遇到了80048820问题,我按照这里说的所有方法都试过,都不成功。但是我在留言里看到有位朋友提到,新帐户可以登陆,我试了试真的可以,于是我把老账户里的C:\Documents and Settings\你的账户名\Application Data下的所有文件夹和文件都删除,问题解决。


其实不需要删除那么多,在其下面有一个目录:Microsfot\MSN Messenger\下保存的就是MSN的资料,各位网友可以试试把这个目录删除看看能否登陆,如果不行的话,再动手删除Microsoft,再不行的话,再按这位网友的办法试试,感谢Wendy网友!

网友VIVIAN的方法:
Quote:
呵呵,我就是用这个方法解决的
千万别删什么文件,不然启动栏里面的快速启动会没有的!

用代理上网会连不上HOTMAIL的网站和MSN,会出现80048820的错误代码。按步骤做:1,控制面板-internet选项-连接-局域网设置-代理服务器把那个钩去掉;2,打开你的msn等那个80048820错误界面出现时点击疑难问题解决那边进入修复就可以了…… 不过要保证那个钩去掉哦。不然下次还会有这个错误。



[本日志由 飘雪 于 2007-09-07 08:36 AM 编辑]

运行了一下bat批处理,然后再次登录。终于,我又可以在MSN上纵横江湖了。感谢CCTV、感谢channel-V,感谢SMG,我终于又可以使用MSN了。