分页: 10/11 第一页 上页 5 6 7 8 9 10 11 下页 最后页 [ 显示模式: 摘要 | 列表 ]

[1]关于操作系统的选择

PHP在Linux/FreeBSD下面的性能比在Windows主机下的性能更好。如果您没有必须使用Windows主机的理由(比如需要使用ASP.net或者SQL Server或者Windows Media Server或者Serv-U),那么我推荐您使用Linux/FreeBSD。
如果您需要使用Windows,推荐使用Windows 2003 32位企业版,不推荐使用Windows 2000(性能较差)。
如果您需要使用Linux,推荐使用RedHat Enterprise Linux(最新版本是RedHat Enterprise Linux 4 beta1)。
如果您需要使用FreeBSD,推荐使用最新版本FreeBSD 5.2.1。
如果您的MySQL和Web分离,MySQL主机推荐使用Linux系统,通过LinuxThread可以有很好的性能(LinuxThread也可以在FreeBSD下面安装,但是比较麻烦)

[2]关于Web Server的选择

如果您使用的是Windows,那么推荐使用IIS6.0,不推荐使用Apache(性能较差)。
如果您使用的是Linux/FreeBSD,那么推荐使用Zeus或Apache(Apache的最新版本是2.0.52/1.3.33)。
注意:Zeus最新版本4.3版尚不支持FreeBSD 5.0版本。
Zeus Web Server是目前全球性能最好的、速度最快的、功能最强大的、抗压性最优良的、安全性最佳的Web服务器软件,但是是商业软件,费用比较贵(支持双至强启用超线程需要2200美元),网上面可以下载到Zeus 4.3 for Linux和FreeBSD 4.x的破解版本。国内很多大型论坛,单主机在线上万人的大多使用Zeus,系统消耗比Apache小很多。同时Zeus支持服务器负载平衡,多个主机通过使用Zeus Load Balancer可以实现超级规模站点的支持。
Zeus的站点是 http://www.zeus.com/ 可以免费下载到30天试用版(其实和破解版本的区别只是授权文件)。使用说明参见:
http://support.zeus.com/doc/zws/v4/getting_started.pdf
http://support.zeus.com/doc/zws/v4/user_guide.pdf

[3]关于PHP运行方式的选择

Windows主机需要安装PHP的完整版本,不能使用php.net提供的安装程序来安装,而应该手动安装。如果需要使用Unicode(UTF-8)编码,Windows主机下如果是php4.3.x版本需要单独加载iconv()函数库(需要在php.ini中正确设置extension_dir,比如extension_dir = "C:/php/extensions/"
,同时需要取消;extension=php_iconv.dll一行前面的;号,并将c:\php\dlls\iconv.dll复制到c:\windows\system32目录下。
注意:php5.x版本无需而且不能这样设置),而Linux/FreeBSD主机需要在编译PHP的时候加入iconv的参数(./configure--with-iconv)。
在Windows下面,如果使用IIS,推荐使用ISAPI方式来运行,千万不要使用CGI方式运行。您也可以使用FastCGI方式(需要下载FastCGI的模块并作相当多的配置),这个性能更好一些,如果再同时使用两个加速器(Zend Optimizer、MMCache),测试下来居然可以接近FreeBSD下使用Zend Performance Suite的效果,但是我测试稳定性比较差,当线程超过FastCGI所限制的最大并发线程,某些时候有可能导致FastCGI进程死掉,进而无法访问任何站点,只能重起服务器来解决。
Linux/FreeBSD下面,如果使用Apache作为Web Server,推荐将PHP作为Apache的模块来运行。如果使用Zeus作为Web Server,要求使用FastCGI方式来运行PHP,但是FastCGI有可能出现死掉进程的问题,在停止zeus时,有时候会不能停止成功,使得PIDFILE不能清除,下次再启动时,FastCGI会无法启动。如果遇到bad gateway错误,需要检查PIDFILE是否清除,如果没有则手动清除再重启Zeus。最好的办法是使用crontab,定时自动重启FastCGI。
关于FastCGI的问题,在某些主机下运行很正常,若干个月不会有任何问题。而有些主机却比较频繁,不论是Windows或者Linux/FreeBSD,看运气吧。

[4]关于PHP免费加速器的选择

