浏览模式: 标准 | 列表
7月
01

在 IIS 7 上配置 PHP

6 月 27 日,微软发布了 Virtual Machine Additions for Vista Beta 2,我将其安装在 Virutal Server 2005 R2 SP1 Beta 1 上之后,终于可以玩 IIS 7 了。在安装这个版本的 VM Additions 之前,我的 Longhorn Server Beta 2 虚拟机一直用的是 for Windows 2003 的 VM Additions,那个速度别提有多慢了。装了这个版本以后,在给 Longhorn Server Beta 2 虚拟机分了 480M 内存的情况下,速度飞快,感觉棒极了!于是终于开始了 IIS 7 之旅。

作为一个 PHP 玩家,在有 IIS 7 可用之后,第一个想法自然是给 PHP 在 IIS 7 上安一个家。下面就是我的全部安装过程图解。

» 阅读全文

6月
08

用 PHP 实现下载

下面这段程序是我从我最近写的一个系统里摘出来的,可以实现重命名下载文件(包括中文名)。 function is_ie() { $useragent = strtolower($_SERVER['HTTP_USER_AGENT']); if ((strpos($useragent, 'opera') !== false) || (strpos($useragent, 'konqueror') !== false)) return false; if (strpos($useragent, 'msie ') !== false) return true; return false; } function download($attachment) { $realpath = ABSPATH . UPLOAD_DIR . '/' . $attachment['path'] . '/' . $attachment['savename']; $content_len = sprintf("%u", filesize($realpath)); if (is_ie()) { // leave $filename alone so it can be accessed via the hook below as expected. $filename = rawurlencode($attachment['filename']); } else { $filename = &$attachment['filename']; } while(ob_get_length() !== false) @ob_end_clean(); header('Pragma: public'); header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: pre-check=0, post-check=0, max-age=0'); header('Content-Transfer-Encoding: binary'); header('Content-Encoding: none'); header('Content-type: ' . $attachment['type']); header('Content-Disposition: attachment; filename="' . $filename . '"'); header("Content-length: $content_len"); echo file_get_contents($realpath); exit(); } 其中 $attachment 是附件相关信息的一个关联数组。ABSPATH 是系统路径,UPLOAD_DIR 是上传目录的路径(这里就是从上传目录取文件,然后提供给用户下载,而上传目录本身是没有读权限的,这样就可以保证用户无法直接下载到没有权限访问的文件了),这两个常量都是自己定义的,不是系统的。

» 阅读全文

JSON

JSON-RPC 采用 JSON 格式来序列化数据。JSON 是一种轻量级的数据交换格式。它以 JavaScript 语法来描述数据格式。因此,它在 JavaScript 中进行解析(反序列化)是很容易的,只需要直接通过 eval 函数即可返回结果。但是它的缺点也是很明显的。
  1. 不能正确表示正负无穷大(POSITIVE_INFINITY、NEGATIVE_INFINITY)。
  2. 字符串长度在逐字符分析完之前无法得到,非 JavaScript 语言在反序列化时需要逐字符判断,非常低效。
  3. 数组和对象中的元素个数在解析完之前无法得到。
  4. 只能表示 0 基连续数组,对于 0 基非连续数组、非 0 基数组、关联数组,均不能正确表示。
  5. 无法获知对象所属类。
  6. 不能表示直接递归和间接递归结构的数组和对象,一旦处理此类数据,程序将无法执行甚至引起浏览器崩溃。

PHP

PHPRPC 采用 PHP 格式来序列化数据。PHP 本身提供的序列化方式实际上也是一种通用的轻量级的数据交换格式,其它语言包括 JavaScript 都可以完全实现这种格式的序列化和反序列化。相对于 JSON 格式的来说,它具有以下优点。
  1. 不但可以正确的表示正负无穷大,而且能够区分整数和浮点数。
  2. 字符串长度在进行字符串解析前即可得到,之后可以直接根据长度来分配空间并获取字符串内容,使得任何语言在反序列化时都可以非常高效。
  3. 数组和对象元素个数在解析前即可得到。
  4. 不但可以表示 0 基连续数组,而且还可以正确的表示 0 基非连续数组、非 0 基数组和关联数组。
  5. 可以获知对象所属类。
  6. 可以表示直接递归和间接递归结构的数组和对象,且处理速度非常快。
因此,在序列化方式上,PHPRPC 相比 JSON-RPC 具有明显的优势。在通讯时,PHPRPC 比 JSON-RPC 可以交互的数据更丰富。

» 阅读全文

  1. 前言
  2. 概述
  3. NULL 和标量类型的序列化
  4. 简单复合类型的序列化
  5. 嵌套复合类型的序列化
  6. 自定义对象序列化
  7. Unicode 字符串的序列化
  8. 参考文献

» 阅读全文

5月
09

PHP 5 中调用 Java

PHP 网站所提供的 pecl-5.1.4-Win32.zip 中的 Java 扩展并不好用。不过要想在 PHP 5 中调用 Java 也不难。本文主要来讲解在 Windows 2003 上利用 IIS + PHP 5.1.4 来调用 Java,其它的 PHP 5 版本配置方法也是相同的,这里以 PHP 5.1.4 为例,仅是因为我的安装调试环境是这个。其它环境下的配置是类似的。

» 阅读全文