天生我才必有用

为PHP脚本添加utf-8编码支持

分类: PHP    作者:Ray    2008年11月7日

方法1:

修改.htacces文件或者httpd.conf,添加一行AddCharset UTF-8 .php

方法2:

使用header函数,添加如下代码:header(”Content-Type: text/html; charset=utf-8″);

方法3:

使用HTML的meta标签:添加如下代码: <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>

标签: ,

搜索机器人的PHP代码

分类: PHP    作者:Ray    2008年10月21日
/**
* 判断是否为搜索引擎蜘蛛
*
* @access  public
* @return  string
*/
function is_spider($record = true)
{
    static $spider = NULL;
    if ($spider !== NULL)
    {
        return $spider;

    }
    if (empty($_SERVER['HTTP_USER_AGENT']))
    {
        $spider = '';
        return '';
    }

    $searchengine_bot = array(
        'googlebot',
        'mediapartners-google',
        'baiduspider+',
        'msnbot',
        'yodaobot',
        'yahoo! slurp;',
        'yahoo! slurp china;',
        'iaskspider',
        'sogou web spider',
        'sogou push spider',
        'feedfetcher-google',
        'yahoofeedseeker'
    );

    $searchengine_name = array(
        'GOOGLE',
        'GOOGLE ADSENSE',
        'BAIDU',
        'MSN',
        'YODAO',
        'YAHOO',
        'Yahoo China',
        'IASK',
        'SOGOU',
        'SOGOU',
        'Feedfetcher-Google',
        'YahooFeedSeeker'
    );

    $spider = strtolower($_SERVER['HTTP_USER_AGENT']);
    foreach ( $searchengine_bot AS $key => $value)
    {
        if (strpos($spider, $value) !== false)
        {
            $spider = $searchengine_name[$key];
            if ($record === true)
            {
            // do something
            }
            return $spider;
        }
    }
    $spider = '';
    return '';
}
标签: , ,

UTF8编码规则

分类: PHP    作者:Ray    2008年10月7日

utf-8为变长编码, 编码规则如下:

Binary Hexadecimal Decimal Width
00000000-01111111 00-7F 0-127 1 byte
11000010-11011111 C2-DF 194-223 2 bytes
11100000-11101111 E0-EF 224-239 3 bytes
11110000-11110100 F0-F4 240-244 4 bytes

PHP中有以下的函数在操作utf-8字符串时会不安全,具体参考此链接:http://www.phpwact.org/php/i18n/utf-8http://www.phpwact.org/php/i18n/charsets
不过所以的问题在PHP6中将都会成为过去,PHP6中会原生的支持utf-8字符集,不过感觉慢了点。觉得.Net和Java早已解决了这类问题,毕竟为了支持多国语言,UTF-8必将成为Web编码的标准。

标签: ,

PHP5.3中新增的常量__DIR__

分类: PHP    作者:Ray    2008年07月22日

在PHP中有一个常量__FILE__,它主要用来指向当前执行的PHP脚本。但PHP没有直接提供该脚本所在目录的常量。也就是说如果我们要得到当前PHP脚本所在的目录,需要使用dirname()这个函数:

<?php
$dir = dirname(__FILE__);
?>

现在在PHP5.3中会增加了一个新的常量__DIR__,你可以通过此常量来取得当前执行的PHP脚本所在的目录。
例如当前执行的PHP文件为 /htdocs/index.php,则__FILE__等于’/htdocs/index.php’,而__DIR__等于’/htdocs’。

不过最大的缺点还是现在有多少空间服务商支持PHP5.3呢?

标签:

设置PHP的Magic Quotes

分类: PHP, 随笔    作者:Ray    2008年07月17日

Magic Quotes在原来设计时可能是为了减轻开发人员的开发工作量,不过最后去反而成为了开发人员的一个噩梦,在不同的PHP环境下,由于Magic Quotes设置的不同,造成了相同的代码却产生了完全不同的结果。明明在开发环境中运行正常,但在最终的运行环境中,内容会莫名其妙的多出一些单引号。最终使得PHP设计师们也不得不在PHP6中把此些设定值取消,把最终的控制权重新还给开发人员。

但现在毕竟还是PHP5的时间,还有很多的服务器依然还在运行着PHP4,等待PHP6的完全商业看来还是有一段时间的。那如何让我们来避免这次噩梦呢?

方法1:

如果你使用的是Dedicated Server,那可以修改系统etc下面的php.ini,不过这种方法使用几率应该不大,使用phpinfo()可以查看修改的效果。

方法2:

修改你的Virtual Host里etc/目录中的php.ini,一些比较成熟的服务商基本上可以这样修改,使用Local Value覆盖系统的Master Value,使用phpinfo()可以查看修改的效果。

方法3:

如果方法2都不行时,可以使用此方法,修改.htaccess,在.htaccess文件中设置php_flag magic_quotes_gpc off,这样也能把magic quotes 关闭。不过文件最好放在最上层的目录中,否则未覆盖到目录,可能设置无效,这种方法必须使用ini_get去查看实际修改结果。

