存档

‘php技术’ 分类的存档

24

如何适当提高谷歌广告点击率和单价之二:
2、用户体验

不管在什么地方都会有人谈用户体验,而要有一个高的广告价格用户体验也相当重要。最简单的方式就是把自己也当作一个访问者,会不会对自己做的站点有兴趣,用 户体验的优秀程度影响着广告的转换率,所以直接关系到你的广告单价。你要把每个访问你站点的人当作你的赚钱对象,所以你得对他好不要把访问者当作点击机器,那样你会得不偿失的。尽管很多人认为adsense更钟情于新访问者,但是只有一个对你内容有兴趣的访问者才会静下心来阅读你网站的内容,才有机会去发现并点击他感兴趣的广告,你才有钱赚如果你的站仅仅是能通过各种手段获得用户的来访,他们并不在乎你的网站内容,但是会有意无意地点击你的广告,不过他们也会在广告页面打开之前就关闭掉或者根本不看广告的内容,这样你的广告价格就会越来越低。

你可以不奢望用户访问之后还会再来,最起码得让他们有兴趣把他打开的页面看完,这是Google Adsense的最低用户体验。实现这个也不难,把你的页面结构设计得合理一些,颜色搭配和谐一些,网站内容规范一些,信息完整一些,就足够了。同一广告在什么网站上价格最高?是相关性最好的站点。

大部分发布者都有一个误解,认为高价的关键词和高价的广告就能带来高的收入。我们可以这样假设,一个一点击最高价为10美元的汽车发动机广告在你的论文站点上出现一个点击可能也只有1美分。Google的内容定位广告非常强调相关性以及准确匹配。所以当你发现你的站点上出现不相关的英文广告时,就再也不要暗自庆幸了。

3、准确匹配

什么样的内容最能准确匹配?文本内容。Google Adsense最中意的是文本内容,因为那样可以更加方便地获取关键词和匹配广告。Google Adsense的技术一直在改进,目前通过JS投放的广告匹配不受影响,iframe投放可能依然有一些问题。尽量避免大两的图片或者FLASH的页面,这样的页面很难匹配到广告,更不用说准确匹配了Google Adsense的关键词定位也是非常复杂,它会考虑很多因素,包括域名和url的名称、meta的内容和页面的内容,这些都直接影响着你的网页上出现的广告,所以你得注意你网页上的任何一个内容,让他忠实于你的主题。

4、更新和差异更新

更新是一个网站必须的,搜索引擎更喜欢不断更新的站点,除非你的站点评级非常高,否则你比不过那个采集你但是保持更新的站,Google Adsense也一样,很多人的确是在更新并且在不断更新,因为设置采集更新不是一件特别复杂的事情,只是他忽略了一个重大的问题:差异性。做垃圾站除了优化的技巧以外,更重要的是差异性。因为垃圾站最大的缺陷就是内容在互联网上高度重复,而发布者可以通过差异更新来克服这个弱点,如果不再是一个高度重复的内容而是独有的,那么至少在搜索引擎眼里就不再是垃圾站点。  差异更新包括新增内容和编辑之前的内容。简而言之就是让你的信息和他人的不再一样,你可以通过编辑标题,文本内容的结构来实现。这样的工作你需要坚持地做,直到你的很多内容都和互联网上的有差异,然后你的垃圾站就成了一个好站点,Google Adsense会喜欢的差异更新包括新增内容和编辑之前的内容。

简而言之就是让你的信息和他人的不再一样,你可以通过编辑标题,文本内容的结构来实现。这样的工作你需要坚持地做,直到你的很多内容都和互联网上的有差异,然后你的垃圾站就成了一个好站点,Google Adsense会喜欢的。大体的原则差不多就这些,具体的执行情况个人不同所以会有很大的差距。不过我们需要知道没有适合所有人的灵丹妙药,从某种程度上讲广告主的预算一定的情况下,各个站长在努力争取更多的一部分,不会出现所有站长都能赚大钱的情况。如果你发现你努力了但是单价依然很低,那么有可能是其他人比你更加努力或者这些建议并不适合你。你可以访问广告发布者论坛,看看其他人给的一些建议,或许你会有新的启发。另外的一种垃圾站点,通过搜索引擎优化或者其他的方式获得大量的流量,在页面上放置了无数的广告和弹出窗口,甚至有恶意代码和木马程序,应该算是真正的垃圾站了,所以在这里我们就不谈这种类型的站点了。

20

Output Control 函数可以让你自由控制脚本中数据的输出。它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况。输出控制函数不对使用 header() 或 setcookie(), 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用。

我们先举一个简单的例子,让大家对Output Control有一个大致的印象:
Example 1.

<?php
ob_start(); //打开缓冲区
echo \”Hellon\”; //输出
header(“location:index.php”); //把浏览器重定向到index.php
ob_end_flush();//输出全部内容到浏览器
?>

所 有对header()函数有了解的人都知道,这个函数会发送一段文件头给浏览器,但是如果在使用这个函数之前已经有了任何输出(包括空输出,比如空格,回 车和换行)就会提示出错。如果我们去掉第一行的ob_start(),再执行此程序,我们会发现得到了一条错误提示:“Header had all ready send by”!但是加上ob_start,就不会提示出错,原因是当打开了缓冲区,echo后面的字符不会输出到浏览器,而是保留在服务器,直到你使用 flush或者ob_end_flush才会输出,所以并不会有任何文件头输出的错误!

一、 相关函数简介:
1、Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。
2、ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。
3 、ob_get_contents :返回内部缓冲区的内容。
使用方法:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。
4、ob_get_length:返回内部缓冲区的长度。
使用方法:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回 FALSE。
5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。
使用方法:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)。
6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
使用方法:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除!
7、ob_implicit_flush:打开或关闭绝对刷新
使用方法:void ob_implicit_flush ([int flag])
说明:使用过Perl的人都知道$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()

