燕之庐网站建设 - 优质网站设计公司

Posts Tagged ‘apache’

apache

2010/01/29

Apache httpd 发布 2.3.5 alpha 版本

Tags:

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性被广泛 使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。

下载: http://www.apache.org/dist/httpd/httpd-2.3.5-alpha.tar.bz2
依赖: http://www.apache.org/dist/httpd/httpd-2.3.5-alpha-deps.tar.bz2

Changes with Apache 2.3.5

*) Ensure each subrequest has a shallow copy of headers_in so that the parent request headers are not corrupted. Elimiates a problematic optimization in the case of no request body. PR 48359 [Jake Scott, William Rowe, Ruediger Pluem]

*) Turn static function get_server_name_for_url() into public ap_get_server_name_for_url() and use it where appropriate. This fixes mod_rewrite generating invalid URLs for redirects to IPv6 literal addresses. [Stefan Fritsch]

*) mod_ldap: Introduce new config option LDAPTimeout to set the timeout for LDAP operations like bind and search. [Stefan Fritsch]

*) mod_proxy, mod_proxy_ftp: Move ProxyFtpDirCharset from mod_proxy to mod_proxy_ftp. [Takashi Sato]

*) mod_proxy, mod_proxy_connect: Move AllowCONNECT from mod_proxy to mod_proxy_connect. [Takashi Sato]

*) mod_cache: Do an exact match of the keys defined by CacheIgnoreURLSessionIdentifiers against the querystring instead of a partial match. PR 48401.i [Dodou Wang <wangdong.08 gmail.com>, Ruediger Pluem]

*) mod_proxy_balancer: Fix crash in balancer-manager. [Rainer Jung]

*) Core HTTP: disable keepalive when the Client has sent Expect: 100-continue but we respond directly with a non-100 response. Keepalive here led to data from clients continuing being treated as a new request.PR 47087 [Nick Kew]

*) Core: reject NULLs in request line or request headers. PR 43039 [Nick Kew]

*) Core: (re)-introduce -T commandline option to suppress documentroot check at startup. PR 41887 [Jan van den Berg <janvdberg gmail.com>]

*) mod_autoindex: support XHTML as equivalent to HTML in IndexOptions, ScanHTMLTitles, ReadmeName, HeaderName PR 48416 [Dmitry Bakshaev <dab18 izhnet.ru>, Nick Kew]

*) Proxy: Fix ProxyPassReverse with relative URL Derived (slightly erroneously) from PR 38864 [Nick Kew]

*) mod_headers: align Header Edit with Header Set when used on Content-Type PR 48422 [Cyril Bont <cyril.bonte free.fr>, Nick Kew>]

*) mod_headers: Enable multi-match-and-replace edit option PR 47066 [Nick Kew]

*) mod_filter: enable it to act on non-200 responses. PR 48377 [Nick Kew]

网站建设

php

2009/11/21

又一关于apache和mysql组合的问题

Tags: ,

是关于Mysql扩展库的问题

可能是环境配的不对吧?但不知道到底怎么样能支持Mysql扩展库.
在百度上找到的方法都试过了,还是不行.

请各位大大伸出缓手~

Unexpected character in input: ‘\’ (ASCII=92) state=1 in

php

2009/11/13

apache的静态/动态编译在apache+php+mysql+gd中的应用

Tags: , , ,

apache1.3和apache2的静态/动态编译在apache+php+mysql+GD中的应用

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明

本文是在张微波的文章基础上改进而来,原始文章请见:
http://www.5ilinux.com/blog/archives/000010.html

Fedora Core 3服务器中的apache的静态/动态编译以及apache+php+mysql+gd的应用

我想大家有不少都成功实现apache+php+mysql+gd,网上的文章也有不少,但我发现不少文章都是抄来抄去,并且没有说明白编译的方式,有的索性apache1.3的编译方法原封不动的搬过来套在apache2.0,显然误导一些菜鸟。

我今天就以apache+mysql+php说一下静态编译和DSO动态编译的区别,我会分别拿apache1.3.27和apache2.0.46

说明,因为两个版本的编译命令是有所区别的。

系统和所需软件:
Redhat9.0
apache:1.3.27 和 2.0.46
php: 4.3.2
mysql:4.0.13

gd-2.0.33.tar.gzhttp://www.boutell.com/gd/
jpegsrc.v6b.tar.gzhttp://www.ijg.org/
libpng-1.2.7.tar.tarhttp://sourceforge.net/projects/libpng/
zlib-1.2.2.tar.gzhttp://sourceforge.net/projects/zlib/
freetype-2.1.9.tar.gzhttp://sourceforge.net/projects/freetype/

首先来安装mysql

先添加用户:
groupadd mysql
useradd mysql

然后编译mysql

tar zvxf mysql-4.0.13.tar.gz
cd mysql-4.0.13
./configure –prefix=/usr/local/mysql –with-zlib-dir=/usr –with-charset=gbk –sysconfdir=/etc –localstatedir=/var/mysql &&
make &&
make install

安装完成!(注:–with-charset=gbk是使mysql支持中文查询)

然后初始化数据库:

/usr/local/mysql/bin/mysql_install_db

设置权限:

chown -R root.mysql /usr/local/mysql
chown -R mysql.mysql /var/mysql

复制配置文件:

cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

复制启动文件:

cp /usr/local/mysql/share/mysql/mysql.server /usr/local/mysql/share/mysql/mysqld
chmod a+x /usr/local/mysql/share/mysql/mysqld