可以使用的免费加速器主要有Zend Optimizer、Turck MMcache、ionCube PHP Accelerator。
(1)Zend Optimizer
官方站点 http://www.zend.com/store/products/zend-optimizer.php
最新版本 2.5.5
下载地址 http://www.zend.com/store/free_download.php?pid=13
(2)Turck MMCache
官方站点 http://sourceforge.net/projects/turck-mmcache/
最新版本 2.4.6 for PHP v4.3.4/5.0.0b2
下载地址 http://sourceforge.net/project/showfiles.p...ackage_id=68348
需要注意的是PHP最新版本是4.3.9/5.0.2,所以如果您需要在PHP的最新版本下使用Turck MMCache,需要进行单独编译。我在这个主题的附件里面上传了编译好的Turck MMCache v2.4.7 CVS for PHP v4.3.9和Turck MMCache v2.4.7 CVS for PHP v5.0.2两个版本需要的文件,先安装MMCache 2.4.6,然后将我提供的压缩包里面的文件改名为mmcache.dll,替换旧文件即可,注意:这两个文件只适用于Windows主机,如果您需要在Linux/FreeBSD下面使用,需要单独编译MMCache。
但是需要说明的是MMCache for PHP5.0.2的版本,在PHP 5.0.2下面使用存在bug,推荐在PHP5.0.2下暂时不要使用MMCache。
(3)ionCube PHP Accelerator(PHPA)
官方站点 http://www.php-accelerator.co.uk/
最新版本 1.3.3r2 builds for PHP 4.3.0
这个软件只能在Solaris/FreeBSD/Linux下面使用,不支持Windows,而且不支持PHP的最新版本。而Zend Optimizer、Turck MMcache都是支持各种服务器(Windows/Linux/FreeBSD)、各种Web Server(IIS/Apache/Zeus)以及PHP的各种版本的。所以我不推荐使用此软件。

[5]关于PHP收费加速器的选择

可以使用的收费加速器主要有Zend WinEnabler、Zend Performance Suite。
(1)Zend WinEnabler
官方站点 http://www.zend.com/store/products/zend-win-enabler.php
不知道什么原因,Zend官方最近突然将所有与此软件有关的网页全部删除了,这个软件难道不再出售了吗?这是Zend Performance Suite在Windows下面的版本,使用FastCGI方式运行的PHP,估计是稳定性不能保障吧。
(2)Zend Performance Suite
官方站点 http://www.zend.com/store/products/zend-pe...mance-suite.php
最新版本 4.0
这个软件只能用在Linux/FreeBSD下面,支持Apache和Zeus。据称可以提升php程序20倍的速度,但是售价比较昂贵,1875美元起。网上面可以下载到破解版本,不过是3.6.0/3.5.0版,不支持PHP 5.0。Zend Accelerator和早期的Zend Cache的功能都被包含于此套件当中。注意:如果使用此软件对PHP程序进行缓存,则对文件的任何修改都需要重起Web Server才能生效。

[6]关于MySQL的安装

推荐安装MySQL 4.0.x/4.1.x版本,当前最新版本是4.0.22/4.1.17。MySQL4.0以上版本可以使用Query Cache大幅度提升性能(需要在my.ini里面设置)。MySQL4.1以上采用新的协议,速度更提升30%以上,内存占用更少。
对于MySQL4.1.x版本,PHP 5.x在原有mysql扩展之外提供了专有mysqli函数扩展连接MySQL4.1.x版本,这样在MySQL4.1.x下,使用mysqli扩展相对于使用mysql扩展可以提升数十倍的SQL操作速度。极致论坛程序自带的使用的是mysql扩展,我们另外提供了单独出售的极致论坛mysqli扩展模块,您可以选购使用。
对于Windows主机,安装mysqld-nt即可,没必要使用mysqld-max-nt。
注意:如果您在Windows下面运行MySQL 4.0.x,您需要手工对每个数据表执行如下SQL操作,才能确保您的数据库稳定不会出现数据表错误:

Alter TABLE table_name type=MyISAM;

其中table_name是数据表的名称。
对于Linux主机,可以安装glibc,当前最新版本2.3.3,下载地址 http://www.gnu.org/software/libc/libc.html 然后安装里面的LinuxThreads。可以参考 http://dev.mysql.com/doc/mysql/en/Linux.html
对于FreeBSD主机,也可以安装LinuxThreads,就是编译比较麻烦。

From: http://www.tzon.net/index.php?do=showImage&postId=759&ownerId=13&categoryId=86