二、深入了解:

1. 关于Flush函数:
这个函数在PHP3中就出现了,是一个效率很高的函数,他有一个非常有用的功能就是刷新browser的cache.我们举一个运行效果非常明显的例子来说明flush.
Example 2.

<?php
for($i = 1; $i <= 300; $i++ ) print(“ “);
// 这一句话非常关键,cache的结构使得它的内容只有达到一定的大小才能从浏览器里输出
// 换言之,如果cache的内容不达到一定的大小,它是不会在程序执行完毕前输出的。经
// 过测试,我发现这个大小的底限是256个字符长。这意味着cache以后接收的内容都会
// 源源不断的被发送出去。
For($j = 1; $j <= 20; $j++) {
echo $j.”
”;
flush(); //这一部会使cache新增的内容被挤出去,显示到浏览器上
sleep(1); //让程序“睡”一秒钟,会让你把效果看得更清楚
}

?>
PHP2000的最新的PHP聊天室就是用的这个技术,可惜的是源代码未公开 L
注:如果在程序的首部加入ob_implicit_flush()打开绝对刷新,就可以在程序中不再使用flush(),这样做的好处是:提高效率!

2. 关于ob系列函数:
我想先引用我的好朋友y10k的一个例子:
Example 3.

比如你用得到服务器和客户端的设置信息,但是这个信息会因为客户端的不同而不同,如果想要保存phpinfo()函数的输出怎么办呢?在没有缓冲区控制之前,可以说一点办法也没有,但是有了缓冲区的控制,我们可以轻松的解决:
<?php
ob_start(); //打开缓冲区
phpinfo(); //使用phpinfo函数
$info=ob_get_contents(); //得到缓冲区的内容并且赋值给$info
$file=fopen(\’info.txt\’,\’w\’); //打开文件info.txt
fwrite($file,$info); //写入信息到info.txt
fclose($file); //关闭文件info.txt
?>
用以上的方法,就可以把不同用户的phpinfo信息保存下来,这在以前恐怕没有办法办到!其实上面就是将一些“过程”转化为“函数”的方法!
或 许有人会问:“难道就这个样子吗?还有没有其他用途?”当然有了,比如笔者论坛的PHP 语法加亮显示就和这个有关(PHP默认的语法加亮显示函数会直接输出,不能保存结果,如果在每次调用都显示恐怕会很浪费CPU,笔者的论坛就把语法加亮函 数显示的结果用控制缓冲区的方法保留了),大家如果感兴趣的话可以来看看http://www.zphp.com/bbs/!

可能现在大家对ob_start()的功能有了一定的了解,上面的一个例子看似简单,但实际上已经掌握了使用ob_start()的要点。
<1>.使用ob_start打开browser的cache,这样可以保证cache的内容在你调用flush(),ob_end_flush()(或程序执行完毕)之前不会被输出。
<2>. 现在的你应该知道你所拥有的优势:可以在任何输出内容后面使用header,setcookie以及session,这是ob_start一个很大的特 点;也可以使用ob_start的参数,在cache被写入后,然后自动运行命令,比如ob_start(\”ob_gzhandler\”);而我们最 常用的做法是用ob_get_contents()得到cache中的内容,然后再进行处理……
<3>.当处理完毕后,我们可以使用各种方法输出,flush(),ob_end_flush(),以及等到程序执行完毕后的自动输出。当然,如果你用的是ob_get_contents(),那么就要你自己控制输出方式了。

来,让我们看看能用ob系列函数做些什么……

一、 静态模版技术

简 介:所谓静态模版技术就是通过某种方式,使得用户在client端得到的是由PHP产生的html页面。如果这个html页面不会再被更新,那么当另外的 用户再次浏览此页面时,程序将不会再调用PHP以及相关的数据库,对于某些信息量比较大的网站,例如sina,163,sohu。类似这种的技术带来的好 处是非常巨大的。

我所知道的实现静态输出的有两种办法:
<1>.通过y10k修改的phplib的一个叫template.inc.php类实现。
<2>.使用ob系列函数实现。
对于第一种方法,因为不是这篇文章所要研究的问题,所以不再赘述。
我们现在来看一看第二种方法的具体实现:
Example 4.

<?php
ob_start();//打开缓冲区
?>
php页面的全部输出
<?
$content = ob_get_contents();//取得php页面输出的全部内容
$fp = fopen(“output00001.html”, “w”); //创建一个文件,并打开,准备写入
fwrite($fp, $content); //把php页面的内容全部写入output00001.html,然后……
fclose($fp);
?>

这样,所谓的静态模版就很容易的被实现了……

二、 捕捉输出

以上的Example 4.是一种最简单的情况,你还可以在写入前对$content进行操作……
你可以设法捕捉一些关键字,然后去对它进行再处理,比如Example 3.所述的PHP语法高亮显示。个人认为,这个功能是此函数最大的精华所在,它可以解决各种各样的问题,但需要你有足够的想象力……
Example 5.

<?
Function run_code($code) {
If($code) {
ob_start();
eval($code);
$contents = ob_get_contents();
ob_end_clean();
}else {
echo “错误!没有输出”;
exit();
}
return $contents;
}
以上这个例子的用途不是很大,不过很典型$code的本身就是一个含有变量的输出页面,而这个例子用eval把$code中的变量替换,然后对输出结果再进行输出捕捉,再一次的进行处理……

Example 6. 加快传输