标签: ,

Zend Framework中如何让View和Controller关联

分类: PHP    作者:Ray    2008年07月3日
$view = new Zend_View();
$view->setEncoding('utf-8');
$view->doctype('XHTML1_STRICT');
$view->headTitle('title');
$view->headScript()
->appendFile('/scripts/jquery/jquery-min.js')
->appendFile('/scripts/thickbox/thickbox.js');
$view->headStyle()->appendStyle('/styles/main.css')
->appendStyle('/styles/default.css')
->appendStyle('/styles/thickbox.css')
->appendStyle('/styles/ie6.css');
$view->addHelperPath('../application/default/views/helpers');
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);

Zend Framework的官方文档说明还是比较详尽的,不过关于如何整合MVC的例子还是少了些。以上的代码实现了Zend Framework中的View和Cotroller的关联。慢慢再介绍在View或者View Helper中如何获取Controller的实例。

标签: ,

Zend Studio for Eclipse 6.01

分类: PHP    作者:Ray    2008年06月17日

今天把我的Zend Studio 进行了升级,从原来的6.0版本升级到了6.01版。简单的从UI上看和原来版本没啥区别,想升级主要因为此版本集成了Zend Framework 1.52,这样自己就不用手动集成1.5版。其实那时也挺纳闷的,当6.0版发布时,Zend Framework 1.5也已经发布了,为何那是不一步到位,还得折腾我的硬盘。

具体更新功能如下:

  1. Updated Zend Framework support including Zend Framework 1.5.2
  2. Improved Code formatter
  3. Improved Debugger performance
  4. New GUI translations for German, French and Italian
  5. Improved Code folding
  6. Updated Added PHP extensions for PHP binary on Windows

新增功能6其实也非常诱人,如果Zend Studio中不支持扩展,真的挺难想象PHPUnit还能测试些啥。不过折腾了半天,我的PHPUnit测试还是报“You cannot serialize or unserialize PDO instances”,在命令行运行时完全正常。看来还是继续命令行测试吧。

如有兴趣下载测试,点击这个地址。http://downloads.zend.com/studio-eclipse/6.0.1/ZendStudioForEclipse-6_0_1.exe

标签: ,

如何让自己的网站支持更多格式的图片上传?

分类: PHP, 网站设计    作者:Ray    2008年06月11日

对于大多数网站的使用者来说,可能他们并不了解自己所使用的各类浏览器只能显示jpeg、gif和png文件。就算在Windows平台中最常用的bitmap(bmp)格式,以及扫描仪所使用的Tiff格式图片,都是不能被浏览器支持,浏览器并不能直接把以上的格式图片显示在网页中。

当然你也可以要求用户使用各类工具进行图片的转换后,然后再上传。不过相信在这些用户中必然会存在不少不妥协者,当然也必然包含一些菜鸟型用户。相信这种方法应该不是非常好的解决方案。我们当然应该为网友做更多,让他们可以简单的使用我们的网站。

现在就介绍一种非常方便、强大的工具,它不仅可以支持各类图片格式的转换,也能对图片进行相关的缩放。前提可能就是你网站的Web Host是Linux,同时它支持ImageMagick。(应该专业些的Web Host都会安装这个工具)。如果你的Web Host支持SSH,你只需使用SSH登入到系统中,在命令行运行一下convert命令即可。如果系统未给出任何出错信息,而给出了convert命令的相关帮助,那就说明你的系统支持ImageMagick。

以下介绍一下常用的命令:

  • 转换图片格式:

    convert image.tiff image.png

  • 对图片进行缩放:
  • convert -resize 400×300 src.png dst.png

    convert -resize 200×200^ src.png dst.png

更多命令行信息请参考:http://www.imagemagick.org/script/command-line-processing.php

在PHP中只需要简单的使用system()这个函数来调用以上的外部命令即可。同时也可结合GD库来实现图片的Watermark功能。

标签: ,

PHP实现trackback

分类: PHP    作者:Ray    2008年05月3日

Trackback是Blog中非常Cool的一个功能,通过它可以了解有多少站点引用了你的文章。如何使用PHP实现这样的功能?其实可以使用Pear库的Services_Trackback即可。

IBM Developerwork有相关介绍文章:使用 PHP 实现引用链接(trackback)

标签: , ,

Zend Framework 1.51 manual chm

分类: PHP    作者:Ray    2008年04月29日

今天在看Zend Framework 1.51 说明文件的时候,无意中发现所下载的文档包中还包含了制作chm的项目文件。既然这样为何不索性自己做一个chm文件,同时方便自己察看,还可以使用chm的检索功能。

自己对原始文件进行了一定的修正:

  • 补上了遗漏的note.png图片。(chm用的是IE引擎,缺图后页面会很难看的)
  • 参考framework官方网站说明的字体设定修改了chm中使用的字体。

为了方便其他网友的学习,索性把此chm文件一并上传一份。

有兴趣的可在此地址下载: zend_framework_manual_en.chm

标签: ,