启动mysql:

/usr/local/mysql/share/mysql/mysqld start

修改密码:初始的root密码是空的

/usr/local/mysql/bin/mysqladmin -u root -p password 1234
enter password:

把密码修改为1234,由于初始密码为空,所以enter password直接回车就行

测试一下新的密码:

mysql -u root -p mysql
enter password:1234

如果顺利的话就能进入mysql。

好了mysql就讲这么多,有什么问题也不要问我,我对mysql不是很熟悉。

然后安装gd

最新的GD库包括了对GIF的支持,所以不要打GIF补丁

http://sourceforge.net/ 好多源代码包可以在上面找到

安装步骤:

先安装zlib,freetype,libpng,jpeg,再装GD

1.装zlib

tar zxvf zlib-1.2.2.tar.gz
cd zlib-1.2.2
./configure
make
make install

2.安装libpng

tar zxvf libpng-1.2.7.tar.tar
cd libpng-1.2.7
cd scripts/
mv makefile.linux ../makefile
cd ..
make
make install
注意,这里的makefile不是用./configure生成,而是直接从scripts/里拷一个

3.安装freetype

tar zxvf freetype-2.1.9.tar.gz
cd freetype-2.1.9
./configure
make
make install

4.安装Jpeg

tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure –enable-shared
make
make test
make install
注意,这里configure一定要带–enable-shared参数,不然,不会生成共享库

5.安装GD

tar zxvf gd-2.0.33.tar.gz
cd gd-2.0.33
./configure –with-png –with-freetype –with-jpeg
make install

好了下面是我们的重头戏,我将分别通过静态和动态DSO编译apache+php

至于什么是静态,什么是DSO动态我这里就不多讲了,本人个人倾向大家用DSO动态编译。

首先是apache1.3.29+php4.3.4的静态编译

apache第一次编译,并不要安装,因为php的编译需要apache至少已经编译过一次
tar zvxf apache_1.3.27.tar.gz
cd apache_1.3.27
./configure –prefix=/usr/local/apache

编译php

tar zvxf php4.3.4.tar.gz
cd php4.3.4
./configure –prefix=/usr/local/php –with-mysql=/usr/local/mysql
–with-apache=../apache_1.3.27 –enable-bcmath –with-zlib –with-gd –with-jpeg-dir –enable-gd-native-ttf –with-ttf –with-freetype-dir –enable-memory-limit –enable-zend-multibyte –disable-ipv6 –disable-path-info-check –with-iconv –with-pear –disable-debug &&
make &&
make install

第二次编译安装apache:
cd ../apache_1.3.29
./configure –prefi=/usr/local/apache –activate-module=src/modules/php4/libphp4.a –enable-module=rewrite &&
make &&
make install

cp ../php4.3.4/php.ini.dist /usr/local/php/lib/php.ini

修改/usr/local/apache/conf/httpd.conf

查找

在此范围添加

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

注意:apache和php的源码包在同一个目录,–with-apache=../apache_1.3.27是指向源码解压的目录

ok!静态编译完成,大家只要启动一下服务器
/usr/local/apache/bin/apachectl start

然后些个php测试页info.php:内容如下

<?php
phpinfo();
?>
正常的话,应该能看到php的信息了,恭喜你静态编译成功!!!

我们再来讲讲DSO动态编译的方法:

首先编译安装apache

tar zvxf apache_1.3.29
cd apache_1.3.29
./configure –prefix=/usr/local/apache –enable-module=so
–enable-module=rewrite –enable-shared=max &&
make &&
make install

so模块用来提供DSO支持的apachehe核心模块,rewrite是地址重写的模块,如果不需要可以不编译
enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块。

然后编译php

tar zvxf php4.3.4.tar.gz
cd php4.3.2
./configure –prefix=/usr/local/php –with-mysql=/usr/local/mysql
–with-apache=../apache_1.3.27 –enable-bcmath –with-zlib –with-gd –with-jpeg-dir –enable-gd-native-ttf –with-ttf –with-freetype-dir –enable-memory-limit –enable-zend-multibyte –disable-ipv6 –disable-path-info-check –with-iconv –with-pear –disable-debug –with-apxs=/usr/local/apache/bin/apxs &&
make &&
make install

然后修改httpd.conf,方法同静态编译的方法

OK,DSO动态编译就完成了,大家应该看出明堂来了吧,中间有什么区别应该看的很清楚了吧!!!

接下来我们讲apache2.0.46+php4.3.2的编译方法,我这里只讲DSO动态编译,静态编译目前好像还不支持。

一样现编译安装apache

tar zvxf httpd-2.0.46.tar.gz

cd httpd-2.0.46

./configure –prefix=/usr/local/apache2 –enable-so
–enable-mods-shared=most &&
make &&
make install

大家注意了–enable-so相当与1.3.27的–enable-module=so,而–enable-mods-shared=most又等同与以前的
–enable-shared=max 这些区别大家要注意了,否则编译错了不要找我

然后还是编译PHP

tar zvxf php4.3.2.tar.gz

./configure –with-apache2=../httpd-2.0.52 –with-mysql=/usr/local/mysql –enable-bcmath –with-zlib –with-gd –with-jpeg-dir –enable-gd-native-ttf –with-ttf –with-freetype-dir –enable-memory-limit –enable-zend-multibyte –disable-ipv6 –disable-path-info-check –with-iconv –with-pear –disable-debug –with-apxs2=/usr/local/apache2/bin/apxs &&
make &&
make install