<?
/*
** Title………: PHP4 HTTP Compression Speeds up the Web
** Version…….: 1.20
** Author……..: catoc <catoc@163.net>
** Filename……: gzdoc.php
** Last changed..: 18/10/2000
** Requirments…: PHP4 >= 4.0.1
** PHP was configured with –with-zlib[=DIR]
** Notes………: Dynamic Content Acceleration compresses
** the data transmission data on the fly
** code by sun jin hu (catoc) <catoc@163.net>
** Most newer browsers since 1998/1999 have
** been equipped to support the HTTP 1.1
** standard known as \”content-encoding.\”
** Essentially the browser indicates to the
** server that it can accept \”content encoding\”
** and if the server is capable it will then
** compress the data and transmit it. The
** browser decompresses it and then renders
** the page.
**
** Modified by John Lim (jlim@natsoft.com.my)
** based on ideas by Sandy McArthur, Jr
** Usage……..:
** No space before the beginning of the first \’<?\’ tag.
** ————Start of file———-
** |<?
** | include(\’gzdoc.php\’);
** |? >
** |<HTML>
** |… the page …
** |</HTML>
** |<?
** | gzdocout();
** |? >
** ————-End of file———–
*/
ob_start();
ob_implicit_flush(0);
function CheckCanGzip(){
global $HTTP_ACCEPT_ENCODING;
if (headers_sent() || connection_timeout() || connection_aborted()){
return 0;
}
if (strpos($HTTP_ACCEPT_ENCODING, \’x-gzip\’) !== false) return \”x-gzip\”;
if (strpos($HTTP_ACCEPT_ENCODING,\’gzip\’) !== false) return \”gzip\”;
return 0;
}
/* $level = compression level 0-9, 0=none, 9=max */
function GzDocOut($level=1,$debug=0){
$ENCODING = CheckCanGzip();
if ($ENCODING){
print \”n<!– Use compress $ENCODING –>n\”;
$Contents = ob_get_contents();
ob_end_clean();
if ($debug){
$s = \”<p>Not compress length: \”.strlen($Contents);
$s .= \”
Compressed length: \”.strlen(gzcompress($Contents,$level));
$Contents .= $s;
}
header(\”Content-Encoding: $ENCODING\”);
print \”x1fx8bx08x00x00x00x00x00\”;
$Size = strlen($Contents);
$Crc = crc32($Contents);
$Contents = gzcompress($Contents,$level);
$Contents = substr($Contents, 0, strlen($Contents) – 4);
print $Contents;
print pack(\’V\’,$Crc);
print pack(\’V\’,$Size);
exit;
}else{
ob_end_flush();
exit;
}
}
?>

这是catoc的一段很早以前的代码,是在weblogs.com看到的,他利用了zlib的函数,对传输的内容进行了压缩,测试表明,对于10k以上的页面,会产生效果,而且页面越大,效果越明显……

更多的精彩请访问 http://www.jxuan.com/

20

当我们在接受未知客户端提交的数据,由于各客户端的编码不统一,但在我们的服务器端最终只能以一种编码方式来处理,这种情况下就会涉及到一个将接受到的字符转换为特定编码的问题。

这时可能会想到直接用iconv来进行转码,但我们知道,iconv这个函数需要提供的两个参数为输入编码和输出编码,而我们现在根本不知道接受的字符串是什么编码,如果这个时候能得到接收字符是什么编码就好了。
对于这样的问题,一般会有两种解决方案。
方案一:
要客户端提交数据时,指定所提交的编码,这时就需要多给一个用来指定编码的变量。

&lt; ?php
$string = $_GET['charset'] === 'gbk' ? iconv('gbk','utf-8',$_GET['str']) : $_GET['str'];
?&gt;
对于这种情况,如果在没有约定或者我们不能控制客户端的情况下,似乎这种方案使用不是很好。
方案二
直接由服务器端来检测所接收的数据编码。
这种方案当然是最理想了的了,现在问题是怎么检测一个字符的编码吗?对于这种情况,在php里,mb_string这个扩展中的mb_check_encoding提供了我们所需要的功能。
$str = mb_check_encoding($_GET['str'],'gbk') ? iconv('gbk','utf-8',$_GET['str']) : $_GET['str'];
但这需要打开mb_string这个扩展,有些时候可能我们的生产服务器中没有打开这个扩展。对于这种情况,需要自己借助如下函数来判断编码。
以下函数非本人所写
function isGb2312($string) {
 for($i=0; $i 127) {
   if( ($v >= 228) && ($v < = 233) )
   {
    if( ($i+2) >= (strlen($string) - 1)) return true;
    $v1 = ord( $string[$i+1] );
    $v2 = ord( $string[$i+2] );
    if( ($v1 >= 128) && ($v1 < =191) && ($v2 >=128) && ($v2 < = 191) )
     return false;
    else
     return true;
   }
  }
 }
 return true;
}
function isUtf8($string) {
 return preg_match('%^(?:
 [\x09\x0A\x0D\x20-\x7E] # ASCII
 | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
 | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
 | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
 | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
 | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
 | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
 | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
 )*$%xs', $string);
}
这里我们就可以使以上任何一个函数来实现编码的检测。并将其转换成指定的编码。
$str = isGb2312($_GET['str'],'gbk') ? iconv('gbk','utf-8',$_GET['str']) : $_GET['str'];
更多的精彩请访问 http://www.jxuan.com/

17

做网赚要懂得seo技术,使用31款站长优化工具。你是否肯定你的网站完全兼容各大浏览器?是否知道多少秒可以打开你的网站?是否可以自信地说你的网站根本就没有打不开的时候?

虽然它看似不重要,但这些在一定程度上也对你的网站的访问量产生了影响(其它一部分影响浏览量的原因及解决办法 )。这里列出了一份 31 个我最喜爱的免费在线测试工具,你可以通过这些工具来测试你的网站,并根据结果对你的网站进行修改。