php.ini 或 php3.ini 是 PHP 在启动时会读取的配置文件。该文件的存放路径为 /usr/local/lib/。在 PHP 3.x 版的配置文件为 php3.ini;而在 PHP 4.x 版改为 php.ini。若 PHP 安装成服务器的模块,则在 Web 服务器启动执行时会读取,之后就不再读取,因此改动配置的话要重新启动 Web 服务器。若使用独立 PHP CGI 方式,则每次都读一次。
要看目前的系统配置,可以用phpinfo()看到。以下为选项配置


php_value name value
配置变量名称和值。本选项需 PHP 4.x 版之后才能使用。

php_flag name on|off
配置标志布尔变量选项。本选项需 PHP 4.x 版之后才能使用。

php_admin_value name value
配置 Apache 的配置文件变量。原来在 .htaccess 的配置改到这个选项配置。本选项需 PHP 4.x 版之后才能使用。

php_admin_flag name on|off
配置布尔变量当标志。本选项需 PHP 4.x 版之后才能使用。

asp_tags boolean
配置 PHP 程序是否解析以 ASP Script 语法 <% %> 的标记 (tag)。本选项在 PHP 3.0.4 之后才可使用。更多的细节可以参考>嵌入方法的部份。

auto_append_file string
配置本选项可以让指定的文件附加在原 PHP 程序后面自动执行。若 PHP 程序中有用到 exit() 函数,则指定的文件不会执行。参数 string 即为指定自动执行的文件。

auto_prepend_file string
配置本选项可以让指定的文件在原 PHP 程序之前自动执行。参数 string 即为指定自动执行的文件。

cgi_ext string
本选项配置 CGI 程序的扩展名。

display_errors boolean
本选项配置是否要将执行的错误信息显示在用户的浏览器上。

doc_root string
配置服务器的文件及 PHP 文件放置的根目录。

engine boolean
本选项需要使用apache的模块方式使用 PHP。可配置是否要使用 PHP 引擎。在 httpd.conf 中加入 php3_engine on/off 亦可配置某目录或某虚拟网站是否要用 PHP 解析器。

error_log string
本选项用来配置错误记录文件。在 UNIX 系统上参数 string 即为文件名。Windows NT 会将记录记在事件检视器的日志之中。Windows 95/98 则不支持系统记录。

error_reporting integer
本选项用来配置系统记录的等级。参数 integer 即为等级的级数标志,可以加在一起,默认值为 7,见下表
级数 说明
1 一般的错误
2 一般的警告
4 解析错误
8 非关键的警告


open_basedir string
本选项用来配置提供 PHP 存取的最底层目录。从该指定目录之下的文件或目录,PHP 程序才能存取。使用本选项主要是为了系统安全性的考虑。参数 string 即为要限制的最底层目录节点。值得注意的是在 UNIX 系统中,若该节点之下的文件或目录有符号链结 (symbolic link),则可能会让使用本选项的目的打折,因此在目录的设计上考虑,也是 Webmaster 的重要任务。默认值是所有文件均可存取。在 PHP 3.0.7 版之后,可以配置多个底层目录。

gpc_order string
配置 GET/POST/COOKIE 三种模块的顺序及规则。参数 string 即为要配置的规则,例如:配置成 "GP" 表示忽视 cookie,并在存取方法 (method) 相同时,以 POST 取代 GET。

ignore_user_abort string
默认值为 Off。用来配置当传输未完成时,用户端断线是要继续处理。

include_path string
为 PHP 程序中 require、include 及 fopen_with_path 等函数的文件搜寻路径。在 UNIX 或 Windows 中的斜线方向不同。

log_errors boolean
指定程序错误时是否要记录在 log 文件中。

magic_quotes_gpc boolean
配置 GET/POST/COOKIE 三种模块的特殊字符,包含单引号、双引号、反斜线、及空字符 (NUL) 是否要自动加入反斜线当溢出字符。

magic_quotes_runtime boolean
配置返回资料是否自动加入反斜线当溢出字符。

magic_quotes_sybase boolean
配置 sybase 资料中单引号要自动加上反斜线当溢出字符。

max_execution_time integer
配置程序最久执行时间。单位是秒。

memory_limit integer
配置程序最多使用多少内存。

short_open_tag boolean
配置是否使用短的 PHP 标记 (<? ?>)。若不使用,则必须要用 <?php 作为程序的开头,若要使程序合乎 XML 的标准则要关闭本功能。

track_errors boolean
打开本选项可使最后的错误信息跟着全局变量 $php_errormsg。

track_vars boolean
打开本选项可让用户输入的字符串自动解析到变量之中,而不用自己处理。

upload_tmp_dir string
指定上传文件临时路径。

