天生我才必有用

使用PHP读取Excel文件

Posted in PHP    作者:Ray    2009年十一月20日

可能这应该算得上一个很古老的问题,解决的也有多种多样,不过Internet上比较多的是Excel的保存的范例,所以写一篇如何读取Excel,可能对大家有所帮助。

  1. 使用COM接口调用,把Excel应用程序作为一个Server,PHP间接使用Excel来读取文件。
  2. 使用PHPExcel的程序包。它的优点不单单读取资料而且可以保存资料为Excel文件,同时还支持Excel 2007的格式。方法就是把Excel看作一个普通的Excel文件读取。
  3. 还有一种是PHP Excel Reader,它把Excel文件看作一个二进制文件读取,不过不支持新版本Excel文件。

方法2可能看起来不错,不过当你在读取资料大比较大的文件时,会有一个致命的缺点:内存溢出。因为它必须把整个Excel读入内存。有点像XML的DOM接口,不清楚是否有类型XML的SAX的方法。

方法3有类似方法2内存溢出的问题,同时对新版的支持较差。

方法1应该是属于非常传统的方式,只有支持COM程序接口就可。同时只有你能用当前安装的Excel打开此文件,你就可以通过COM接口读取文件。缺点就是你必须在你的电脑上安装Excel。不过对于大文件现在只能使用这个方法。

$doc = "test.xls" ;
$excel_app = new COM("Excel.Application", NULL, CP_UTF8) or die ("Please install the Excel. \n");

#$excel_app->Visible = 1;

$workbook = $excel_app->Workbooks->Open($doc) or die("Can't open ".$doc);
$worksheet = $workbook->WorkSheets(1);
$worksheet->activate;

$min_row    = $worksheet->UsedRange->Row;
$min_col    = $worksheet->UsedRange->Column;
$max_row    = $worksheet->UsedRange->Rows->Count;
$max_col    = $worksheet->UsedRange->Columns->Count;

for ($row = $min_row ; $row < $max_row; $row ++){
    for ($column = $min_col ; $column <= $max_col; $column ++){
       $value = $worksheet->Cells($row, $column)->value;
       echo $value."\n";
    }
}
$excel_app->Workbooks->Close();
$excel_app->Quit();
标签: , , ,

Zend Framework 1.9发布

Posted in PHP,技术    作者:Ray    2009年八月10日

感觉现在Zend Framework 更新了很快,可能和日益受到关注有关。不知不觉中已经发布到了1.9版本。

更新的内容可以查看:http://devzone.zend.com/article/4906-Zend-Framework-1.9.0-Released

我对Zend_Test_PHPUnit_Db和Zend_Queue比较感兴趣,特别是Zend_Queue的支持,特别是加入了对MemcacheQ的原生支持。

有空学习一下这些新内容,感觉Zend Framework在逐渐缩短和RoR之间的差距。在新版本发布之际,更新一下Zend Framework的帮助chm.

标签: ,

Zend Framework command line console tools

Posted in PHP    作者:Ray    2009年七月21日

Zend Framework Command Line Console Tool v1.8.4

Usage:

zf [--global-opts] action-name [--action-opts] provider-name [--provider-opts] [provider parameters ...]

Providers and their actions:

  • Version

zf show version mode[=mini] name-included[=1]
查看当前Zend Framework的版本信息。你可以使用zf show version ? 获得更多的帮助信息。

  • Phpinfo

zf show phpinfo
查看PHP配置信息。

  • Manifest

zf show manifest
查看项目的Manifest

  • Profile

zf show profile
查看项目的Profile

  • Project

zf create project path
创建新的项目

  • View

zf create view controller-name action-name-or-simple-name
创建View

  • Controller

zf create controller name index-action-included[=1] module
创建Controller

  • Action

zf create action name controller-name[=index] view-included[=1] module

  • Module

zf create module name

  • ProjectProvider

zf create project-provider name actions

Drupal 常用模块

Posted in PHP,网站设计    作者:Ray    2009年五月17日

1. 内容编辑

1.1 BUEditor (http://drupal.org/project/bueditor

bueditor1

1.2 Textile (http://drupal.org/project/textile)

使用自定义的标签来转换成Html文本

1.3 Wysiwyg API (http://drupal.org/project/wysiwyg)

一款所见即所得(WYSIWYG)编辑器。

1.4 FCKeditor (http://drupal.org/project/fckeditor)

另一款所见即所得的编辑器,同时也是较早被Drupal支持,所以维护和支持都不错。

标签:

使用PHP来动态生成CSS/JS

Posted in Javascript,PHP    作者:Ray    2009年三月6日

对于一个网站其实很多时候都需要对动态的生成所使用的CSS/JS,其中主要是CSS/JS中所包含的一些URL,当然这些URL信息也可以使用相对路径来实现,但在一些情况下使用相对路径并不能解决这个难题。

按照Yahoo YSlow(http://developer.yahoo.com/yslow/help)的建议1,就是必须减少HTTP的请求,当然手动把所有代码合并是一种方法,但这种方法反而会带来两个更糟的问题,把所有CSS/JS都合并到一个文件中,当然不利于代码的阅读和管理。如果使用jQuery,因为不同的Plugin都是会放在不同的js文件中,和Yahoo YSlow的建议有较大的冲突,当然是用动态语言来合并这些js文件应该是个不错的idea。合并过程中还可以使用jsmin.php来进行js文件的压缩。

如想使用这个技术可参考以下的几篇说明:

  1. Automatic merging and versioning of CSS/JS files with PHP
  2. Adding JSMin to my CSS/JS merging script (这篇写了一般,其实有更好的方法来做)
  3. GZip files with .htaccess and PHP (这篇是说明如何对输出的PHP内容进行GZip的压缩,因为动态文件无法使用Apache 的 GZIP的库来压缩,所以为了节省传递数据必须在PHP中把输出内容进行压缩)。
标签: , ,

PHP V5.3 中的新特性

Posted in PHP    作者:Ray    2009年一月20日

IBM DeveloperWork 网站里对PHP V5.3 新功能的介绍:

  1. 第 1 部分: 对象接口的变化
  2. 第 2 部分: 闭包及 lambda 函数
  3. 第 3 部分: 名称空间
  4. 第 4 部分: 创建并使用 Phar 归档

其他内容等待IBM DeveloperWork更新。

标签:

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

Posted in PHP    作者:Ray    2008年十一月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代码

Posted in PHP    作者:Ray    2008年十月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编码规则

Posted in PHP    作者:Ray    2008年十月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编码的标准。

标签: ,

Zend Studio 6.1.0 发布

Posted in PHP    作者:Ray    2008年九月17日

随着Zend Framework 1.6版本的发布,Zend Studio 也到了6.1.0的版本,用以支持最新的Framework。不过一直未明白为何Zend Framework中整合的是Dojo,现在感觉已经是jQuery一枝独秀,所以希望Zend Framework也能尽快加入对JQuery的支持。

此版本做了以下的修改:

  • Zend Framework 1.6 and Dojo projects
  • Full Dojo editing support
  • Zend Controller Test Case Wizard
  • Zend Action Helper Wizard
  • JavaScript Build Path Configuration
  • Advanced JavaScript Editing Features等等
更多信息可以查看官方说明 ,试用版下载地址
标签: