2006年04月22日

虽然前两天已经下载了几个与网页的打印版本有关的扩展,但今天算是正式去学着用这个扩展吧.结果非常之郁闷.这个扩展的手册说明太简陋,没有告知1.2.3这样详细的操作步骤.但这个扩展是同类下载量最大的..如果手册写得详细些,我相信没人不会使用它.现在这样就得费一翻思量了.现在是用人家的扩展,得照着人的要求去配置和使用.而不可能容使用者发挥什么创造力.只能是学会使用.而不是创造什么.除了揣摩和试验,能有什么好办法儿呢?原来一直以为,扩展什么没什么难的.现在却花费数小时没弄清这个问题.(其实想来,扩展使用还是没什么太难的.只是这个扩展的手册忒烦人了……)虽然也找到一些教程.网页打印版本的问题可以用别的方法来解决, 但就是不甘心~!

2006年03月01日

方法1:Simulate Static Documents Path
Typo3 creates this path in the address bar of the browser for this page:
www.xxx.com/index.php
but you want it to appear like this:
www.xxx.com/index.php/Static_Doc_Path/969/0/
 
The solution is quite simple. Place this code in the Setup of your Typo3 Template
 
# Set up PATH_INFO:config.simulateStaticDocuments = PATH_INFOconfig.simulateStaticDocuments_addTitle = 30 
This line defines length of the title with number of characters.
config.simulateStaticDocuments_addTitle = 30
The search engine spiders this every time it visits your site. If you want to improve your standing in the search engine periodically vary the number you place here. The spider will notice the change and index your page again because it thinks it is a different page.

It’s even possible to prevent the default page-type (0) to be appended
config.simulateStaticDocuments_noTypeIfNoTitle = 1
so you can have URLs like
http://www.server.domain/alias.html

方法2:Simulate Static Document Path – Version 2
This version will show a document path ending with html like this: http://www.XXXX.com/Simulate_Static_Document_Path_V_2.1042.0.html which is search engine friendly.
Rename _.htaccess file
Important to prevent future headaches with no access to _.htaccess configure the Apache Server to always show the file regardless if it has an underscore in front of it or not.
 
First the _.htaccess file in the root directory has to be renamed. In my install it was in the httpdocs folder. It is done through ftp. It has to be renamed to .htaccess, the underscore has to be removed.
When it is done correctly the file is no longer visible in the folder


 

_.htaccess file in httpdocs folder – ftp view
 

Activate Static Documents
The Static Documents Option is activated through the Install Tool.


 

Screenshot from the Install Tool
 

Log into the Install Tool
Select #4: All Configuration
Scroll down to [FE] section
Scroll down to ‘SimulateStaticDocuments’ and place a checkmark in the box
Scroll to the bottom of the page and click on ‘Write to localconf.php’
TS Setup Code
Place this code into the Setup Section of the Typo3 Template:
 
#Simulate Static Document config.simulateStaticDocuments = 1 config.simulateStaticDocuments_addTitle = 30
The first line actives the Simulate Static Documents Option
The second line shows the number of digits the title can have
 
Tip from Jochen Weiland’s Tutorial for Simulating Static Documents:
In case the Rewrite module is not available in your Apache configuration you can also use the following syntax in your template setup:
config.simulateStaticDocuments = PATH_INFO
This will change the links to the form www.mydomain.com/123/0. If you are using the PATH_INFO method, it could be that some graphics do not show correctly or some links are broken. In this case you also need to set the variable absRefPrefix to the path (with trailing slash!) to your index.php file, for example:
config.absRefPrefix = http:// www.mydomain.com/

2006年02月17日
                                                            作者:天涯风云
 
typoscript是什么??
 
       我们可以把它定义为"一种以typo3系统为基础的php动态web模版设计语言".也就是说,所有的typo3的模版设计都可以用这个脚本来设计。
       注意:typoscript只是一种描述性的标志语言,与html,xml之类的类似,它不是一种程式语言,只是作为一种模版方案的描述,也就是说,即使语言中出错,也不会有任何错误提示。
 
哪里要用到它?
 
      基于typo3的网站设计架构,在三个方面都需要用到它。
     1。Page TSconfig ,,页面配置。通过该脚本配置页面的布局。
     2。User TSconfig 用户与用户组管理。通过该脚本的相关设置,可以配置页面的用户和用户组属性
     3。TypoScript Templates 模版设计。通过该脚本配置页面所使用的模版。
 
怎么调试它?
    当你新建一个页面时,即使有标题和内容,页面也是无法显示的。得首先建立模版。在左边菜单列中,先中
template选项,,即可开始新建模版。typoscript在"Setup"选项框内可以调试。写好后,即可以打开页面,看到模版配置的效果了。
从代码说起

看下面这句:

asdf = qwerty

这就是一句typoscript的脚本。其中"asdf"指出了html页面的对象名,后面的"qwerty"标出该对象的属性值。

再来看下面两句:

                asdf.zxcvbnm = uiop
        asdf.backgroundColor = blue

asdf.zxcvbnm指向"asdf"的下级对象或该对象的一个属性,"uiop"则是属性值。
asdf.backgroundcolor是页面对象asdf的一种属性,blue是其属性值。
    (讲到这里,是否想到些什么呢?呵呵,,)

把上面的换种写法,可以是:
asdf {
          zxcvbnm = uiop
          backgroundColor = blue
        }

我们再加点内容进去,,呵呵!~~
asdf {
          zxcvbnm = uiop
          backgroundColor = blue
          backgroundColor.transparency = 95%
        }
这些都是typoscript的标准表达。。

typoscript对应于php的数组

以上那些代码,可以很好的用php数组来表述,,即是:
$TS['asdf.']['zxcvbnm'] = ‘uiop’;
        $TS['asdf.']['backgroundColor'] = ‘blue’;
        $TS['asdf.']['backgroundColor.']['transparency'] = ‘95%’;

也可以用另array来定义为:
$TS = array(
    ‘asdf.’ => array(
        ’zxcvbnm’ => ‘uiop’,
        ’backgroundColor’ => ‘blue’,
        ’backgroundColor.’ => array (
            ’transparency’ => ‘95%’
        )
    )
)
typoscript的语言结构

一个例子:
myObject = [value 1]
myObject.myProperty = [value 2]
myObject.myProperty.firstProperty = [value 3]
myObject.myProperty.secondProperty = [value 4]

用TypoScript Object Browser 脚本对象查看器,可以看到以下这些类容:



typoscript的语法规则

标准格式:
[Object Path] [Operator] [value]


例子:

myObject.myProperty = [value 2]

[list]
对象路径(object path或者说对象路径描述,以下统一称为对象路径)与程序语言变量定义规则一样,必须由A-Z, a-z, 0-9, "-", "_" 组成,用“."描述对象的结构层次。
用"=<>"等符号来描述对象的关系和属性值.
value 表示对象的属性值。

范例:
myObject = HTML
myObject.value = <BLINK> HTML – code </BLINK>

用TypoScript Object Browser 脚本对象查看器里可以看到.

关于注释
用"/" or "#"开始的行,会被忽略,通常表示是一行注释
例子:
// This is a comment
/ This is also a comment (only ONE slash is needed)
myObject = HTML
myObject.value = <BLINK> HTML – code </BLINK>
# This line is also a comment.



多行注解用:
"/*" 和 "*/"
它用来注解多个行,,例子如下:
/* This is a comment
.. and this line is within that comment which…
ends here:
*/  … this is not parsed either though – the whole line is still within the comment
myObject = HTML
myObject.value (
Here’s a multiline value which
/*
   ignores comments in side, so this is parsed!
*/
)
一些重要的标记

关于"="

"="用来给一个对象名给定特定的值。

关于" { } "

  当一个对象有多个属性值时,用"{ }"包围,简化输入。
例子:

myObject = HTML
myObject.value = <BLINK> HTML – code </BLINK>
…is the same as:

myObject = HTML
myObject {
value = <BLINK> HTML – code </BLINK>
}

注意:
"{"行后的值被忽略。
“}”行后的值也被忽略。
即其后不能用其它内容。


关于:“( ) "
给一个对象指定多行值。
例子:

myObject = HTML
myObject.value (
<BLINK>
   HTML – code  
</BLINK>
)


关于 ">"

用于对象的拷贝,将对象的所有属性及属性值拷贝到另一个对象中。
例子:
myObject = HTML
myObject.value = <BLINK> HTML – code </BLINK>

myOtherObject < myObject

用TypoScript Object Browser 脚本对象查看器里可以看到.



再看一个例子:
pageObj {
10 = HTML
10.value = <BLINK> HTML – code </BLINK>
20 < pageObj.10
}



 

2006年01月13日

typo3官方提供了几种不同定制的安装包,供不同情况不同水平的用户去选择安装使用:
A)如果你有Web服务器,比如本机架站式的(在你的机器上架设的服务器)或者你在网络上的Web空间(付费的或者免费的,要支持PHP及Mysql等数据库等).你可以选择以下三种之一:
1,Dummy package:不带任何示例的typo3安装包,安装好以后就是一个"空"的网站.合适于typo3的老手使用.因为typo3的使用水平够高了.可以不必参考示例就能自由及熟练的建立自己需要的网站.对这种用户来说,一个"干净"的没有任何废数据的"空"网站,无疑是最好的选择了(省得你安装后,删掉那些你不需要的无用数据).
2,QuickStart package:带一个typo3初级功能示例的安装包,安装好以后.带一个简单的示例.让初学者不会手足无措.利用所带的示例,可以直观的提供一些学习参考.
3,Testite package:带一个typo3高级功能的示例,这个示例有更多typo3的"高级"功能展示.
以上下载又有两种格式供下载:Zip格式和tar.gz格式
如果你只是用typo3供一个用户建站的话,推荐你下载Zip格式即可.而tar.gz格式适合非Windows平台使用,它们都是分为两个部分的dummysource部分,两个合起来才是一份完整的源码.Linux平台下的TYPO3 source+tar.gz安装有更多的特性提供,比如一份源码可以提供多个用户typo3建站.我想是给那些提供typo3建站服务的网站用吧.他们只需安装一份儿TYPO3 source就能让每个用户都能建立他们的typo3网站.
强调一下:如果你只是用typo3给一个用户建站的话,推荐你下载上述三种定制安装包的Zip格式就行了!
B)如果你没有Web服务器(也没有空间),官方也提供了即装即用式的typo3安装包.就是本机架站软件+QuickStart package包.这个安装包安装完后,即安装了本机服务器,也同时安装了一个QuickStart package包.不过,如果对配置Web服务器不是非常熟悉,还是推荐你服务器搭建套装来搭建你个人的服务器.


2005年12月26日

引用地址:http://castironcoding.com/resources/index.html

  • The "Getting Started" guide is the official starting point for TYPO3 newcomers. This document will give you a good grasp on how to do most common backend tasks, including how to create and edit pages, content, and frontend user accounts. If you’re just starting, this is the place to begin.
  • Once you’ve learned the basics of the backend, you’re going to want to move on to learning about templating. There are, in our experience, two popular approaches to setting up your template. The first (and older) approach is to use an extension called "Template Auto Parser" to parse an HTML template and add TYPO3content. To learn this approach, we advise you to take a look at "Modern Template Building Part 1".
  • The second, more recent approach to templating is to use the TYPO3 extension called TemplaVoila and the CSS Styled Content extension. This combination can do just about everything that the Modern Template Building approach is capable of, and then some. To learn how to use the TemplaVoila approach, we recommend that you read "Futuristic Template Building," the first part of which focuses on templating. The second part focuses on creating "flexible content elements." If you’re just starting out, focus on part 1 for now.
  • While you’re working through TYPO3, you’re going to have to use the system’s unique scripting language called "typoscript". Typoscript can be pretty intimidating for beginners. If you get stuck, you can always call on the Cast Iron Coding team for consulting and training. We suggest that you begin learning typoscript by consulting two documents on the subject. The first document is called "Typoscript By Example," and it is useful because it provides working examples of how to use typoscript.
  • The authoritative document on everything that can be accomplished using typoscript is the "TSREF," which is short for "Typoscript Reference." It’s not exactly fascinating reading, but once you learn your way around this document you’ll have a much easier time solving problems in TYPO3. While you’re at it, you may want to brush up on your typoscript syntax by referring to this in-depth study of typoscript syntax.
  • Stay tuned for more advice on learning TYPO3…