注意这里是apxs2!!!

修改httpd.conf与1.3.27也有所不同,大家寻找Add Type application/x-tar .tgz 在下面添加

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

另外要显示中文的话,
修改:

AddDefaultCharset gb2312

启动一下apache

/usr/local/apache2/bin/apachectl start

用那个info.php测试一下,应该不会有多大问题哦!!!

好了写了这么多,希望对大家有所帮助!!!

php

2009/11/12

APACHE中 httpd.conf 的中文详解

Tags:

ServerRoot “/Apache”
#可以用绝对路径 e:\web\apache
#ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerRoot定义的路径之下。

PidFile logs/httpd.pid
#PidFile 指定的文件将记录httpd守护进程的进程号,由于httpd能自动复制其自身,因此系统中有多个httpd进程,但只有一个进程为最初启动的进程,它为 其他进程的父进程,对这个进程发送信号将影响所有的httpd进程。PidFILE定义的文件中就记录httpd父进程的进程号

Timeout 300
#Timeout定义客户程序和服务器连接的超时间隔,超过这个时间间隔(秒)后服务器将断开与客户机的连接.

KeepAlive On
#在HTTP 1.0中,一次连接只能作传输一次HTTP请求,而KeepAlive参数用于支持HTTP 1.1版本的一次连接、多次传输功能,这样就可以在一次连接中传递多个HTTP请求。虽然只有较新的浏览器才支持这个功能,但还是打开使用这个选项

MaxKeepAliveRequests 100
#MaxKeepAliveRequests为一次连接可以进行的HTTP请求的最大请求次数。将其值设为0将支持在一次连接内进行无限次的传输请求。事实上没有客户程序在一次连接中请求太多的页面,通常达不到这个上限就完成连接了。

KeepAliveTimeout 15
#KeepAliveTimeout测试一次连接中的多次请求传输之间的时间,如果服务器已经完成了一次请求,但一直没有接收到客户程序的下一次请求,在间隔超过了这个参数设置的值之后,服务器就断开连接。

<IfModule mpm_winnt.c>
ThreadsPerChild 250
MaxRequestsPerChild 0
</IfModule>

Listen 80
#端口,启动模块.下面许多模块只有在LIUNX下才有用
LoadModule access_module modules/mod_access.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_module modules/mod_auth.so
LoadModule dir_module modules/mod_dir.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule setenvif_module modules/mod_setenvif.so

#LoadModule cern_meta_module modules/mod_cern_meta.so
#LoadModule env_module modules/mod_env.so
#LoadModule expires_module modules/mod_expires.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule headers_module modules/mod_headers.so
#LoadModule imap_module modules/mod_imap.so

#LoadModule auth_anon_module modules/mod_auth_anon.so
#LoadModule auth_dbm_module modules/mod_auth_dbm.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule include_module modules/mod_include.so
#LoadModule info_module modules/mod_info.so
#LoadModule isapi_module modules/mod_isapi.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule status_module modules/mod_status.so
#LoadModule unique_id_module modules/mod_unique_id.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule ssl_module modules/mod_ssl.so

#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule userdir_module modules/mod_userdir.so
LoadModule rewrite_module modules/mod_rewrite.so

#ExtendedStatus On

ServerAdmin abc@123.com
#服务器管理员邮箱,在出错,探针中显示

ServerName localhost.domain.com

UseCanonicalName Off
#是否允许对每个访问者的 DNS 域名的反向查询

DocumentRoot “/Apache”
#放网页的目录.这个很重要.
#你设置了,e:\web是目录 而虚拟主机设置了e:\webtwo
#虽然程序还是能运行,但是不在documentroot内的话,程序会有错误
<Directory />
Options FollowSymLinks MultiViews ExecCGI
AllowOverride None
</Directory>

<Directory “/Apache/”>
Options FollowSymLinks MultiViews ExecCGI
AllowOverride None
Order allow,deny
php_admin_value open_basedir /apache/
Allow from all
</Directory>
#以下是关于用户目录配置部分,即用户可以用http://www.xxxx.com/~username的方式来访问自已的网站!
#UserDir /apache/webroot/aaausersfreehost/*/public_html
#<Directory e:/虚拟主机/*/public_html>
# AllowOverride None
# Options MultiViews SymLinksIfOwnerMatch IncludesNoExec ExecCGI
#下面这条指令定义php只能对public_html此目录及其子目录下的文件进行操作.
# php_flag engine off #表示此目录下的PHP文件不被解释执行,限没有PHP权限。
# php_admin_value open_basedir ./
# Order allow,deny
# Allow from all
#</Directory>
#下面这条指令可以把虚拟目录freehost映射到实际路径/apache/webroot/users/下!
#AliasMatch ^/class/([0-9]).html$ /article.php?articleid=
#AliasMatch ^/class/([0-9]+).([0-9a-zA-Z]+)\.html$ /article.php?articleid=&pagenum=

DirectoryIndex index.html index.htm index.php index.cgi bbs.pl index.pl admin.php login.htm login.html login.php
#默然主机头
AccessFileName .htaccess

<Files ~ “^\.ht”>
Order allow,deny
Deny from all
</Files>

TypesConfig conf/mime.types

DefaultType text/plain

<IfModule mod_mime_magic.c>
MIMEMagicFile conf/magic
</IfModule>

#以下是限制主机同时并发连接数
#<IfModule prefork.c>
#ServerLimit 2000
#StartServers 15
#MinSpareServers 15
#MaxSpareServers 20
#MaxClients 850 #最大客户端
#MaxRequestsPerChild 10000 #最大请求数
#</IfModule>

#以下是对单个文件进行访问控制
#<Files ~ “要屏蔽的文件的名称”>
#Order allow,deny
#Allow from 允许IP
#Deny from all
#</Files>

HostnameLookups Off

#EnableMMAP off

#EnableSendfile off

ErrorLog logs/error.log

LogLevel warn

LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”" combined
LogFormat “%h %l %u %t \”%r\” %>s %b” common
LogFormat “%{Referer}i -> %U” referer
LogFormat “%{User-agent}i” agent

CustomLog logs/access.log common

#CustomLog logs/referer.log referer
#CustomLog logs/agent.log agent
#CustomLog logs/access.log combined

ServerTokens Full

ServerSignature Off
#当客户请求的网页并不存在时,服务器将产生错误文档,缺省情况下由于打开了 ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息。

#Alias /class/ “/apache/webroot/phpa” #虚拟目录啦
# <Directory /apache/phpsafe> #对虚拟目录进行权限配置
# Options FollowSymLinks #+MultiViews ExecCGI为有CGI执行权限
# php_admin_value safe_mode 1 #表示此目录下的PHP脚本只能有php_safe下权限
# php_admin_value open_basedir /apache/phpsafe/
# 此句是限制PHP的文件操作只能限于/apache/phpsafe及其子目录下,不能对此目录外的文进行操作
# php_flag engine off
#表示此目录下的PHP脚本不会被解释执行,此选项要求PHP必须以模块方式安装的!
# AllowOverride None
# Order allow,deny
# Allow from all #表示允许任何人从任何地方访问
# </Directory>

#ScriptAlias /cgi-bin/ “E:/Apache2/cgi-bin/”
#<Directory “E:/Apache2/cgi-bin”>
# AllowOverride None
# Options None
# Order allow,deny
# Allow from all
#</Directory>

IndexOptions FancyIndexing VersionSort

#AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
#AddIconByType (TXT,/icons/text.gif) text/*
#AddIconByType (IMG,/icons/image2.gif) image/*
#AddIconByType (SND,/icons/sound2.gif) audio/*
#AddIconByType (VID,/icons/movie.gif) video/*

#AddIcon /icons/binary.gif .bin .exe
#AddIcon /icons/binhex.gif .hqx
#AddIcon /icons/tar.gif .tar
#AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
#AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
#AddIcon /icons/a.gif .ps .ai .eps
#AddIcon /icons/layout.gif .html .shtml .htm .pdf
#AddIcon /icons/text.gif .txt
#AddIcon /icons/c.gif .c
#AddIcon /icons/p.gif .pl .py
#AddIcon /icons/f.gif .for
#AddIcon /icons/dvi.gif .dvi
#AddIcon /icons/uuencoded.gif .uu
#AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
#AddIcon /icons/tex.gif .tex
#AddIcon /icons/bomb.gif core

#AddIcon /icons/back.gif ..
#AddIcon /icons/hand.right.gif README
#AddIcon /icons/folder.gif ^^DIRECTORY^^
#AddIcon /icons/blank.gif ^^BLANKICON^^
#DefaultIcon /icons/unknown.gif

AddDescription “GZIP compressed document” .gz
AddDescription “tar archive” .tar
AddDescription “GZIP compressed tar archive” .tgz

ReadmeName README.html
HeaderName HEADER.html
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

AddEncoding x-compress Z
AddEncoding x-gzip gz tgz

AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw

LanguagePriority zh-CN en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-TW

ForceLanguagePriority Prefer Fallback

#AddDefaultCharset ISO-8859-1
AddDefaultCharset GB2312

AddCharset ISO-8859-1 .iso8859-1 .latin1
AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen
AddCharset ISO-8859-3 .iso8859-3 .latin3
AddCharset ISO-8859-4 .iso8859-4 .latin4
AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru
AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb
AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk
AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb
AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk
AddCharset ISO-2022-JP .iso2022-jp .jis
AddCharset ISO-2022-KR .iso2022-kr .kis
AddCharset ISO-2022-CN .iso2022-cn .cis
AddCharset Big5 .Big5 .big5
# For russian, more than one charset is used (depends on client, mostly):
AddCharset WINDOWS-1251 .cp-1251 .win-1251
AddCharset CP866 .cp866
AddCharset KOI8-r .koi8-r .koi8-ru
AddCharset KOI8-ru .koi8-uk .ua
AddCharset ISO-10646-UCS-2 .ucs2
AddCharset ISO-10646-UCS-4 .ucs4
AddCharset UTF-8 .utf8

AddCharset GB2312 .gb2312 .gb
AddCharset utf-7 .utf7
AddCharset utf-8 .utf8
AddCharset big5 .big5 .b5
AddCharset EUC-TW .euc-tw
AddCharset EUC-JP .euc-jp
AddCharset EUC-KR .euc-kr
AddCharset shift_jis .sjis

#以CGI方式安装PHP
#ScriptAlias “/__php_dir__/” “/apache/cgiphp5/”
#AddType application/x-httpd-php .php4 .php .htm .php3 .inc .fire
#Action application/x-httpd-php “/__php_dir__/php.exe”

#以apache的模块方式运行php
LoadModule php4_module /apache/php/sapi/php4apache.dll
PHPINIDir /apache/php/php.ini
AddType application/x-httpd-php .php .htm .php3
AddType application/x-httpd-php-source .phps

#支持fcgi
#LoadModule fastcgi_module modules/mod_fastcgi.dll
#AddHandler fastcgi-script .fcgi .fpl

AddType application/x-tar .tgz

#AddEncoding x-compress .Z
#AddEncoding x-gzip .gz .tgz

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

AddHandler cgi-script .cgi .pl

#AddHandler send-as-is asis

#AddHandler imap-file map

AddHandler type-map var

#AddType text/html .shtml
#AddOutputFilter INCLUDES .shtml

#ErrorDocument 500 “The server made a boo boo.”
#ErrorDocument 404 /apache/yyfzx/soft
#ErrorDocument 404 “/apache/yyfzx/soft”
#ErrorDocument 402 http://www.example.com/subscription_info.html

BrowserMatch “Mozilla/2″ nokeepalive
BrowserMatch “MSIE 4\.0b2;” nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch “RealPlayer 4\.0″ force-response-1.0
BrowserMatch “Java/1\.0″ force-response-1.0
BrowserMatch “JDK/1\.0″ force-response-1.0

BrowserMatch “Microsoft Data Access Internet Publishing Provider” redirect-carefully
BrowserMatch “^WebDrive” redirect-carefully
BrowserMatch “^WebDAVFS/1.[012]” redirect-carefully
BrowserMatch “^gnome-vfs” redirect-carefully

#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .51web.net
#</Location>

#<Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .51web.net
#</Location>

<IfModule mod_ssl.c>
Include conf/ssl.conf
</IfModule>

#以下是关于虚拟机的配置
NameVirtualHost 218.87.169.209:80
<VirtualHost 218.87.169.209:80>
RewriteEngine On
RewriteRule ^/index.htm$ /index.php
RewriteRule ^/soft/([0-9]+).htm$ /download.php?soft=
RewriteRule ^/sort/([0-9-_]+).htm$ /list.php?list=
RewriteRule ^/sort/index.htm$ /type.php
RewriteRule ^/a-z/([0-9]+).htm$ /az.php?id=
DocumentRoot /apache/mayidown
ServerName mayidown.3322.org
</VirtualHost>
//以 #开头的就是解释用.启动的时候不加载的.我提供了一个虚拟主机给大家参考重写URL功能

网站建设

php, 产业新闻

2009/11/10

Apache十岁:钱非万能 无私贡献促发展

Tags:

中国有句俗话叫做“钱不是万能的”,这一点在由Apache软件基金会(ASF)支持的开源软件项目上体现得尤其明显。

ASF正在庆祝其以非盈利为基础顺利走过10周年,ASF最初只有一个项目,那就是著名的Apache HTTP Web服务器,而时至今日,ASF已经发展到了60多个成功的开源项目。

截至目前,Apache仍然是广受欢迎的HTTP Web服务器,根据市场研究机构Netcraft最新的研究数据显示,有超过42万个活跃网站采用了Apache HTTP Web服务器。

在本月4日举行的ApacheCon大会上,ASF先驱们谈论了他们在开源事业上收获的经验,并认为直到今天ASF仍然有意义,并强调钱并不能买到一切。

有意思的是ASF的竞争对手微软公司去年还给ASF赞助了10万美元,这也说明ASF存在的重要性。但无论是赞助还是捐助,与在ASF中占据的 席位都没有什么联系,最终还是以开发成果来衡量其贡献的。赞助商要想在ASF占据一个席位,唯一办法就是要对ASF做出实际贡献。

开源拥护者Cooper认为,参与开源项目不仅可以提升自己的能力,还可以提升个人价值,ASF成员Ted Leung同意Copper的意见,他说他被IBM聘用后一直工作在一个XML项目上,他离开后IBM将代码捐献给了ASF,Leung说尽管他不再为 IBM工作,但他仍然可以与这些代码打交道,几乎成为IBM和SUN之间的中间人,因为IBM和SUN都在为Apache XML努力做贡献。

Leung说:“我们为什么如此成功其中一个原因就是,我们有一个地方让代表各种不同利益的人能够走到一起,并协同工作”。大多数情况下,人们 信任ASF是公平的,虽然每年有一个不同的公司拥有Apache,从IBM到SUN,再到谷歌,但这基本上就是一个笑话,因为Apache是大家的。

Leung补充道,人们喜欢ASF是因为相信它会公正,公平对待每一个人,会尊重每个人的意见和想法。

Leung说“这就是我们为什么会发展到将近有70个开源项目的原因了,如果人们不相信我们,他们不会找我们,同样,支持ASF的人们不会相信ASF席位是可以花钱买到的”。

产业新闻

2009/11/06

Subversion并入Apache软件基金会

Tags: , ,

开源版本控制和软件结构管理工具Subversion加入了Apache软件基金会,成为ASF管理的超过130个开源项目之一。

Subversion和ASF合作历史悠久,所有的 ASF项目所用的源代码版本控制系统都是Subversion,而Subversion本身也依赖于众多Apache项目,如Apache Portable Runtime (APR)和HTTP Web Server。社区之间的互通有无让双方都获益甚多。Apache软件基金会主席 Justin Erenkrantz对Subversion的加入表示了欢迎。而Subversion的拥有者CollabNet公司仍然会继续托管该项目。

php

2009/10/25

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

Tags: ,

问题,使用传统的模块化方法安装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试试吧.

php

2009/10/23

apache中.htaccess文件的功能写法

Tags:

apache中.htaccess文件的功能写法
- .htaccess文件(或者”分布式配置文件”提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

- 子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。

- .htaccess必须以ASCII模式上传,最好将其权限设置为644。

错误文档的定位

常用的客户端请求错误返回代码:
401 Authorization Required
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
常见的服务器错误返回代码:
500 Internal Server Error

用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:

ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html

一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:

ErrorDocument 错误代码 /目录名/文件名.扩展名

如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子:

ErrorDocument 401 “<body bgcolor=#ffffff><h1>你没有权限访问该页面,请放弃!</h1></body>”

文档访问的密码保护

要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,例如:

zheng:y4E7Ep8e7EYV

这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。

有了授权用户文档,可以在.htaccess中加入如下指令了:

AuthUserFile .htpasswd的服务器目录
AuthGroupFile /dev/null (需要授权访问的目录)
AuthName EnterPassword
AuthType Basic (授权类型)

require user wsabstract (允许访问的用户,如果希望表中所有用户都允许,可以使用 require valid-user)

注,括号部分为学习时候自己添加的注释

拒绝来自某个IP的访问

如果我不想某个政府部门访问到我的站点的内容,那可以通过.htaccess中加入该部门的IP而将它们拒绝在外。

例如:

order allow,deny
deny from 210.21.112.43
deny from 219.146.95
allow from all

第二行拒绝某个IP,第三行拒绝某个IP段,也就是219.146.95.0~219.146.95.255

想要拒绝所有人?用deny from all好了。不止用IP,也可以用域名来设定。

保护.htaccess文档

在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。虽然可以用其他方式做到这点,比如文档的权限。不过,.htaccess本身也能做到,只需加入如下的指令:

<Files .htaccess>
order allow,deny
deny from all
</Files>

URL转向

我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的URL自动转向到新的地址:

Redirect /旧目录/旧文档名 新文档的地址

或者整个目录的转向:

Redirect 旧目录 新目录

改变缺省的首页文件

一般情况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,比如在pmwiki中是pmwiki.php。这种情况下,要用户记住文件名来访问很麻烦。在.htaccess中可以轻易的设置新的缺省文件名:

DirectoryIndex 新的缺省文件名

也可以列出多个,顺序表明它们之间的优先级别,例如:

DirectoryIndex filename.html index.cgi index.pl default.htm

防止盗链

如果不喜欢别人在他们的网页上连接自己的图片、文档的话,也可以通过htaccess的指令来做到。

所需要的指令如下:

RewriteEngine on
RewriteCond % !^$
RewriteCond % !^http://(www.)?phpv.net/.*$ [NC]
RewriteRule .(gif|jpg)$ – [F]

如果觉得让别人的页面开个天窗不好看,那可以用一张图片来代替:

RewriteEngine on
RewriteCond % !^$
RewriteCond % !^http://(www.)?mydomain.com/.*$ [NC]
RewriteRule .(gif|jpg)$ http://www.phpv.net/img_PageNotFound.gif [R,L]

php

2009/10/13

PHP新手上路(五)

Tags: , , ,

建设一个简单交互的网站(一)

PHP的许多特点与其他软件或者工具有关。利用迄今为止我们所学到的PHP知识,我们可以试着建立一个简单交互的网站。利用这一过程我们又可以学到不少东西。好吧,我们现在开始专注于一个典型个人网站的建设。

5.1 计划一个站点

一般一个个人站点包括一个欢迎页面、一个留言本页面、一个书签链接页面、一个计数器、联系信息,甚至还有照片集和一些音乐文件等等。

5.2 用include和require进行模块化

我们看一些用PHP构架的网站,几乎网站每一个页面的PHP文件里都会有include和require嵌入其间。这是因为使用include和 require不但可增强代码的可读性,而且可将站点分成模块来管理。一般来说,对于一个网站上的每个页面肯定会有重复的内容。例如:页面头部的导航条、 广告图标、或边部导航等。可能还在每页的页脚即页面的底部有著作权或一些基于文本的导航条。如果我们要修改一个包含成千上百个页面的大网站上的导航条或是 徽标之类的内容,用我们以往的方法,我们只能遂一对每一页面进行更改。不用我说,大家也能想像到这是一件多么艰巨而痛苦的差事。那么,我们到底有没有更好 的解决方法呢?答案是肯定的。我们可以将重复的内容都放到一个文件中,然后在每一个需要这些内容的页面上用PHP的include和require函数动 态地调用该文件。这样,以后如果我们想对所有页面上的这些复用内容做修改时,就只需要更改包含了这些重复内容的文件。

为了便于大家理解,让我们先来看看include和require的一个简单应用:

HTML的页面开始,也许你会在站点的每页的头部包含它(head.htm)。
<HTML>
<HEAD>
<TITLE> 我的个人主页 </TITLE>
</HEAD>
<BODY>

页面内容(content.htm)。
<H1>
欢迎来我的寒舍,虽然这里现在暂时还没有什么。
</H1>

HTML的页面的结束(trail.htm)
</BODY>
</HTML>

用include和require函数把HTML从PHP中分离出来,将HTML和PHP分成模块:
<?
/*
调用HTML页面的头部
*/
require(\”head.htm\”);
/*
调用HTML页面的内容
*/
require(\”centent.htm\”);
/*
调用HTML页面的尾部
*/
require(\”trail.htm\”);
?>

5.3 让我们从一个标题页面、一个联系信息页面和一个简历页面开始。我们同样需要标准的、通用的页面头部和底部。

标题页面–front.htm
这里我们有一个非常简单的html文件:
<HTML>
<HEAD>
<TITLE>
我的个人主页–欢迎
</TITLE>
</HEAD>
<BODY>
<H1>
我的个人主页
</H1>
<H2>
欢迎
</H2>
<HR>
<P>
欢迎来我的寒舍,虽然这里现在暂时还没有什么。
</P>
<P>
不过我希望马上就可以多起来。
</P>
<HR>
<P ALIGN=\”CENTER\”>
<SMALL> <I>
Copyright ? 我自己,1999
</I> </SMALL>
</P>
</BODY>
</HTML>

联系信息页面–count.htm
同样我们又有了一个简单页面:
<HTML>
<HEAD>
<TITLE>
我的个人主页–联系信息
</TITLE>
</HEAD>
<BODY>
<H1>
我的个人主页
</H1>
<H2>
联系信息
</H2>
<HR>
<P>
你可以通过1-800-PHP-INFO联系我
</P>
<HR>
<P ALIGN=\”CENTER\”>
<SMALL> <I>
Copyright ? 我自己,1999
</I> </SMALL>
</P>
</BODY>
</HTML>
5.4 从HTML到PHP

从上面你可以看出,每个页面有相同的头部和底部。像上面那样每个页面都写入相同的信息在工作量少的时候还可以,但是想象一下当有100多页面且你需要全 部更改其头部或底部时你要花费多大精力?一页一页的手工更改是一件多么冗长无趣的事情啊!所以我们应该为这些页面编写PHP的头部和底部文件,之后我们只 要在每个HTML页面中引用它们就行了。在include和require函数中都包含一个PHP代码的文件,不管该文件的扩展名是什么,它都被当作是 PHP文件。我们将把这些include文件放在一个叫include的子目录下,并取成以.inc为后缀的文件。下面我们就把这些站点的通用内容写进文 件中。

全站通用变量设定:common.inc
<?
// 全站通用变量
$MyEmail = \”phptalk@tnc.org\”;
$MyEmailLink = \”<a href=\’mailto:$MyEmail\’>$MyEmail</a>\”;
$MyName = \”PHP Talk\”;
$MySiteName = $MyName.\”\’s Home Page\”;
?>

通用页面头部:header.inc
<?
// 定义通用页面头部
?>
<HTML>
<HEAD>
<TITLE>
<? echo \”$MySiteName – $title\”; ?>
</TITLE>
</HEAD>
<BODY>
<H1>
<? echo \”$MySiteName\”; ?>
</H1>
<H2>
<? echo \”$title\”; ?>
</H2>
<HR>

通用页面底部:footer.inc
<?
// 通用页面底部
?>
<HR>
<P ALIGN=\”CENTER\”>
<SMALL> <I>
Copyright ? by
<? echo \”$MyName ($MyEmailLink)\”; ?>
, 1999
</I> </SMALL>
</P>
</BODY>
</HTML>

新的页面front.php3:
<?
include(\”include/common.inc\”);
$title = \”Welcome\”;
include(\”include/header.inc\”);
?>
<P>
欢迎来我的寒舍,虽然这里现在暂时还没有什么。
</P>
<P>
不过我希望马上就可以多起来。
</P>
<?
include(\”include/footer.inc\”);
?>

新的count.php3:
<?
include(\”include/common.inc\”);
$title = \”Contact Information\”;
include(\”include/header.inc\”);
?>
<P>
你可以通过1-800-PHP-INFO联系我
</P>
<?
include(\”include/footer.inc\”);
?>

现在你可以体会一下这样安排的好处了。如果你想改动页面的头部或者底部,你只需要改动相应的文件就可以了。如果你要修改你的e-mail地址甚至你的名 字,只要修改common.inc文件就行了。另外值得注意的是你可以把具有任何文件名或者文件扩展名的文件包含进你的文件中,你甚至可以包含其他站点上 的文件。

php

PHP新手上路(四)

Tags: , , , ,

PHP入门

4.1 数据类型

PHP支持整数、浮点数、字符串、数组和对象。变量类型通常不由程序员决定而由PHP运行过程决定(真是好的解脱!)。当然,如果你喜欢的话,你也可以使用cast或者函数settype()将某种类型的变量转换成指定的类型。

数值

数值类型可以是整数或是浮点数。你可以用以下的语句来为一个数值赋值:
$a = 1234; # 十进制数
$a = -123; # 负数
$a = 0123; # 八进制数 (等于十进制数的83)
$a = 0×12; # 十六进制数(等于十进制数的18)
$a = 1.234; # 浮点数”双精度数”
$a = 1.2e3; # 双精度数的指数形式

字符串

字符串可以由单引号或双引号引出的字段定义。注意不同的是被单引号引出的字符串是以字面定义的,而双引号引出的字符串可以被扩展。而且,在双引号字符串中可以使用反斜杠()在字符串中加入转义序列和转换字符。举例如下:

$first = ‘Hello’;
$second = “World”;
$full1 = “$first $second”; # 产生 Hello World
$full2 = ‘$first $second’;# 产生 $first $second
$full3=”01DC studio,.” 2000 copyright.” ” ;

请注意最后一行,如果需要在字符串中使用双引号,可以使用反斜杠字符,象该行语句所示。这里的的反斜杠用来使双引号的功能改变。

可以将字符和数字利用运算符号连接起来。字符被转化成数字,利用其最初位置。在PHP手册中有详细的例子。

数组与哈希表

数组与哈希表以同样的方法被支持。怎样运用取决于你怎样定义它们。你可以用list()或者array()来定义它们,也可以直接为数组赋值。数组的索引从0开始。虽然我在这里没有说明,但是你一样可以轻易的使用多维数组。

// 一个包含两个元素的数组
$a[0] = “first”;
$a[1] = “second”;
$a[] = “third”; // 添加数组元素的简单方法
// 现在$a[2]被赋值为”third”
echo count($a); // 打印出3,因为该数组有3个元素
// 用一个语句定义一个数组并赋值
$myphonebook = array (
“sbabu” => “5348″,
“keith” => “4829″,
“carole” => “4533″
);
// 噢,忘了教长吧,让我们添加一个元素
$myphonebook["dean"] = “5397″;
// 你定义的carale元素错了,让我们更正它
$myphonebook["carole"] => “4522″
// 我还没有告诉你怎样使用数组的相似支持方式吗?让我们看一看
echo “$myphonebook[0]“; // sbabu
echo “$myphonebook[1]“; // 5348

其他一些对数组或哈希表有用的函数包括sort(),next(),prev()和each()。

对象

使用new语句产生一个对象:
class foo
{
function do_foo ()
{
echo “Doing foo.”;
}
}
$bar = new foo;
$bar->do_foo();

改变变量类型

在PHP手册中提到:”PHP不支持(也不需要)直接在声明变量时定义变量类型;变量类型将根据其被应用的情况决定。如果你为变量var赋值为一个字符串,那么它变成了一个字符串。如果你又为它赋了整数值,那么它就变成了整数。”

$foo = “0″; // $foo是字符串(ASCII 48)
$foo ; // $foo是字符串”1″ (ASCII 49)
$foo = 1; // $foo现在是整数(2)
$foo = $foo 1.3; // $foo是一个双精度数(3.3)
$foo = 5 “10 Little Piggies”; // $foo是一个整数(15)
$foo = 5 “10 Small Pigs”; // $foo是一个整数(15)

如果想要强行转换变量类型,可以使用与C语言相同的函数settype()。

4.2 变量与常量

可能你已经注意到,变量都有一个美元符号($)的前缀。所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。
$g_var = 1 ; // 全局范围
function test()
{
global $g_var; // 这样就可以声明全局变量了
}

更先进一些的是变量的变量表示。请参考PHP手册。这在有时会显得很有用。

PHP内置了许多已定义的变量。你也可以用define函数定义你自己的常量,比如define(”CONSTANT”,”value”)。

4.3 运算符

PHP具有C,C 和Java中的通常见到的运算符。这些运算符的优先权也是一致的。赋值同样使用”=”。

算术和字符

以下只有一种运算符是有关字符的:
$a $b :加
$a – $b :减
$a * $b :乘
$a / $b :除
$a % $b :取模(余数)
$a . $b :字符串连接

逻辑和比较

逻辑运算符有:
$a || $b :或
$a or $b :或
$a && $b :与
$a and $b :与
$a xor $b :异或 (当$a或$b为true时为true,两者一样时为false)
! $a :非
比较运算符有:
$a == $b :相等
$a != $b :不等
$a < $b :小于
$a <= $b :小于等于
$a > $b :大于
$a >= $b :大于等于
与C一样PHP也有三重运算符(?:)。位操作符在PHP同样存在。

优先权

就和C以及Java一样!

4.4 控制流程结构

PHP有着与C一样的流程控制。我将在下面大概介绍。

if, else, elseif, if(): endif

if (表达式一)
{
. . .
}
elseif (表达式二)
{
. . .
}
else
{
. . .
}
// 或者像Python一样
if (表达式一) :
. . .
. . .
elseif (表达式二) :
. . .
else :
. . .
endif ;

Loops. while, do..while, for

while (表达式)
{
. . .
}
do
{
. . .
}
while (表达式);
for (表达式一; 表达式二; 表达式三)
{
. . .
}
//或者像Python一样
while (expr) :
. . .
endwhile ;

switch

switch是对多重if-elseif-else结构的最好的替换:
switch ($i)
{
case 0:
print “i equals 0″;
case 1:
print “i equals 1″;
case 2:
print “i equals 2″;
}

break, continue

break中断当前的循环控制结构。
continue被用来跳出剩下的当前循环并继续执行下一次循环。

require, include

就像C中的#include预处理一样。你在require中指定的那个文件将替代其在主文件中的位置。在有条件的引用文件时,可以使用include()。这样就使得你可以将复杂的PHP文件分割成多个文件并且在不同需要时分别引用它们。

4.5 函数

你可以像以下的例子一样定义自己的函数。函数的返回值可以是任何数据类型:
function foo (变量名一, 变量名二, . . . , 变量名n)
{
echo “Example function.n”;
return $retval;
}

所有PHP代码都可以出现在函数定义中,甚至包括对其他函数和类的定义。函数必须在引用之前定义。

4.6 类

利用类模型建立类。可以参考PHP手册中对类的详细解释。
class Employee
{
var $empno; // 员工人数
var $empnm; // 员工姓名

function add_employee($in_num, $in_name)
{
$this->empno = $in_num;
$this->empnm = $in_name;
}

function show()
{
echo “$this->empno, $this->empnm”;
return;
}

function changenm($in_name)
{
$this->empnm = $in_name;
}
}

$sbabu = new Employee;
$sbabu->add_employee(10,”sbabu”);
$sbabu->changenm(”babu”);
$sbabu->show();