user_dir string
指定用户根目录的路径。

warn_plus_overloading boolean
若打开本选项,字符串间就只能用英文的句号 (.) 链接,而不能用加号 (+) 链接字符串。

SMTP string
在 Windows 系列操作系统中,用来指定 SMTP 服务器,供 mail 函数使用。参数 string 为 SMTP 服务器名字。

sendmail_from string
配置 "From: " 字符串供 Windows 系列操作系统使用 mail 函数。

sendmail_path string
配置 sendmail 程序的放置路径。例如 /usr/sbin/sendmail。

safe_mode boolean
配置 PHP 在安全模式下执行。

safe_mode_exec_dir string
配置安全模式程序执行的路径。

debugger.host string
指定远端调试的服务器名称,可以是 IP 或 Domain Name。

debugger.port string
配置远端调试服务器的端口 (port)。

debugger.enabled boolean
配置是否可以为调试模式。

enable_dl boolean
本选项要使用apache模块 (Apache module) 的方式才有效。用来配置 PHP 的函数可否作用。当系统处于安全模式 (safe-mode) 时,本选项 enable 也无法使用 dl() 函数。

extension_dir string
配置动态函数的路径。

extension string
PHP 启动时所要载入的动态扩充功能。

mysql.allow_persistent boolean
配置是否允许 MySQL 数据库持续连接 (persistent connections),会影响函数。

mysql.max_persistent integer
配置每个处理程序最多保持几个 MySQL 持续连接。

mysql.max_links integer
配置每个处理程序最多开几个 MySQL 连接,包括持续连接。

msql.allow_persistent boolean
配置是否允许 mSQL 数据库持续连接 (persistent connections),会影响函数。

msql.max_persistent integer
配置每个处理程序最多保持几个 mSQL 持续连接。

msql.max_links integer
配置每个处理程序最多开几个 mSQL 连接,包括持续连接。

pgsql.allow_persistent boolean
配置是否允许 Postgres 数据库持续连接 (persistent connections),会影响函数。

pgsql.max_persistent integer
配置每个处理程序最多保持几个 Postgres 持续连接。

pgsql.max_links integer
配置每个处理程序最多开几个 Postgres 连接,包括持续连接。

sybase.allow_persistent boolean
配置是否允许 Sybase 数据库持续连接 (persistent connections),会影响函数。

sybase.max_persistent integer
配置每个处理程序最多保持几个 Sybase 持续连接。

sybase.max_links integer
配置每个处理程序最多开几个 Sybase 连接,包括持续连接。

sybct.allow_persistent boolean
配置是否允许 Sybase-CT 数据库持续连接 (persistent connections),默认值是打开的。

sybct.max_persistent integer
配置每个处理程序最多保持几个 Sybase-CT 持续连接。默认值为 -1 表示无限制。

sybct.max_links integer
配置每个处理程序最多开几个 Sybase-CT 连接,包括持续连接。默认值为 -1,表示没有限制。

sybct.min_server_severity integer
配置 Sybase-CT 服务器错误报告的最少笔数。默认值为 10。

sybct.min_client_severity integer
配置 Sybase-CT 客户端错误报告的最少笔数。默认值为 10。

sybct.login_timeout integer
配置 Sybase-CT 最久可以使用的登入时间。默认值为 1 分钟。

sybct.timeout integer
配置 Sybase-CT 的 query 操作时间限制。默认值为无限制。

sybct.hostname string
配置 Sybase-CT 可连接机器名称。默认值不设限

ifx.allow_persistent boolean
配置是否允许 Informix 数据库持续连接 (persistent connections),会影响函数。

ifx.max_persistent integer
配置每个处理程序最多保持几个 Informix 持续连接。

ifx.max_links integer
配置每个处理程序最多开几个 Informix 连接,包括持续连接。

ifx.default_host string
配置 Informix 默认连接的服务器名称,供ifx_connect()或ifx_pconnect()函数使用。