网站代码验证没人可以细致到保证自己的网站代码都是正确的,你可以通过以下测试来验证网站代码是否正确。

1 . WDG HTML Validator 一个很好的工具,能找出网站语法错误的地方,并标注出来,也可选择对网站上单独的每一页进行单页分析。(强烈推荐)

2 . W3C Markup Validation Service 对 HTML 和 XHTML 都能进行代码测试,自称是互联网络上第一个(也是使用者最多的)的 HTML 验证工具。

3 . W3C CSS Validation Service 用于验证 css 源代码,能够标注出不好的 css 代码设计。例如:“Same colors for color and background-color in two contexts”。

4 . RUWF XML Syntax Checker 用于查找 XML 文件的错误。

5 . W3C Feed Validation Service 用于查找 Atom 和 RSS feed 中的错误语法。( 这个我经常用到 )

6 . W3C Link Checker 用于搜寻查明你网站内的所有链接里是否有断链。(强烈推荐 )

7 . Juicy Studio Link Analyser 测试网站内的链接的 URL 是否存在死链,与 W3C Link Checker 很类似。

网站的使用性

我们常常看到网站设计者把重点放在怎网站的吸引力上,而完全不考虑会不会影响来访者的使用,一个浏览难度很大的网页是注定要失败,要让你的来访者方便的得到他要的信息(从而成为重复访客),你的网站应当遵循 WCAG section 508 易用性规则。

8 . Watchfire WebXACT 所有严谨的设计师和开发者都必须使用的工具,它会生成一个非常详尽的报告书,包括:网站质量,易用性和隐私等。(强烈推荐)

9 . ATRC Web Accessibility Checker 测试网站的 WCAG 2.0 Level2 兼容性,它会生成一份报告,提出一系列建议,如:如何提升页头,链接,数据,图表和文字的访问速度。

10 . WAVE 3.0 Web Accessibility Tool 高度可定制的工具,它采用了图形化模型展示网站兼容性问题( WCAG 1.0 and section 508 )。( 强烈推荐 )

11 . TAW Web Accessibility Test 测试网页是否存在冲突( WCAG 1.0 兼容性 ),通过图形模式生成一份依据 wcag 优先模式为基础的网站修改建议。

12 . HiSoftware CynthiaSays portal 采用了非常严格的规则来测试网页(根据 section 508 和 WCAG 1.0 规则),生成的报告也极为详细(详细到很难看懂 )。

13 . HERA Accessibility testing with Style 使用一种极为复杂但容易理解方式指出网页的 wcag1.0 兼容性问题。

14 . Juicy Studio CSS Analyser 进行了色彩对比测试,以确保你的网站的色调会符合 WCAG 1.0 的要求。

15 . Juiciy Studio Readability Test 分析你网站上的文字是否有语法错误或拼写错误等问题,容易让人理解不(根据 the Flesch Reading Ease 和 Flesch-Kincaid grade level algorithms 规则 )。( 适合英文网站使用 )

网站的速度

打开你的网站的速度快慢,是来访者会不会再次访问网站的关键因素,在一般情况下,一个网络不是很快的来访者是不愿意访问一个充满着图片、flash 动画、多媒体文件的网站。为了使你的网站覆盖人群的范围最大化,你必须优化你的网站,使它的打开速度尽可能的快。

16 . Web Page Analyzer from Website Optimization 一个很好的工具,它在分析完一个网页后,会为减少加载时间提出优化建议,着重优化物体的数目,图片和网站的总体大小。(强烈推荐)

17 . WebSitePulse Test Tools 有一系列的工具来确定网站的加载速度和主机信息。

18 . Internet Supervision Url Check 从世界各地不同的服务器来测试你的网站的加载时间,用于确定是不是各地的来访者都能顺利快速的打开你得网站。

浏览器模拟工具

这是一个普遍的问题,因为现在有着很多的操作系统和浏览器,你得网站必须得兼容它们,但这绝不是一件容易的事。通过下列工具,你可以了解你得网站在各种浏览器上的显示效果。

19 . Browsershots 能给出你的网站在不同浏览器下显示效果的截图,包括:Firefox 和 Internet Explorer ( Windows )、Firefox 和 Safari ( Mac OS X )、Iceweasal 和 Konqueror ( Linux ),但是结果要在 1 – 3 小时后才能出来。

20 . IE NetRenderer 实时生成你的网站在 Internet Explorer 5.5 、6.0 和 7.0 下的截图。

21 . MobiReady Report 分析使用手机访问网页的兼容性问题,会生成一份详细的报告,并提供了在两种不同类型的手机浏览器上你得网站可能显示的样子。
搜索引擎优化 (SEO)
一个网站,如果对搜索引擎有着比较好的友好度,一定会比较有竞争力。

22 . UrlTrends 会显示网站的访客是如何通过搜索引擎来到你的网站,还有各个流量是多少。这些数据是包括 Google, Yahoo, MSN, Alexa, AlltheWeb, Altavista 和其他一些网站。(强烈推荐 )

23 . iWEBTOOL Backlink Checker 一个很好的工具,它能找出有什么站点链接到你的站点,那些站点是什么类型的站点。

24 . iWEBTOOL Multi-Rank Checker 显示你网站的 Alexa 和 Google PageRank 数值。

25 . Microsoft adCenter Labs: Advertising and Keyword Research Tools 一个极好的工具,用于分析和预测你网站的来访者和市场。(强烈推荐)

26 . Domain Tools Whois lookup 一个 WHOIS 网络工具。

27 . SEO-Browser 可以让你看到在搜索引擎眼里一样的网站(去掉所有的”美丽”配件)。

28 . SEO Workers SEO Analysis Tool 非常有用的工具,分析了网站上的各种分类特征,包括 meta 标签、关键字密度及加载时间。( 强烈推荐 )

29 . Seekport Seekbot 可以分析网站的数据和内容,以得出搜索引擎会如何有效的解释分析的网站。

30 . SEO Chat SEO Tools 用以分析网站 Google adsense 盈利潜力,关键字密度,Meta tag 等等……

31 . Marketleap Search Engine Marketing Tools 用来分析网页,让你知道你的网站检索、设定的关键字好不好。

更多的精彩请访问 http://www.jxuan.com/

14

SEO基本知识
本文主要写给对SEO基本没有概念的同学。因为知识需要整理和改进,所以,根据新手的疑问,本文会增加新内容。
1、我怎么知道网站是否被搜索引擎收录了?

通过在百度或Google直接输入Site指令,如查精选seo的收录情况,输入:site:jxuan.com
其他:site:jxuan.com(不带www的)查的是包含所有二级域名的收录情况,如果带www,如site:www.jxuan.com,查的只是www.jxuan.com这个域名下的收录情况,不包括

photo.jxuan.com。如果发现site:www.jxuan.com收录量比site:jxuan.com还多,那是搜索引擎的问题,一段时间后正常。

2、我怎么知道我网站在搜索引擎上的排名?

选择你应该知道你网站的关键词,比如:我的网站http://www.jxuan.com/关键词是 精选SEO,那么直接在搜索引擎输入SEO,然后一页一页去查找到你的网站。
有一个工具可以方便查看:http://www.jxuan.com/edu/thread-62-1-1.html

3、我如何知道一个关键词在百度的搜索量?

可以通过百度指数查询:index.baidu.com

4、我的网站排名怎么总是上不去?

网站排名需要经过系统的SEO优化,才能有排名。同时,并不是任何一个网站都能有很好的排名。
这里要考虑到,网站的优化情况、时间、规模、关键词热度、竞争对手情况等等。
一个网站一定要进行适当优化才能有好的排名,但并不是意味着,进行优化了就一定会排名第一。排名,是一个互相竞争的过程,对方做得比你好,他就会被排在你前面。你做得

比他好,你就会排名在他前面。那么如何做得好呢?一方面从用户角度,你要让你的网站比对方好;另一方面,你要系统阅读和学习本教程,懂得如何更好的表达你自己,让搜索

引擎更好理解你的网站,从而把你排得更好。SEO,从某个意义上可以说是对搜索引擎的性情进行研究,然后投其所好。

5、你觉得搜索引擎排名最重要的是什么?

在排名因素里,重要性分别是:标题出现关键词、内容里关键词密度、站内和站外锚文本。
当竞争性比较强时,还需要更多的知识,这些知识在咱们教程里一一进行了阐述。你现在可以马上获得学习,然后做一些其他人还不知道,或没有做好的工作。

6、如何查询外链呢?

查询外链,我们建议用站长工具来查询,如输入link:http://tool.chinaz.com/Seos/Links.aspx是查精选seo的外链。注意加Http。
在百度和Google上输入link,往往不准确或没有。

7、网站的域名是否在对网站的排名有影响?比如:.org是不是比.com的好?

是的,在刚开始一段时间,.gov 是政府组织、.edu是学校、.org是组织机构,这些在排名上会有一定优势。
至于.com,.cn,.com.cn 等,则影响不大。如果你要做比较好的网站,尽可能注册.com的。因为这符合大家使用网站习惯。

8、网站什么时候提交给搜索引擎比较好呢?

我们建议你把网站结构固定后就提交给搜索引擎,如果你用开源程序搭建的网站,则你分一两个分类,发两三篇文章后就可以提交给搜索引擎。
接着,你要陆续的发布内容,做好锚文本。

9、你觉得网站URL地址静态化和动态,有什么利弊?
动态的URL,一般我们说是带有问号的URL,技术上讲做带参数的URL。
在收录上,动态和静态的URL,现在已经影响不到。但我们认为,在排名上,静态的URL是有优势的。
特别是Google英文,URL里包含关键词则是非常重要的。一些程序如wordpress能很好实现URL静态化和URL自定义。
绝大部分开源的程序都有静态化生成和伪静态功能。
但各类独自开发的企业网站,要URL静态化,需要网站程序那边技术支持,开发一个静态化代码,生成静态化页面或伪静态。

10、你觉得,如果让你从头做一个网站,你会如何做起,怎么做?
首先,你要想好,你要做什么。这个是最难的,但其实也是最简单的。正如,你要找什么工作这个问题,如果你一片迷茫,你感觉好难,但如果你自己兴趣和特长很明确,则这是

最简单的问题。根据你自己的能力和爱好来选择一个主题。比如:我选择,铝合金门销售,我对这个的销售比较了解些,我只是需要更多客户的电话而已。

第二步:通过了解几个开源的程序来确定自己要用哪一个程序来做网站。或者,请其他人帮你开发。

第三步:确定目标关键词。通过百度指数和百度相关搜索等来一一列出关键词和搜索量。因为铝合金门窗这个是属于低流量,高目的性,高利润的词。有一个电话来,往往就是目

标客户,而且很多时间是专卖店来的电话,发展一家就会做长期的生意。所以,流量已经不是最重要,你对这行比较了解,你要知道,这个词是否有人搜索。我会选择,深圳铝合

金门窗。

第四步:首页就选择纵横网法律门户网站作为目标关键词,标题写法:纵横网法律知识频道-免费法律咨询,电话:02783640140
关键词标签:法律咨询    描述标签:免费法律咨询,法律服务。我们追求最快的法律解答途径,让每个有法律需求的用户提供最佳的法律途径,解答法律咨询,我们一定为你提