2005年12月25日
PHP5新特性探讨…
文章出处: 发布时间:2005-04-09
虽然 PHP5 还没有正式发布(开发版本已经提供下载),但我们现在就可以开始体验一下新的版本 将要带给我们的惊喜。在以下的介绍中,我们将重点讲述 PHP5 中的三大特色功能。这三大特点为:

* 新的对象模式 (New Object Mode)
* 异常处理 (Exceptions)
* 名称空间 (Namespace)

在开始之前,要声明两点:

* 文章中的例子为了说明如何操作,有些部分使用了 PHP4 的表现手段,这仅仅是为了提高文章的可读性。
* 文章中描述的部分与 PHP5 的最终发布版可能会有一些出入

在 PHP5 没有最终正式发布前,你可以随时从
http://snaps.php.net 下载到最新的编译版本来亲自体验一下 PHP5 所带给我们这些崭新的功能。


新的对象模式

PHP5 中的对象已经进行了较系统、较全面的调整,现在的样子可能看起来会有些类似于 Java。本小节着重讲述 PHP5 中新的对象模式,并举了一些较简易的例子来说明。就让本节成为你的 PHP5 之旅的一个新起点吧。:)

* 构造函数和析构函数
* 对象的引用
* 对象的克隆
* 对象中的私有、公共及受保护模式
* 接口 (Interfaces)
* 抽象类
* __call
* __set 和 __get
* 静态成员


构造函数和析构函数

在 PHP4 中,当函数与对象同名时,这个函数将成为该对象的构造函数,并且在 PHP4 中没有析构函数的概念。
在 PHP5 中,构造函数被统一命名为 __construct,并且引入了析构函数的概念,被统一命名为 __destruct。

例一:构造函数和析构函数



<?php
class foo {
var $x;
function __construct($x) {
  $this->x = $x;
}
function display() {
  print($this->x);
}
function __destruct() {
  print("bye bye");
}
}
$o1 = new foo(4);
$o1->display();
?>



在上面的例子中,当你终止调用 foo 类的时候,其析构函数将会被调用,上例中会输出 “bye bye”。


对象的引用

众所周知,在PHP4 中,传递变量给一个函数或方法,实际是把这个变量做了一次复制,也就意味着你传给函数或方法的是这个变量的一个副本,除非你使用了引用符号 “&” 来声明是要做一个引用,而不是一个 Copy。在 PHP5 中,对象总是以引用的形式存在的,对象中的赋值操作同样也都是一个引用操作。

例二:对象的引用