ifx.default_user string
配置 Informix 默认连接的用户帐号,供ifx_connect()或ifx_pconnect( 函数使用。

ifx.default_password string
配置 Informix 默认连接的用户密码,供ifx_connect()或ifx_pconnect() 函数使用。

ifx.blobinfile boolean
配置 Informix 长位类模式,0 表在内存;1 表在文件中。亦可以在 PHP 程序中使用ifx_blobinfile_mode()函数来修改。

ifx.textasvarchar boolean
配置 Informix 文字模式默认值,0 表返回 blob 的代码;1 表返回 varchar 字符串。亦可在 PHP 程序中使用ifx_textasvarchar() 函数来修改配置。

ifx.byteasvarchar boolean
配置 Informix 位组模式默认值,0 表返回 blob 的代码;1 表返回 varchar 字符串。亦可在 PHP 程序中使用ifx_byteasvarchar() 来修改配置。

ifx.charasvarchar boolean
配置 Informix 返回字符串的字尾空格是否要自动去除。

ifx.nullformat boolean
配置 NULL 字段的返回方式,true 表示返回字符串 NULL,false 表格返回字符串 ""。亦可在 PHP 程序中以ifx_nullformat() 修改。

bcmath.scale integer
配置 BC 高精确度函数库的小数点位数。

browscap string
配置浏览器的开文件能力名。

uodbc.default_db string
配置 ODBC 默认连接的数据库名称,供odbc_connect()或odbc_pconnect()函数使用。

uodbc.default_user string
配置 ODBC 默认连接的用户帐号,供odbc_connect()或odbc_pconnect()函数使用。

uodbc.default_pw string
配置 ODBC 默认连接的用户密码,供odbc_connect()或函数使用。

uodbc.allow_persistent boolean
配置是否允许 ODBC 数据库持续连接 (persistent connections),会影响odbc_pconnect()函数。

uodbc.max_persistent integer
配置每个处理程序最多保持几个 ODBC 持续连接。

uodbc.max_links integer
配置每个处理程序最多开几个 ODBC 连接,包括持续连接。
以下和 session 有关的配置值,都在 PHP 4.x 以上的版本方支持。在 php.ini 的配置文件中。


session.save_handler
定义 session 储存资料的文件名称。默认值为 files。

session.save_path
定义 session 储存资料的文件路径。默认值为 /tmp。

session.name
配置 session 所使用的 cookie 名称。默认值为 PHPSESSID。

session.auto_start
配置 session 是否自动打开。默认值为 0 (否)。

session.lifetime
配置 cookie 送到浏览器后的保存时间,单位为秒。默认值为 0,表示直到浏览器关闭。

session.serialize_handler
定义连续/解连续资料的标头,本功能只有 WDDX 模块或 PHP 内部使用。默认值为 php。

session.gc_probability
配置每笔要求回应时的废物蒐集 (gc, garbage collection) 处理机率。默认值为 1。

session.gc_maxlifetime
配置废物被清除前的存活秒数。

session.extern_referer_check
决定参照到客户端的 Session 代码是否要删除。有时在安全或其它考虑时,会配置不删除。默认值为 0。

session.entropy_file
配置 session 代码建立时,使用外部高熵值资源或文件来建立,例如 UNIX 系统上的 /dev/random 或 /dev/urandom。

session.entropy_length
配置 session 从高熵值资源读取的位组数。默认值为 0。

session.use_cookies
配置是否要将 session 变成 cookie 存在用户端。默认值为 1,表是打开本功能。

在开始之前,我们先要复习下热键绑定的方法。顺便说一句,文章中我们使用的Editplus V2.12 中文版本。打开 Editplus,选择工具 -> 参数设置,在弹出的对话框中选择 键盘,选中要绑定的命令,然后把光标移动到 按下新的快捷键 的文本框中,按下你希望的快捷键,如果文本框下边出现的是 这个已分配到"无"的话,说明这个快捷键可用,点击右边的"分配"就完成了热键的绑定了。将自己常用的命令绑定为热键可以很大的提高生产率,多个热键的联合使用会产生令人吃惊的效果,有格斗游戏中必杀技的快感

感谢PHP&MORE杂志,稍有改动

1.建立php的模板,在参数设置里建一个php的模板
一般模板文件其实就是
代码片段:
<?PHP
?>


将其保存为template.php就可以了
然后在参数设置->模板里新建php模板,然后选择那个文件,,这样新建保存都无需在操心

2.添加函数的自动完成功能
我的版本好像没有php的自动完成
可到Editplus的网站下载一个php的acp使用方法是,到参数->设置和语法中,在php中添加这一自动完成
详细设置:http://www.aspid.cn/dev/20060627475.asp

调用里面的剪辑文字库也是一个有趣的办法
将 Editplus 的剪辑库打开,如果你找不到剪辑库,可以按 Alt +Shift + 1, 这样剪辑库会自己出现的。将剪辑库定位到 html 4.0上,现在在右边编辑器里写一个body,然后按F2,是不是很好玩

3添加函数的即时帮助功能
从这里开始,我们要用到Editplus 的用户工具了。Editplus 为我们提供了10 个用户工具组,每组可以包含若干个自定义的用户工具。打开 工具 , 配置用户工具。点击 添加工具 ,选择 HTML 帮助文件,在弹出的对话框中选择php 的chm 格式的手册。然后在 菜单文字 处填上 php 手册,点确定后帮助功能就已经添加好了。

把光标移动在一个函数上函数上,点击 工具 (或者我们可以在视图中构选用户工具栏), php 手册。这时Editplus 会自动打开手册,并定位到你选择的函数的页面。当然,使用快捷键是更方便的方法,快捷键会因为添加的顺序不同而不同,看下菜单就清楚了。看见了么?我是Crtl+2

4.添加PHP 调试功能(这是精华所在哈)
然后我们通过用户工具添加对PHP 的调试功能。点击 工具 , 配置用户工具 , 添加工具。点击 应用程序,在弹出的文件选择框中选择php.exe,然后如图配置。记住要划上下边的 捕获输出,然后点击 输出模式,进行进一步的设置。

在弹出的 输出模式 对话框中,我们要划掉 使用默认输出模式。在正则表达式的文本框中填入图中的正则表达式,并进行相应的设置。这里的正则表达式和PHP 中的是一样的,目的是捕捉出错行的信息,将文件名和行数传递给Editplus,这样我们双击出错信息时,就可以定位到出错的行了。

完成了设置后,回到编辑环境,按下快捷键 Ctrl+1 (你的应该和我的不一样,看看菜单),就可以看见下边的调试结果了,记住,双击出错信息可以定位到行:(哈哈哈哈)

5.使用窗口分列功能,同时编写测试和代码。
在TDD 中,测试通常是和代码同时编写的,我们可以利用Editplus 来让这个过程更方便,打开测试和代码文件,选择 窗口 , 排列方式 ,垂直平铺。这样Editplus 会把两个文件并列起来,我们可以方便地在测试和代码之间切换。

6.利用预览功能随时进行测试
点击"工具"->"参数设置"->"选择工具" ,点击添加 , 可以为你的文件进行定位。就是说,可以自动把放在web 目录下的文件路径,映射成http 开头的web 路径,并传递给Editplus 自带的浏览器。这样我们就不用总是在浏览器和编辑器之间切换了。

完成上边的配置后,将光标移动到测试文件的编辑窗口中,按下 Ctrl+B ,Editplus 会自动弹出对应的执行页面,非常方便。

扩展
知道什么是活学活用吗
我们现在是不是可以用他干好多好多的事情了哈

【1】页面之间无法传递变量 get,post,session在最新的PHP版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到。当然也可以修改自动全局变量为开(php.ini改为reGISter_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。

   【2】Win32下apache2 用get方法传递中文参数会出错:

   test.php?a=你好&b=你也好

   传递参数是会导致一个内部错误

   解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)

   .............

   【3】win32下的session不能正常工作

   php.ini默认的session.save_path = /tmp

   这显然是Linux下的配置,win32下php无法读写session文件导致session无法使用,把它改成一个绝对路径就可以了,例如session.save_path = c:Windows emp

   【4】显示错误信息

   当php.ini的display_errors = On并且error_reporting = E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,如果你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示,解决办法是探测或者屏蔽。

   例如显示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo

   【5】Win32下mail()不能发送电子邮件

   在linux下配置好的sendmail可以发送,在win32下需要调用smtp服务器来发送电子邮件,修改php.ini的SMTP = ip //ip是不带验证功能的smtp服务器(网上很难找到)

   php发送邮件的最好解决方法是用socket直接发送到对方email服务器而不用转发服务器。

   【6】初装的MySQL如果没有设置密码,应该使用update mysql.user set password="yourpassword" where user="root" 修改密码

   【7】header already sent

   这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:1,你在使用HEADER前PRING或者ECHO了2.你当前文件前面有空行3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。!

   【8】更改php.ini后没有变化

   重新启动Web server,比如IIS,Apache等等,然后才会应用最新的设置。

   【9】php在2003上面安装(ISAPI的安装方法恳请高手指教)

   PHP4的php4isapi.dll好像和2003有些冲突,只能用CGI模式安装

   步骤一,先www.php.net 下在一个安装程序,我是装的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安装php-4.2.3-installer.exe之前保证你的IIS6.0启动了,并能够访问。安装好以后,在默认网站-->应用程序配置。

   步骤二:点击 web服务扩展 -->新建web服务扩展。

   步骤三: 扩展名-->php,然后添加

   步骤四:找到php.exe的路径添加上去。

   步骤五: 确定就可以了!

   步骤六: 选择php的服务扩展,然后点击允许。

   【10】有时候sql语句不起作用,对数据库操作失败,最简便的调试方法,echo那句sql,看看变量的值能得到不。

   【11】include和require的区别

   两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出。

   据我测试,win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。或许*nux下情况不同,暂时还没测试。

   如果一个文件不想被包含多次可以使用include_once或require_once## 读取,写入文档数据。

function r($file_name) {
  $filenum=@fopen($file_name,"r");
  @flock($filenum,LOCK_SH);
  $file_data=@fread($filenum,filesize($file_name));
  @fclose($filenum);
  return $file_data;
}
function w($file_name,$data,$method="w"){
  $filenum=@fopen($file_name,$method);
  flock($filenum,LOCK_EX);
  $file_data=fwrite($filenum,$data);
  fclose($filenum);
  return $file_data;
}

   【12】isset()和empty()的区别

   两者都是测试变量用的,但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空。

   如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示,如果一个变量被赋空值,$foo=""或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。

   要注销一个变量,可以用 unset($foo)或者$foo=NULL

   【13】mysql查询语句包含有关键字

   php查询mysql的时候,有时候mysql表名或者列名会有关键字,这时候查询会有错误。例如表名是order,查询时候会出错,简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别,例如select * from `order`

   【14】通过HTTP协议一次上传多个文件的方法

   有两个思路,是同一个方法的两种实现。具体程序还需自己去设计。

   1、在form中设置多个文件输入框,用数组命名他们的名字,如下:

<form action="" method=post>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
</form>

   这样,在服务器端做以下测试:

echo "<pre>";
print_r($_FILES);
echo "</pre>";

   2、在form中设置多个文件输入框,但名字不同,如下:

<form action="" method=post>
<input type=file name=usefile_a>
<input type=file name=usefile_b>
<input type=file name=usefile_c>
</form>

   在服务器端做同样测试:

echo "<pre>";
print_r($_FILES);
echo "</pre>";

摘自:http://68design.net/art/info.aspx?id=4989

作者:luck_mlc 中文PHP论坛

最近无聊将自己PHP环境升了一下级,顺便把过程写下来,希望没有误人子弟

先从各官方网站下了APACHE2.050、PHP5、MYSQL4.0.20、PHPMYADMIN2.57

apache_2.0.50-win32-x86-no_ssl.msi
php-5.0.0-Win32.zip
mysql-4.0.20d-win.zip
phpMyAdmin-2.5.7.zip

操作系统 win2003 系统盘为: D盘

第一步: 安装apache 并配置支持PHP

点击安装文件apache_2.0.50-win32-x86-no_ssl.msi
将apache安装在 D:apache2 目录(随自己喜好)下
将php-5.0.0-Win32.zip 里内容解压到 D:php 里
找到 php目录里的 php.ini-dist 重命名为 php.ini 并拷到 windows目录里(win2k 里为winnt)
如我的php.ini是拷到 D:windows目录
再将php目录里的 php5ts.dll,libmysql.dll 拷到 系统目录(system/system32) 如我的是D:windowssystem里

配置apache里的httpd.conf
打开 D:Apache2confhttpd.conf 这个文件
找到 AddDefaultCharset ISO-8859-1 将其改为 AddDefaultCharset GB2312 (让默认语言编码为简体中文)
找到 DocumentRoot "D:/Apache2/htdocs" 将其改为你的WEB目录(可不改)如我的为 DocumentRoot "D:/website"
找到 DirectoryIndex index.html index.html.var 在后面加入 index.htm index.php

选择安装模式: 模块化模式安装 或 CGI模式安装 (选一样即可)

--------------模块化安装配置------------------------------------
找到 #LoadModule ssl_module modules/mod_ssl.so 这行,在此行后加入一行
LoadModule php5_module d:/php/php5apache2.dll
其中d:/php/php5apache2.dll 为你php目录中php5apache2.dll所在的位置
找到 AddType application/x-gzip .gz .tgz 这行,在此行后加入一行
AddType application/x-httpd-php .php
---------------------------------------------------------------

################# apache 2.2.2 + PHP5.1.4 不能运行的解决办法. #################

问题,使用传统的模块化方法安装PHP5.1.* + apache 2.2.2 后不能启动,
提示:
"Cannot load C:/php/php5apache2.dll into server: The specified module could not be found."

原因:
PHP压缩包里的php5apache2.dll只适用于apache2.0.*

解决方法:
下载 这个文件 并解压.共有三个文件.
vcredist_x86.exe
php5apache2.dll
httpd.exe.manifest

好,开始
1.将 php5apache2.dll 覆盖掉你原来PHP目录下的 php5apache2.dll 文件.
2.将 httpd.exe.manifest 文件复制到你的apache安装目录下的bin文件夹下.
3.双击运行vcredist_x86.exe安装.(如果您的系统里已安装了 .NET framework 2.就可以省掉这一步)
完成!去重启你的apache2.2试试吧.

##################

--------------CGI安装配置--------------------------------------
找到 AddType application/x-gzip .gz .tgz 这行,加入如下即可
ScriptAlias /php/ "d:/php/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php-cgi.exe"
---------------------------------------------------------------

此时PHP环境基本已经配置成功
在WEB根目录(如我的D:website)里建一个名为test.php的文件内容如下
<? echo phpinfo(); ?>
重新启动apache服务
用浏览器打开 http://localhost/test.php
如果可以看到php配置输出信息就OK了

第二步 安装mysql

将mysql安装到指定目录,如我的是d:/mysql 如下载的是非安装的mysql压缩包,直接解压到指定目录就可以了
然后点击D:mysqlinwinmysqladmin.exe这个文件 其中D:mysql是你的mysql安装目录
输入winmysqladmin的初始用户、密码 (注:这不是mysql里的用户、密码)随便填不必在意
确定之后你的右下角任务的启动栏会出现一个红绿灯的图标,红灯亮代表服务停止,绿灯亮代表服务正常,左击这个图标->winnt->install the service 安装此服务
再左击这个图标->winnt->start the service 启动mysql服务

修改mysql数据库的root密码
用cmd进入命今行模式输入如下命令: ( 注: d:mysql 为mysql安装目录)
cd d:mysqlin
mysqladmin -u root -p password 123456
回车出现
Enter password: ( 注:这是叫你输入原密码. 刚安装时密码为空,所以直接回车即可)
此时mysql 中账号 root 的密码 被改为 123456 安装完毕

三、配置php.ini并测试mysql(php.ini为 d:windows下的 php.ini)

找到extension_dir = "./" 改为 extension_dir = "d:/php/ext"
找到
;extension=php_mysql.dll
将';'去掉改为
extension=php_mysql.dll
找到
;session.save_path = "/tmp"
将';'去掉 设置你保存session的目录,如
session.save_path = "D:/php/session_temp";

重启apache服务
在Web根目录下(如 D:website)建立testdb.php文件内容如下:
<?php
$link=mysql_connect('localhost','root','123456');
if(!$link) echo "fail";
else echo "success";
mysql_close();
?>
用浏览器打开http://localhost/testdb.php 如果输出success就OK了

四、phpmyadmin的安装配置

将phpMyAdmin-2.5.7.zip解压到WEB根目录中去,重命名文件夹为phpmyadmin或其它
打开phpmyadmin 目录中的 config.inc.php
找到
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '123456';
分别填上你mysql的用户和密码即可

如不是本地使用,最好加上验证

不知道写得对不对!不过我基本上就是这样配的! 对于学习来讲应该差不多了吧?

有什么错误或漏掉的地方望大家指出批评!

----by luck_mlc

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:jdkjrebinhotspotjvm.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:WINSYSTEMinetsrvbrowscap.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:wintemp ; 在 save_handler 设为文件时传给控制器的参数,
3

; 这是数据文件将保存的路径。
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:

在php5.1.*执行

echo date("Y-m-d H:i:s");


结果是:2006-04-22 07:06:49

而当前时间是:
2006-04-22 15:06:49

正好少了8个小时.

解决方法:

在页头使用date_default_timezone_set()设置我的默认时区为北京时间

@date_default_timezone_set('PRC');


时间和服务器当前时间一样了!

####### 20091215 #######

引用
Note: 自 PHP 5.1.0 起(此版本日期时间函数被重写了),如果时区不合法则每个对日期时间函数的调用都会产生一条 E_NOTICE 级别的错误信息,如果使用系统设定或 TZ 环境变量则还会产生 E_STRICT 级别的信息。


@date_default_timezone_set('Asia/Shanghai');
传递的字符串有要求,只有在有限范围内才生效

参考: List of Supported Timezones
Tags:
分页: 10/11 第一页 上页 5 6 7 8 9 10 11 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