供最好的法律咨询服务。联系电话:02783640140

第五步:刚开始,一定不要一下子发很多产品,而是一次发2-3个,每天发一些。刚开始不用考虑用户,因为你的网站刚开始是没有用户的。即使有个别,让他们看到差一些的网站

也没事。刚开始内容少,接着陆续多起来,这个过程是非常受搜索引擎喜欢的。
发产品时,看看产品名称是有可用的长尾关键词。通过在百度搜索,然后看百度相关搜索获得。
认真发表每个产品,给每个产品认真的介绍,并适当的添加类似:你或许还喜欢这些产品的,产品1,产品2的引导性语言。这样起到产品间的互连。
我会给每个产品做最佳的图片,因为这样能够远远优于竞争对手,同时让客户信任我们。
更多的精彩请访问 http://www.jxuan.com/

12

最近的一个项目,里面有一个比较大的表单,用户完成它需要很多时间,很多用户花了千辛万苦完成之后,一提交发现SESSION过期,系统退出了,所以引起了研究如何设置SESSION以及保持SESSION在线的需要,下面是一些心得体会。

什么是SESSION?

按照WIKI的解释,SESSION是存在于两个通信设备间的交互信息,在某一时间建立,经过一定的时间后失效。常见的SESSION有:TCP SESSION、WEB SESSION(HTTP SESSION)、LOGIN SESSION等。
根 据OSI模型中,会话实现的位置不同,SESSION主要分为几种,一种是应用层会话,包括WEB SESSION(HTTP SESSION)和telnet远程登录session;会话层实现的,包括Session Initiation Protocol(SIP)和Internet Phone Call;在传输层实现的有TCP SESSION。
本文主要讨论WEB SESSION,其一般有两种:客户端SESSION和服务器端SESSION,后一种最常见的属于Java Beans提供的。

SESSION是做什么的?

在计算机领域,特别是网络方面,SESSION使用的特别广泛,也可以称为是对话(Dialogue)、会话等,一般是指在两个通信设备间存储的状态,有时也发生在用户和计算机之间(Login SESSION)。
区别于无状态的通信,SESSION通常用来存储通信状态,因此通信的双方至少有一方需要存储SESSION的历史记录,从而实现两者间的通信。

SESSION(WEB SESSION)是怎么实现的?

浏览器和服务器之间进行HTTP通信时,通常会包含一个 HTTP Cookie 来标识状态,通常会有一个唯一的 SESSIONID ,SESSION通常记录着用户的一些验证信息和级别。
在 几中编程语言中最常用的Http Session Token是,JSESSIONID(JSP),PHPSESSID(PHP),ASPSESSIONID(ASP),这个标识通常由哈希函数产生,能够 唯一表示这个用户的身份,在服务器和客户端通信时,作为GET或者POST的参数存储在客户端。
SESSION的实现方式通常有两种,服务器端SESSION和客户端SESSION,两种方式各有优缺点。

服 务器端SESSION实现容易并且效率比较高,但是遇到负载均衡或者高可用性需求的时候,处理起来就比较困难,对于那种内生系统不存在存储设备的时候,也 是不可用的。负载均衡可以通过共享文件系统或者强制客户只能登录到一台服务器上来实现,但是这样会降低效率。对于没有存储的设备,也可以通过使用 RAM(参考参考资料6)来解决服务器端SESSION的实现,这种方法这对哪些客户端链接有限的系统有效(诸如路由或者接入点设备)。
客户 端SESSION的使用可以解决服务器端SESSION的一些问题,比如避免了负载均衡的算法等,但是同时也会产生一些自身的问题。客户端SESSION 使用Cookie和加密技术来在不同的请求间保存状态。在每一个动态页面结束后,会统计当前的SESSION,并把它发回客户端。每次成功请求后,会把 cookie再发送到服务器端,来让服务器“记起”这个用户的身份。客户端SESSION最重要的问题就是安全问题,一旦cookie被劫持或者篡改了, 用户的信息的安全性就丧失了。

PHP中如何设置SESSION?

搭建好PHP的开发环境后,通过phpinfo()可以查看到与SESSION有关的部分包括:
SESSION模块,在PHP V5.2.9版本中,一共有25个变量。其中,平时设置中常会用到的几个有:
session.cookie_lifetime 设置存储SESSIONID的cookie过期时间
session.name SESSION的COOKIE名称,默认为PHPSESSID
session.save_handler SESSION的存储方式,默认为FILE
session.save_path Fedora下面默认存储在/var/lib/php/session

session.gc_probability
session.gc_divisor
session.gc_maxlifetime 这三个选项用来处理GC机制发生的机率

session.cache_limiter (nocache,private,private_no_expire,public)
session.cache_expire 这两个选项是用来缓存SESSION的页面

先 来考虑第一个问题,SESSION多久会过期,他是如何过期的?如果要在PHP程序中使用SESSION,一定要先引用session_start(), 这个函数一执行,就会在SESSION的存储目录(如果使用了file handler)生成一个SESSION文件,里面内容是空的,同时浏览器会见里一个name为PHPSESSID的cookie,里面存储着一个 hash出来的SESSION的名字。
SESSION的过期依赖于一个垃圾回收机制(Garbage Collection),SESSION创建后作为一个文件存放在服务器上,客户端脚本每访问一次SESSION中的变量,SESSION文件的访问时间 就会进行更新。每次访问都是根据客户端存储的SESSIONID去请求服务器中存储的唯一的SESSION,当客户端的cookie过期后,就无法知道要 访问的是哪一个SESSION,尽管此时服务器上的SESSION文件还没有被过期收回,这样就会造成服务器资源的浪费。
但是同时,如果我们 希望用户的session马上过期的话,我们就可以通过设置cookie的办法来实现。SESSION的回收是在每次访问页面的时候进行的,回收的机率由 session.gc_probability,session_gc_divisor指定,默认士1/100。如果设置为1,则每次超过了 SESSION的生存周期去访问的话,SESSION一定会被回收。