<?php
class foo {
var $x;
function setX($x) {
  $this->x = $x;
}
function getX() {
  return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1;
$o1->setX(5);
if($o1->getX() == $o2->getX()) print("Oh my god!");
?>



对象的克隆

如上所述,当一个对象始终以引用的形式来被调用时,如果我想得到该对象的一个副本,该怎么办呢?PHP5 提供了一个新的功能,就是对象的克隆,语法为 __clone。

例三:对象的克隆




<?php
class foo {
var $x;
function setX($x) {
  $this->x = $x;
}
function getX() {
  return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1->__clone();
$o1->setX(5); if($o1->getX() != $o2->getX()) print("Copies are independant");
?>



对象克隆的方法在其它很多应用程序语言中都是存在的,所以你不必担心它的稳定性。:)


对象中的私有、公共及保护模式

PHP4 中,一个对象的所有方法和变量都是公共的,这意味着你可以在一个对象的外部操作其中的任意一个变量和方法。PHP5 引入了三种新的用来控制这种存取权限的模式,它们是:公共的(Public)、受保护的(Protected)及私有的(Private)。

公共模式(Public):允许在对象外部进行操作控制。
私有模式(Private):只允许本对象内的方法对其进行操作控制。
受保护模式(Protected):允许本对象及其父对象对其进行操作控制。

例四: 对象中的私有、公共及受保护模式




<?php
class foo {
private $x;
public function public_foo() {
  print("I’m public");
}
protected function protected_foo() {
  $this->private_foo(); //Ok because we are in the same class we can call private methods
  print("I’m protected");
}
private function private_foo() {
  $this->x = 3;
  print("I’m private");
}
}
class foo2 extends foo {
public function display() {
  $this->protected_foo();
  $this->public_foo();
  // $this->private_foo(); // Invalid! the function is private in the base class
}
} $x = new foo();
$x->public_foo();
//$x->protected_foo(); //Invalid cannot call protected methods outside the class and derived classes
//$x->private_foo();   //Invalid private methods can only be used inside the class $x2 = new foo2();
$x2->display();
?>



提示:对象中的变量总是以私有形式存在的,直接操作一个对象中的变量不是一个好的面向对象编程的习惯,更好的办法是把你想要的变量交给一个对象的方法去处理。


接口 (Interfaces)

众所周知,PHP4 中的对象支持继承,要使一个对象成为另一个对象的派生类,你需要使用类似 “class foo extends parent” 的代码来控制。 PHP4 和 PHP5 中,一个对象都仅能继承一次,多重继承是不被支持的。不过,在 PHP5 中产生了一个新的名词:接口,接口是一个没有具体处理代码的特殊对象,它仅仅定义了一些方法的名称及参数,此后的对象就可以方便的使用 ‘implement’ 关键字把需要的接口整合起来,然后再加入具体的执行代码。

例五:接口




<?php
interface displayable {
function display();
}
interface printable {
function doprint();
}

class foo implements displayable,printable {
function display() {
  // code
}   function doprint() {
  // code
}
}
?>



这对提高代码的可读性及通俗性有很大的帮助,通过上面的例子可以看到,对象 foo 包含了 displayable 和 printable 两个接口,这时我们就可以清楚的知道,对象 foo 一定会有一个 display() 方法和一个 print() 方法,只需要去了解接口部分,你就可以轻易的操作该对象而不必去关心对象的内部是如何运作的。

抽象类

抽象类不能被实例化。
抽象类与其它类一样,允许定义变量及方法。
抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。

例六:抽象类




<?php
abstract class foo {
protected $x;
abstract function display();
function setX($x) {
  $this->x = $x;
}
}
class foo2 extends foo {
function display() {
  // Code
}
}
?>



__call

PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。

例七:__call




<?php
class foo {
function __call($name,$arguments) {
  print("Did you call me? I’m $name!");
}
} $x = new foo();
$x->doStuff();
$x->fancy_stuff();
?>



这个特殊的方法可以被用来实现“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。

例八:使用 __call 实现“过载”动作




<?php
class Magic {
function __call($name,$arguments) {
  if($name==’foo’) {
    if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
    if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
  }
}   private function foo_for_int($x) {
  print("oh an int!");
}   private function foo_for_string($x) {
  print("oh a string!");
}
} $x = new Magic();
$x->foo(3);
$x->foo("3");
?>



__set 和 __get

这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变量和方法。

例九: __set 和 __get




<?php
class foo {
function __set($name,$val) {
  print("Hello, you tried to put $val in $name");
}
function __get($name) {
  print("Hey you asked for $name");
}
}
$x = new foo();
$x->bar = 3;
print($x->winky_winky);
?>



类型指示

在 PHP5 中,你可以在对象的方法中指明其参数必须为另一个对象的实例。

例十:类型指示




<?php
class foo {
// code …
}
class bar {
public function process_a_foo(foo $foo) {
  // Some code
}
}
$b = new bar();
$f = new foo();
$b->process_a_foo($f);
?>



可以看出,我们可以显性的在参数前指明一个对象的名称,PHP5 会识别出这个参数将会要是一个对象实例。


静态成员

静态成员和静态方法在面象对象编程的术语中被称作 “对象方法(class methods)” 和 “对象变量(class variables)”。
“对象方法” 在一个对象没有实例化前允许被调用。同样,“对象变量” 在一个对象没有实例化前可以被独立操作控制(不需要用一个对象的方法来控制)。

例十一:对象方法和对象变量




<?php
class calculator {
static public $pi = 3.14151692;
static public function add($x,$y) {
  return $x + $y;
}
}
$s = calculator::$pi;
$result = calculator::add(3,7);
print("$result");
?>



异常处理

异常处理是公认的处理程序错误的理想方法,在 Java 及 C++ 中都有这个概念,我们欣喜的看到,在 PHP5 已经加入了这方面的应用。你可以尝试使用 “try” 和 “catch” 来控制程序的错误。

例十二:异常处理




<?php
class foo {
function divide($x,$y) {
  if($y==0) throw new Exception("cannot divide by zero");
  return $x/$y;
}
}
$x = new foo();
try {
$x->divide(3,0);  
} catch (Exception $e) {
  echo $e->getMessage();
  echo "n<br />n";
  // Some catastrophic measure here
}
?>



上例中,我们使用了 “try” 来执行花括号中的语句,当有错误发生的时候,代码会把错误交给 “catch” 子句来处理,在 “catch” 子句中,你需要指明要把错误交给某个对象处理,这样做可以使代码结构看起来更清晰,因为现在我们可以把所有的错误信息交给一个对象来处理。


自定义错误处理

你可以很方便的用自定义的处理错误的代码来控制你的程序中的意外。你仅仅需要从异常类中派生出一个自己的错误控制类,在你自己的错误控制类中,你需要有一个构造函数和一个 getMessage 方法,以下是一个例子。

例十三:自定义错误处理




<?php
class WeirdProblem extends Exception {
  private $data;
  function WeirdProblem($data) {
    parent::exception();
    $this->data = $data;
  }
  function getMessage() {
    return $this->data . " caused a weird exception!";
  }
}
?>



现在我们可以使用 “throw new WeirdProblem($foo)” 来抛出一个错误句柄,如果错误在 “try” 的代码块中发生,PHP5 会自动把错误交给 “catch” 部分来处理。


名称空间

名称空间对类的分组或函数分组很有用。它可以把一些相关的类或函数给组合到一起,方便以后调用。

例十四:名称空间




<?php
namespace Math {
class Complex {
  //…code…
  function __construct() {
    print("hey");
  }
}
} $m = new Math::Complex();
?>



注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那么你就可以把他们分别放到不同的名称空间中去(但接口是要相同的)。

译者注:本篇文章来自 PHPbuilder,从以上文字中我们高兴的看到 PHP5 中新增加的一些优秀的功能。我们还可以看到一些 Java 和 C++ 的影子,现在的 PHP5 还没有正式发布,等到真正发布那一天,希望能再带给所有的 PHP 爱好者更多的惊喜。对这方面比较感兴趣的朋友可以登录 PHP 官方新闻组去了解更新情况。新闻组地址为 news://news.php.net ,也可以登录WEB界面 http://news.php.net 来访问。让我们一起来期待新版本的发布吧。:)

php.ini中文解释
文章出处: 发布时间:2005-04-09

php.ini中文解释


php.ini中文解释
发布时间:02-11-26 作者或来源: leftstar
[PHP]
; PHP还是一个不断发展的工具,其功能还在不断地删减
; 而php.ini的设置更改可以反映出相当的变化,
; 在使用新的PHP版本前,研究一下php.ini会有好处的
;;;;;;;;;;;;;;;;;;;
; 关于这个文件 ;
;;;;;;;;;;;;;;;;;;;
; 这个文件控制了PHP许多方面的观点.为了让PHP读取这个文件,它必须被命名为  
; ‘php.ini’.PHP 将在这些地方依次查找该文件:当前工作目录;环境变量PHPRC
; 指明的路径;编译时指定的路径.
; 在windows下,编译时的路径是Windows安装目录.
; 在命令行模式下,php.ini的查找路径可以用 -c 参数替代.
; 该文件的语法非常简单.空白字符和用分号’;'开始的行被简单地忽略(就象你可能
; 猜到的一样). 章节标题(例如 : [Foo])也被简单地忽略,即使将来它们可能
; 有某种的意义.
;
; 指示被指定使用如下语法:
; 指示标识符 = 值
; directive = value
; 指示标识符 是 *大小写敏感的* – foo=bar 不同于 FOO = bar.
;
; 值可以是一个字符串,一个数字,一个 PHP 常量 (如: E_ALL or M_PI), INI 常量中的
; 一个 (On, Off, True, False, Yes, No and None) ,或是一个表达式
; (如: E_ALL & ~E_NOTICE), 或是用引号括起来的字符串("foo").
;
; INI 文件的表达式被限制于位运算符和括号.
; | bitwise OR
; & bitwise AND
; ~ bitwise NOT
; ! boolean NOT
;
; 布尔标志可用 1, On, True or Yes 这些值置于开的状态.
; 它们可用 0, Off, False or No 这些值置于关的状态.
;
; 一个空字符串可以用在等号后不写任何东西表示,或者用 None 关键字:
;
; foo = ; 将foo置为空字符串
; foo = none ; 将foo置为空字符串
; foo = "none" ; 将foo置为字符串’none’
;
; 如果你值设置中使用常量,而这些常量属于动态调入的扩展库(不是 PHP 的扩展,就是
; Zend 的扩展),你仅可以调入这些扩展的行*之后*使用这些常量.
;
; 所有在 php.ini-dist 文件里设定的值与内建的默认值相同(这是说,如果 php.ini
; 没被使用或者你删掉了这些行,默认值与之相同).
;;;;;;;;;;;;;;;;;;;;
; 语言选项 ;
;;;;;;;;;;;;;;;;;;;;
engine = On
; 使 PHP scripting language engine(PHP 脚本语言引擎)在 Apache下有效.
short_open_tag = On
; 允许 <? 标识(这种简单表示). 仅有 <?php and <script> tags 将被识别.
asp_tags = Off
; 允许ASP-style <% %> tags
precision = 14
; 浮点类型数显示时的有效位数
y2k_compliance = Off
; 是否打开 2000年适应 (可能在非Y2K适应的浏览器中导致问题)
output_buffering = Off
; 输出缓存允许你甚至在输出正文内容之后发送 header(标头,包括cookies)行
; 其代价是输出层减慢一点点速度.你可以使用输出缓存在运行时打开输出缓存,
; 或者在这里将指示设为 On 而使得所有文件的输出缓存打开.
output_handler = ; 你可以重定向你的脚本的所有输出到一个函数,
; 那样做可能对处理或以日志记录它有用.
; 例如若你将这个output_handler 设为"ob_gzhandler",
; 则输出会被透明地为支持gzip或deflate编码的浏览器压缩.
; 设一个输出处理器自动地打开输出缓冲.
implicit_flush = Off
; 强制flush(刷新)让PHP 告诉输出层在每个输出块之后自动刷新自身数据.
; 这等效于在每个 print() 或 echo() 调用和每个 HTML 块后调用flush()函数.
; 打开这项设置会导致严重的运行时冲突,建议仅在debug过程中打开.
allow_call_time_pass_reference = On
; 是否让强迫函数调用时按引用传递参数.这一方法遭到抗议,
; 并可能在将来版本的PHP/Zend里不再支持.
; 受到鼓励的指定哪些参数按引用传递的方法是在函数声明里.
; 你被鼓励尝试关闭这一选项并确认你的脚本仍能正常工作,以保证在将来版本的语言里
; 它们仍能工作.(你将在每次使用该特点时得到一个警告,而参数将按值而不是按引用
; 传递).
; Safe Mode 安全模式
safe_mode = Off
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
; ?Setting certain environment variables
; ?may be a potential security breach.
; 该指示包含用逗号分隔的前缀列表.安全模式中,用户仅可以替换
; 以在此列出的前缀开头的环境变量的值.
; 默认地,用户将仅能 设定以PHP_开头的环境变量,(如: PHP_FOO=BAR).
; 注意: 如果这一指示为空,PHP 将让用户更改任意环境变量!
safe_mode_protected_env_vars = LD_LIBRARY_PATH
; 这条指示包含一个用逗号分隔的环境变量列表,那是最终用户将不能用putenv () 更改的.
; 这些变量甚至在safe_mode_allowed_env_vars 设置为允许的情况下得到保护.
disable_functions =
; 这条指示让你可以为了安全的原因让特定函数失效.
; 它接受一个用逗号分隔的函数名列表.
; 这条指示 *不受* 安全模式是否打开的影响.
; 语法高亮模式的色彩.
; 只要能被<font color=???>接受的东西就能工作.
highlight.string = #DD0000
highlight.comment = #FF8000
highlight.keyword = #007700
highlight.bg = #FFFFFF
highlight.default = #0000BB
highlight.html = #000000
; Misc 杂项
expose_php = Off
; 决定 PHP 是否标示它装在服务器上的事实(例如:加在它 —PHP—给Web服务
; 发送的信号上).
; (我个人的意见,在出现什么power-by的header的时候,把这关掉.)
; 它不会有安全上的威胁, 但它使检查你的服务器上是否安装了PHP成为了可能.
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 30 ; 每个脚本的最大执行时间, 按秒计
memory_limit = 8388608 ; 一个脚本最大可使用的内存总量 (这里是8MB)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
; 出错控制和登记 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 错误报告是按位的.或者将数字加起来得到想要的错误报告等级.
; E_ALL – 所有的错误和警告
; E_ERROR – 致命性运行时错
; E_WARNING – 运行时警告(非致命性错)  
; E_PARSE – 编译时解析错误
; E_NOTICE – 运行时提醒(这些经常是是你的代码的bug引起的,
;也可能是有意的行为造成的.(如:基于未初始化的变量自动初始化为一个
;空字符串的事实而使用一个未初始化的变量)
; E_CORE_ERROR – 发生于PHP启动时初始化过程中的致命错误
; E_CORE_WARNING – 发生于PHP启动时初始化过程中的警告(非致命性错)
; E_COMPILE_ERROR – 编译时致命性错
; E_COMPILE_WARNING – 编译时警告(非致命性错)
; E_USER_ERROR – 用户产生的出错消息
; E_USER_WARNING – 用户产生的警告消息
; E_USER_NOTICE – 用户产生的提醒消息
; 例子:
; error_reporting = E_ALL & ~E_NOTICE ; 显示所有的错误,除了提醒
; error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR ; 仅显示错误
error_reporting = E_ALL & ~E_NOTICE ; 显示所有的错误,除了提醒
display_errors = On ; 显示出错误信息(作为输出的一部分)
; 在最终发布的web站点上,强烈建议你关掉这个特性,并使用
; 错误日志代替(参看下面).
; 在最终发布的web站点继续让 display_errors 有效可能
; 暴露一些有关安全的信息,例如你的web服务上的文件路径、
; 你的数据库规划或别的信息.
display_startup_errors = Off ; 甚至当display_erroes打开了,发生于PHP的启动的步骤中
; 的错误也不会被显示.
; 强烈建议保持使 display_startup_errors 关闭,
; 除了在改错过程中.
log_errors = Off ; 在日志文件里记录错误(服务器指定的日志,stderr标准错误输出,或error_log(下面的))
; 正如上面说明的那样,强烈建议你在最终发布的web站点以日志记录错误
; 取代直接错误输出.
track_errors = Off ; 保存最近一个 错误/警告 消息于变量 $php_errormsg (boolean)
;error_prepend_string = "<font color=ff0000>" ; 于错误信息前输出的字符串  
;error_append_string = "</font>" ; 于错误信息后输出的字符串
;error_log = filename ; 记录错误日志于指定文件
;error_log = syslog ; 记录错误日志于系统日志 syslog (NT 下的事件日志, Windows 95下无效)
warn_plus_overloading = Off ; 当将‘+’用于字符串时警告
;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;
variables_order = "EGPCS" ; 这条指示描述了PHP 记录
; GET, POST, Cookie, Environment and Built-in 这些变量的顺序.
; (以 G, P, C, E & S 代表,通常以 EGPCS 或 GPC 的方式引用).
; 按从左到右记录,新值取代旧值.
register_globals = On ; 是否将这些 EGPCS 变量注册为全局变量.
; 若你不想让用户数据不在全局范围内混乱的话,你可能想关闭它.
; 这和 track_vars 连起来用更有意义 — 这样你可以通过
; $HTTP_*_VARS[] 数组访问所有的GPC变量.
register_argc_argv = On ; 这条指示告诉 PHP 是否声明 argv和argc 变量
; (注:这里argv为数组,argc为变量数)
; (其中包含用GET方法传来的数据).
; 若你不想用这些变量,你应当关掉它以提高性能.
track_vars = On ; 使$HTTP_*_VARS[]数组有效,这里*在使用时用
; ENV, POST, GET, COOKIE or SERVER替换
post_max_size = 8M ; PHP将接受的POST数据最大大小.
gpc_order = "GPC" ; 这条指示被人反对.用 variables_order 代替.
; Magic quotes
magic_quotes_gpc = On ; 在输入的GET/POST/Cookie数据里使用魔术引用
; (原文就这样,呵呵,所谓magic quotes 应该是指用转义符加在引用性的控制字符上,如 \’….)
magic_quotes_runtime= Off ; 对运行时产生的数据使用魔术引用,
; 例如:用SQL查询得到的数据,用exec()函数得到的数据,等等
magic_quotes_sybase = Off ; 采用 Sybase形式的魔术引用(用 ” 脱出 ‘ 而不用 \’)
; 自动在 PHP 文档之前和之后添加文件
auto_prepend_file =
auto_append_file =
; 象4.04b4一样,PHP 默认地总是在 “Content-type:” 头标输出一个字符的编码方式.
; 让输出字符集失效,只要设置为空.
; PHP 的内建默认值是 text/html
default_mimetype = "text/html"
;default_charset = "iso-8859-1"
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
include_path = ; include 路径设置,UNIX: "/path1:/path2" Windows: "\path1;\path2"
doc_root = ; php 页面的根路径,仅在非空时有效
user_dir = ; 告知 php 在使用 /~username 打开脚本时到哪个目录下去找,仅在非空时有效
;upload_tmp_dir = ; 存放用HTTP协议上载的文件的临时目录(在没指定时使用系统默认的)
upload_max_filesize = 2097152 ; 文件上载默认地限制为2 Meg
extension_dir = c:\php\ ; 存放可加载的扩充库(模块)的目录
enable_dl = On ; 是否使dl()有效.
; 在多线程的服务器上 dl()函数*不能*很好地工作,
; 例如IIS or Zeus,并在其上默认为禁止
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
file_uploads = On ; 是否允许HTTP方式文件上载
;upload_tmp_dir = ; 用于HTTP上载的文件的临时目录(未指定则使用系统默认)
upload_max_filesize = 2M ; 上载文件的最大许可大小
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;
allow_url_fopen = On ; 是否允许把URLs当作http:.. 或把文件当作ftp:…
;;;;;;;;;;;;;;;;;;;;;;
; 动态扩展 ;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
; 若你希望一个扩展库自动加载,用下面的语法:
; extension=modulename.extension
; 例如,在windows上,
; extension=msql.dll
; or 在UNIX下,
; extension=msql.so
; 注意,这只应当是模块的名字,不需要目录信息放在里面.
; 用上面的 extension_dir 指示指定扩展库的位置.
;Windows 扩展
;extension=php_nsmail.dll
extension=php_calendar.dll
;extension=php_dbase.dll
;extension=php_filepro.dll
extension=php_gd.dll
;extension=php_dbm.dll
;extension=php_mssql.dll
;extension=php_zlib.dll
;extension=php_filepro.dll
;extension=php_imap4r2.dll
;extension=php_ldap.dll
;extension=php_crypt.dll
;extension=php_msql2.dll
;extension=php_odbc.dll
; 注意, MySQL的支持现在是内建的,因此,不需要用它的dll
;;;;;;;;;;;;;;;;;;;
; 模块设定 ;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;
[Syslog]
define_syslog_variables = Off ; 是否定义各种的系统日志变量
; 如:$LOG_PID, $LOG_CRON, 等等.
; 关掉它是个提高效率的好主意.
; 运行时,你可以调用函数define_syslog_variables(),来定义这些变量
[mail function]
SMTP = localhost ;仅用于win32系统
sendmail_from =
me@localhost.com ;仅用于win32系统
;sendmail_path = ;仅用于unix, 也可支持参数(默认的是’sendmail -t -i’)
[Debugger]
debugger.host = localhost
debugger.port = 7869
debugger.enabled = False
[Logging]
; 这些配置指示用于示例的日志记录机制.
; 看 examples/README.logging 以得到更多的解释
;logging.method = db
;logging.directory = /path/to/log/directory
[Java]
;java.class.path = .\php_java.jar
;java.home = c:\jdk
;java.library = c:\jdk\jre\bin\hotspot\jvm.dll
;java.library.path = .\
[SQL]
sql.safe_mode = Off
[ODBC]
;uodbc.default_db = Not yet implemented
;uodbc.default_user = Not yet implemented
;uodbc.default_pw = Not yet implemented
uodbc.allow_persistent = On ; 允许或禁止 持久连接
uodbc.check_persistent = On ; 在重用前检查连接是否还可用
uodbc.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
uodbc.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
uodbc.defaultlrl = 4096 ; 控制 LONG 类型的字段.返回变量的字节数,0 代表通过(?)0 means passthru
uodbc.defaultbinmode = 1 ; 控制 二进制数据.0 代表?????Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char
; 见有关 odbc_binmode 和 odbc_longreadlen 的文档以得到 uodbc.defaultlrl 和 uodbc.defaultbinmode 的解释.
[MySQL]
mysql.allow_persistent = On ; 允许或禁止 持久连接
mysql.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
mysql.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
mysql.default_port = ; mysql_connect() 使用的默认端口,如不设置,mysql_connect()
; 将使用变量 $MYSQL_TCP_PORT,或在/etc/services 下的mysql-tcp 条目(unix),
; 或在编译是定义的 MYSQL_PORT(按这样的顺序)
; Win32环境,将仅检查MYSQL_PORT.
mysql.default_socket = ; 用于本地 MySql 连接的默认的套接字名.为空,使用 MYSQL 内建值
mysql.default_host = ; mysql_connect() 默认使用的主机(安全模式下无效)
mysql.default_user = ; mysql_connect() 默认使用的用户名(安全模式下无效)
mysql.default_password = ; mysql_connect() 默认使用的密码(安全模式下无效)
; 注意,在这个文件下保存密码通常是一个*坏*主意
; *任何*可以使用PHP访问的用户可以运行
; ‘echo cfg_get_var("mysql.default_password")’来显示那个密码!
; 而且当然地,任何有读该文件权力的用户也能看到那个密码.
[mSQL]
msql.allow_persistent = On ; 允许或禁止 持久连接
msql.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
msql.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
[PostgresSQL]
pgsql.allow_persistent = On ; 允许或禁止 持久连接
pgsql.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
pgsql.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
[Sybase]
sybase.allow_persistent = On ; 允许或禁止 持久连接
sybase.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制  
sybase.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
;sybase.interface_file = "/usr/sybase/interfaces"
sybase.min_error_severity = 10 ; 显示的错误的最低严重性
sybase.min_message_severity = 10 ; 显示的消息的最低重要性
sybase.compatability_mode = Off ; 与旧版的PHP 3.0 兼容的模式.若打开,这将导致 PHP 自动地
; 把根据结果的 Sybase 类型赋予它们,
; 而不是把它们全当成字符串.
; 这个兼容模式不会永远留着,
; 因此,将你的代码进行需要的修改,
; 并将该项关闭.
[Sybase-CT]
sybct.allow_persistent = On ; 允许或禁止 持久连接
sybct.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
sybct.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
sybct.min_server_severity = 10 ; 显示的错误的最低严重性
sybct.min_client_severity = 10 ; 显示的消息的最低重要性
[bcmath]
bcmath.scale = 0 ; 用于所有bcmath函数的10十进制数数字的个数number of decimal digits for all bcmath functions
[browscap]
;browscap = extra/browscap.ini
browscap = C:\WIN\SYSTEM\inetsrv\browscap.ini
[Informix]
ifx.default_host = ; ifx_connect() 默认使用的主机(安全模式下无效)
ifx.default_user = ; ifx_connect() 默认使用的用户名(安全模式下无效)
ifx.default_password = ; ifx_connect() 默认使用的密码(安全模式下无效)
ifx.allow_persistent = On ; 允许或禁止 持久连接
ifx.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
ifx.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
ifx.textasvarchar = 0 ; 若打开,select 状态符返回一个 ‘text blob’字段的内容,而不是它的id
ifx.byteasvarchar = 0 ; 若打开,select 状态符返回一个 ‘byte blob’字段的内容,而不是它的id
ifx.charasvarchar = 0 ; 追踪从固定长度的字符列里剥离的空格.
; 可能对 Informix SE 用户有效.
ifx.blobinfile = 0 ; 若打开,text和byte blobs 的内容被导出到一个文件
; 而不是保存到内存.
ifx.nullformat = 0 ; NULL(空)被作为空字段返回,除非,这里被设为1.
; 这种情况下(为1),NULL作为字串NULL返回.
[Session]
session.save_handler = files ; 用于保存/取回数据的控制方式
session.save_path = C:\win\temp ; 在 save_handler 设为文件时传给控制器的参数,
; 这是数据文件将保存的路径.
session.use_cookies = 1 ; 是否使用cookies
session.name = PHPSESSID
; 用在cookie里的session的名字
session.auto_start = 0 ; 在请求启动时初始化session
session.cookie_lifetime = 0 ; 为按秒记的cookie的保存时间,
; 或为0时,直到浏览器被重启
session.cookie_path = / ; cookie的有效路径
session.cookie_domain = ; cookie的有效域
session.serialize_handler = php ; 用于连接数据的控制器
; php是 PHP 的标准控制器.
session.gc_probability = 1 ; 按百分比的’garbage collection(碎片整理)’进程
; 在每次 session 初始化的时候开始的可能性.
session.gc_maxlifetime = 1440 ; 在这里数字所指的秒数后,保存的数据将被视为
; ‘碎片(garbage)’并由gc 进程清理掉.
session.referer_check = ; 检查 HTTP引用以使额外包含于URLs中的ids无效
session.entropy_length = 0 ; 从文件中读取多少字节
session.entropy_file = ; 指定这里建立 session id
; session.entropy_length = 16
; session.entropy_file = /dev/urandom
session.cache_limiter = nocache ; 设为{nocache,private,public},以决定 HTTP 的
; 缓存问题
session.cache_expire = 180 ; 文档在 n 分钟后过时
session.use_trans_sid = 1 ; 使用过渡性的 sid 支持,若编译时许可了
; –enable-trans-sid
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
[MSSQL]
;extension=php_mssql.dll
mssql.allow_persistent = On ; 允许或禁止 持久连接
mssql.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
mssql.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
mssql.min_error_severity = 10 ; 显示的错误的最低严重性
mssql.min_message_severity = 10 ; 显示的消息的最低重要性  
mssql.compatability_mode = Off ; 与旧版的PHP 3.0 兼容的模式.
[Assertion]
; ?????
;assert.active = On ; ?assert(expr); active by default
;assert.warning = On ; issue a PHP warning for each failed assertion.
;assert.bail = Off ; don’t bail out by default.
;assert.callback = 0 ; user-function to be called if an assertion fails.
;assert.quiet_eval = 0 ; eval the expression with current error_reporting(). set to true if you want error_reporting(0) around the eval().
[Ingres II]
ii.allow_persistent = On ; 允许或禁止 持久连接
ii.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
ii.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
ii.default_database = ; 默认 database (format : [node_id::]dbname[/srv_class]
ii.default_user = ; 默认 user
ii.default_password = ; 默认 password
[Verisign Payflow Pro]
pfpro.defaulthost = "test.signio.com" ; 默认的 Signio 服务器
pfpro.defaultport = 443 ; 连接的默认端口
pfpro.defaulttimeout = 30 ; 按秒计的默认超时时间
; pfpro.proxyaddress = ; 默认的代理的 IP 地址(如果需要)
; pfpro.proxyport = ; 默认的代理的端口
; pfpro.proxylogon = ; 默认的代理的登录(logon 用户名)
; pfpro.proxypassword = ; 默认的代理的密码
[Sockets]
sockets.use_system_read = On ; 使用系统的read() 函数替代 php_read()封装
; Local Variables: (局部变量)
; tab-width: 4
; End:

 

2005年12月19日

平时说的"插件"在Typo3中称为"扩展"(Extension),以后就用"扩展"这个更接近于英文字面义和含义的词吧,免得引起混淆.Typo3的扩展总数1600余个.分为前台,后台,管理等等多个大类,官方扩展库,不要被这么大的数量吓到,扩展数量虽然多.但其实我们能会用那么十几个,二十个左右,平时需要的功能也就足够了.这里面再精选的话,会几个就能做个不错的具备基本功能的网站了.(比如,论坛,留言本,新闻,文章系统,图片库,下载等等).众多的扩展几乎能满足你所能想到的所有需求.这儿说的是Typo3自身的扩展,没有谈到与其它程序整合的问题.比如,你想把Typo3和VBB,IPB,或者DZ论坛整合起来,这儿没有触及到这些.那是二次开发的事情了,也许以后会有所提及的.

扩展的安装:

扩展安装起来,其实是很简单的.但还是可能会给初用者造成一定的麻烦.甚至花费数小时去研究如何安装卸载扩展.以及从哪儿找到下载扩展.所以这篇文章是写给初用者的.扩展安装一般来讲可分为:在线式安装和离线式安装。

1.在线式安装:直接从官方的扩展库导入扩展并安装在自己的系统中。如下图:

提示一点儿,下图左边标出的红箭头, 表示你的系统中当前没有安装该扩展。点击箭头和标题的效果是一样的。点击标题导入扩展会有更多的选项,一试便知。

2.离线式安装:可简单归结为一句话,从官方网站手工下载扩展,然后从后台扩展管理中上传导入并安装进自己的系统,请仔细看动画教程。

3.扩展的安装卸载与彻底删除:

在后台扩展管理中,通过顶部下拉式选择菜单选择需要的视图,然后。点击下图标注的“+”和“-”号图标。可以对已经导入到自己系统中的扩展进行安装卸载。从标题的颜色状态,也能看出该扩展的安装与否的状态。要想把这个扩展从系统中彻底删除,请先卸载它。然后直接从系统扩展所在的文件夹删除它,或者点击标题,从右上角的选项下拉菜单中删除它。(有时候彻底删除好像不那么轻松。系统会提示说,不允许操作…)

2005年12月18日

  1. Typo3静态页面(html)(模拟)生成完美设置方法 (2005年12月18日)
  2. Typo3(模拟)静态网页生成的两种方法(英文)(转) (2006年3月1日)
  3. Typo3官方及网上教程资源索引

干冷的天气……北方的冬天比夏天更舒服,室内一直是20多度的温度……

用博客当做一个传播知识型的常规网站还真是有些限制.

我需要一个文章管理系统,让各篇文章的题目都能一目了然,很容易的让人家看到,不要找呀找的.都不知道有哪些文章.我需要提供人家一些基本的文件下载…….这些都做不到.免费的空间让人不敢相信.暂时当作下载用的空间,应该还是能凑合的……