两种需求:1、保持SESSION不过期或延长SESSION过期时间;2、使SESSION立即过期。
1、 保持SESSION不过期和延长SESSION过期时间非常必要,特别是在内部应用系统中或者有很大的表单的时候。想想你的老板在填写一个表单,刚好碰上 午饭时间,留着这个表单等吃饭回来,填写完剩余的内容,提交后他看到什么,一般来说都是一个登录界面。想要提高用户体验,关键是要让老板的表单不出问题, 我们就必须延长SESSION的生存周期。
保持SESSION不过期和延长SESSION过期时间,可以通过设置 session.gc_maxlifetime来实现,不过首先需要保证客户端的cookie不会在gc执行回收之前失效。通过设置一个较长的 gc_maxlifetime可以实现延长session的生存周期,可是对于不是所有请求都会保持很久的应用来说,这么做对于服务器配置显然不是一个最 佳的选择。
我们知道SESSION的回收机制是根据SESSION文件的最后访问时间来判断的,如果超过了maxlifetime,则根据回收机率进行回收。所以我们只需要定期的去访问一下SESSION就可以了,而这可以通过刷新页面来实现,根据这个思路,解决的方法就有了。
通过JS定期的去访问页面;利用Iframe定期的刷新页面;
直接利用程序发送HTTP请求,这样就可以避免在页面中嵌入其他的元素;

下面是利用JS发送请求实现的保持SESSION不过期的实现方法,这样我们就只需要在需要SESSION保持长时间的页面(比如大表单页面)。
<script type=”text/javascript”>
function keepMeAlive(imgName){
myImg = document.getElementById(imgName);
if(myImg) myImg.src = myImg.src.replace(/\?.*$/, ‘?’ + Math.random());
}

window.setInterval(“keepMeAlive(‘phpImg’);”, 4000);
</script>
<img id=”phpImg” src=”http://www.phpplot.com/phpplot/session/sess_refresh.php?” width=”1″ height=”1″ />
其中URL后加入一个随机数是为了避免这个链接的请求被浏览器缓存。

2、使SESSION立即过期的方法就比较多了,我们可以session_destroy(),也可以用上面的思路,请求一个session_destroy的页面。

SESSION安全吗?

PHP的手册中明确写出:SESSION并不能保证储存在SESSION中的信息一定只能被他的创建者所看到。
如 果想要安全的处理一些远程的操作,那么HTTPS是唯一的选择。最基本的,不要认为一个用户信息在SESSION中存在就认为这个用户一定就是他本人,虽 然SESSION中的信息会给你他已经经过了用户名和密码验证的假象。所以,如果需要做一些修改密码或者类似的事情的时候,让用户重新输入密码是一个比较 好的选择。
早期的Apache版本并没有采用COOKIE的方式来存储PHPSESSID,而是采用的URL-rewrite,也就是每个 URL后面都会加上PHPSESSID=<sessionid>来表明它属于那个激活的SESSION,新版的Apache已经将这个属性设 置为默认关闭。
session.use_trans_id = 0;

所以从这个意义上来讲,延长SESSION的时间过长 或者保持SESSION一直在线对于安全来说始终不是一件好事情。终极的解决办法就是用户提交跳转到登录窗口,登录后又能够回到填写页面,并且所有的数据 都还在。这个的实现方式现在用Ajax来解决应该没什么困难,每隔一定时间就把当前的用户数据POST到一个存储位置,不管是XML或者JSON。

拾遗:

对于客户端不支持JavaScript的情况可以采用的方法:
1、写一个浮层,显示在最顶层,如果用户未禁用JS,则让浮层消失;
2、将所有的INPUT都设置为disable,然后再用JS设置为enabled;
以上这两种方式都是在JS被禁用的时候,所有功能都不能用,如何在JS被禁用的情况下使我们的应用仍然正常工作,这个貌似就比较困难。实现这个的所花的时间和所收到的效果大家要权衡一下。

05

每天都要接触google、百度等搜索引擎,使用的搜索指令也局限在那么少数几个,如sitelink等;其实对于google来说,有些特殊的搜索指令的作用是非常大的,尤其对于研究SEO的朋友,如 In-系列搜索指令:通过intitle/inurl/intext三个搜索指令定义关键词的位置。     其中,学会使用inurl是最重要的一个搜索技巧。 In-系列搜索指令是Google搜索中最重要的位置关键词查找方式,通过intitle/inurl/intext三个搜索指令定义关键词的位置,分别查找在标题、链接、正文包含搜索关键词的网页结果。不过,这三个搜索指令因为字数较长、而且容易混淆,在实际搜索中往往被普通用户所漠视,事实上,对于目标明确的搜索者来说,In-系列搜索指令往往最为简洁,能够大幅简化搜索结果,提高搜索精确度。 inurlIn-系指令中最强大的一个,换句话说,这个高级指令能够直接从网站的URL入手挖掘信息,只要略微了解普通网站的URL格式,就可以极具针对性地找到你所需要的资源——甚至隐藏内容。     用在seo上,inurl起的作用就大多了。     比如,我们大家都知道gov域名的权重都比较高,如果自己的网站能从gov网站弄一些链接的话,对于自身的网站排名是有不小的提高的。     比如,在google中输入 inurl:gov.cn/forum/*register 你就会发现很多gov网站可以添加链接,其他类似的就看你的发现了,不过链接有一个度的问题,过尤不及,链接最好是相关的网站,不然,过多的差质量的网站的链接对于优化的网站来说未必就是一种运气。祸兮福之所倚,福兮祸之所伏。     其他的类似的,大家可以发挥想象,比如:
inurl:gov.cn/forum/*reg
inurl:gov.cn/bbs/*register
inurl:gov.cn/bbs/*reg
inurl:gov.cn/*register
inurl:gov.cn/*reg
inurl:edu.cn/*reg
……

这样的手法其实也不是才有,很多人已经在大肆地使用了,通过上述指令搜索出来的网站,你进入一看就知道已经很多的a,很多的url了。这里有一个风险,这样大量被蹂躏的gov网站导出了大量了垃圾链接,将来某一天,搜索引擎未必不会采取措施来排除这些垃圾链接。祝大家好运。

24

在一个段落里面,如何做到只替换存在的第一个字段
我的思路:
1,找到这篇文章是否有我想要替换的内容
2,如果有就调用这个函数 _replace_first
3,找到之后把这里替换成我要的修改的东西

举例:
$string = “精选SEO,提供专业的网站优化服务,网站内容的布局,框架的合理搭建。更多网站优化技术的完善。展示我个人网站优化的实战经验,php编程技术的完善,js技术的个人拓展,精选SEO,网站优化,网络营销。”

在这里我把第一次出现”SEO”和第一次出现”优化”的地方都加一个链接
php代码在下面实现:
要替换的词 $keyword
$keyword = array(
[0] => “SEO”
[1] => “优化”
)

调用 _replace_first函数去替换:
foreach ($keyword as $key=>$value){
一个函数里面:$string = $this->_replace_first($value,’‘.$value.’‘,$string);
}
private function _replace_first($seach,$replace,$string) {
$array = explode($seach,$string);
if(isset ($array[1])) {
$array[0] = $array[0].$replace;
$array[0] = $array[0].$array[1];
unset $array[1];
}
return implode($replace,$array);
}

09

具体操作办法(仅适用于 apache网络服务器):
文件位置:apache->conf->httpd.conf
请在 httpd.conf中使用 Alias指令:
Alias /newurl /www/htdocs/oldurl
如:用户访问新的地址 example.com/newurl/id34.html 服务器将提供的内容原地址是
example.com/www/htdocs/oldurl/id34.html。

注意:Alias只会改变本地 URL,如 www.jxuan.com/archives/153 的/archives/153部分,
而无法改变 URL的主机名称部分(如:http://www.jxuan.com/部分)。若要更改 URL的主
机名称部分,请使用Redirect或 RewriteRule指令。
菜鸟指南:本功能的Alias指令在 httpd.conf中是这一句: #Alias /webpath /full/filesystem/path
去掉前面的,并做下相应的修改即可。
SEO过程中一般在这些情况下需要用到该功能:
1、当文件移动或文件目录名称发现改变,出于SEO需要,你需要保持旧的 URL;
2、网站改版了,网站导航和链接发生变化,为了继续持有原链接带来的流量,你需要保持旧的 URL;
3、你希望不同的人用不同 URL来链接同一个的内容。(SEO一般不建议这样做)
等等。。

09

Memcache基础环境
其实基于PHP扩展的Memcache客户端实际上早已经实现,而且非常稳定。先解释一些名词,Memcache是danga.com的一个开源项目,可以类比于MySQL这样的服务,而PHP扩展的Memcache实际上是连接Memcache的方式。

首先,进行Memcache被安装具体可查看:
Linux下的Memcache安装:http://www.ccvita.com/257.html
Windows下的Memcache安装:http://www.ccvita.com/258.html;
其次,进行PHP扩展的安装,官方地址是http://pecl.php.net/package/memcache
最后,启动Memcache服务,比如这样
/usr/local/bin/memcached -d -p 11213 -u root -m 10 -c 1024 -t 8 -P /tmp/memcached.pid
/usr/local/bin/memcached -d -p 11214 -u root -m 10 -c 1024 -t 8 -P /tmp/memcached.pid
/usr/local/bin/memcached -d -p 11215 -u root -m 10 -c 1024 -t 8 -P /tmp/memcached.pid

启动三个只使用10M内存以方便测试。
分布式部署
PHP的PECL扩展中的memcache实际上在2.0.0的版本中就已经实现多服务器支持,现在都已经2.2.5了。请看如下代码
$memcache = new Memcache;
$memcache->addServer(‘localhost’, 11213);
$memcache->addServer(‘localhost’, 11214);
$memcache->addServer(‘localhost’, 11215);
$memStats = $memcache->getExtendedStats();
print_r($memStats);

通过上例就已经实现Memcache的分布式部署,是不是非常简单。

分布式系统的良性运行
在Memcache的实际使用中,遇到的最严重的问题,就是在增减服务器的时候,会导致大范围的缓存丢失,从而可能会引导数据库的性能瓶颈,为了避免出现这种情况,请先看Consistent hashing算法,中文的介绍可以参考这里,通过存取时选定服务器算法的改变,来实现。
修改PHP的Memcache扩展memcache.c的源代码中的
“memcache.hash_strategy” = standard为
“memcache.hash_strategy” = consistent
重新编译,这时候就是使用Consistent hashing算法来寻找服务器存取数据了。
有效测试数据表明,使用Consistent hashing可以极大的改善增删Memcache时缓存大范围丢失的情况。
NonConsistentHash: 92% of lookups changed after adding a target to the existing 10
NonConsistentHash: 90% of lookups changed after removing 1 of 10 targets
ConsistentHash: 6% of lookups changed after adding a target to the existing 10
ConsistentHash: 9% of lookups changed after removing 1 of 10 targets