这几天写程序遇到的非常奇怪的事

一个cookie值,换文件名,换目录,把其它文件中可以执行的很顺利的语句拷贝过来,怎么也写入不了值,提示:Warning:  Cannot modify header information – headers already sent by (output started at /hsphere/local/home/ledomih/himodel.com/en/agent/ll.php:1) in /hsphere/local/home/ledomih/himodel.com/en/agent/ll.php on line 9

   NND,怪事,一连3天,差点就投降了!!最后差点就要砸电脑的情况下发现了问题了。

  刚开始是这么想的,难道语句错误了?不对啊,写了几百上千遍的语句都是这么写的啊,都很正常,而且把这些语句放到其它文件中,可以顺利执行啊!

  后来想,是不是目录或文件名不行呢?换,换了,还是一样,同样的结果。

  那把其它可以顺利执行的语句拷贝过来,看看是不是还是一样?结果:一样,不行!!

  即将失去信心的时候,发现,一样的程序,在另外一个文件中,文件大小比本文件少了0.3B,后来一想,出错的这个文件自始至终没有换过,那把这些语句拷贝重新建个文件,顺利执行!检查所有的文件,最后竟然不知道到底什么地方有输出,难道,在程序的底层,我看不到代码的地方,还有什么输出??

  怪事,怪事!(可能跟我在设计的时候写入一个断点有关,不过后来我又去掉了啊,存心捉弄我呢!)

查看端口

在Windows 2000/XP/Server 2003中要查看端口,可以使用Netstat命令:

依次点击“开始→运行”,键入“cmd”并回车,打开命令提示符窗口。在命令提示符状态下键入“netstat -a -n”,按下回车键后就可以看到以数字形式显示的TCP和UDP连接的端口号及状态。

小知识:Netstat命令用法
命令格式:Netstat -a -e -n -o -s

-a 表示显示所有活动的TCP连接以及计算机监听的TCP和UDP端口。

-e 表示显示以太网发送和接收的字节数、数据包数等。

-n 表示只以数字形式显示所有活动的TCP连接的地址和端口号。

-o 表示显示活动的TCP连接并包括每个连接的进程ID(PID)。

-s 表示按协议显示各种连接的统计信息,包括端口号。

关闭/开启端口
在介绍各种端口的作用前,这里先介绍一下在Windows中如何关闭/打开端口,因为默认的情况下,有很多不安全的或没有什么用的端口是开启的,比如Telnet服务的23端口、FTP服务的21端口、SMTP服务的25端口、RPC服务的135端口等等。为了保证系统的安全性,我们可以通过下面的方法来关闭/开启端口。

关闭端口
比如在Windows 2000/XP中关闭SMTP服务的25端口,可以这样做:首先打开“控制面板”,双击“管理工具”,再双击“服务”。接着在打开的服务窗口中找到并双击“Simple Mail Transfer Protocol (SMTP)”服务,单击“停止”按钮来停止该服务,然后在“启动类型”中选择“已禁用”,最后单击“确定”按钮即可。这样,关闭了SMTP服务就相当于关闭了对应的端口。

开启端口
如果要开启该端口只要先在“启动类型”选择“自动”,单击“确定”按钮,再打开该服务,在“服务状态”中单击“启动”按钮即可启用该端口,最后,单击“确定”按钮即可。

提示:在Windows 98中没有“服务”选项,你可以使用防火墙的规则设置功能来关闭/开启端口

PHP时间函数

PHP中的时间函数有这么些: 
(1)date 
用法: date(格式,[时间]); 
如果没有时间参数,则使用当前时间. 格式是一个字符串,其中以下字符有特殊意义: 

U 替换成从一个起始时间(好象是1970年1月1日)以来的秒数 

Y 替换成4位的年号. 
y 替换成2位的年号. 
F 替换成月份的英文全称. 
M 替换成月份的英文简称. 
m 替换成月份数. 
z 替换成从当年1月1日以来的天数. 
d 替换成日数. 
l 替换成星期几的英文全称. 
D 替换成星期几的英文简称. 
w 替换成星期几(数字). 
H 替换成小时数(24小时制). 
h 替换成小时数(12小时制). 
i 替换成分钟数. 
s 替换成秒数. 
A 替换成”AM”或”PM”. 
a 替换成”am”或”pm”. 
S 替换成序数字后缀,例如:”st”,”nd”,”rd”,”th”. 

函数返回作过了替换的格式串. 
  
(2)getdate(时间) 
返回一个哈希表,各下标是: 
“seconds” — 秒数 
“minutes” — 分数 
“hours” — 小时数 
“mday” — 日数 
“mon” — 月份数 
“year” — 年号 
“yday” — 1月1日以来的天数 
“weekday” — 星期几,英文全称 
“month” — 月份,英文全名 
(3)gmdate 

与date类似,但先将时间转换成格林威治标准时. 
  
(4)mktime 

用法: 
mktime(小时数,分数,秒数,月,日,年); 返回一个时间值,可用于其他函数. 

  
(5)time 

用法: 
time(); 返回1970年1月1日零点以来的秒数. 

  
(6)microtime 
用法: 
microtime(); 返回一个字符串,用空格分成两部分,后一部分相当于time() 
的返回值,前一部分是微秒数. 

(7)checkdate 
checkdate(月,日,年); 返回逻辑真或逻辑假. 如果: 

年在1900和32767之间(包括1900与32767); 
月在1到12之间; 
日在该月的允许日数范围内(考虑了闰年); 

则返回逻辑真. 
  

(8)set_time_limit 
用法: 

set_time_limit(秒数); 
规定从该句运行时起程序必须在指定秒数内运行结束, 超时则程序出错退出.

apache虚拟主机邦定多个ip

一般的虚拟主机的用户有以下问题: 

apache虚拟主机中一般的虚拟主机都是邦定了一个IP地址,机遇名称的虚拟主机好像也只允许邦定一个IP 

如果有一台机器上面有两个IP地址,而域名也解析到了这两个IP上,即域名解析到任何一个IP的时候,都是解析到这台机器上,那么是不是必须得建立两个虚机呢?有没有办法合并到一个当中? 

NameVirtualHost 1.2.3.4 
NameVirtualHost 2.2.3.4 

<VirtualHost 1.2.3.4> 
DocumentRoot /web/www/ 
ServerName xxx.cn 
DirectoryIndex index.html 
</VirtualHost> 
<VirtualHost 2.2.3.4> 
DocumentRoot /web/www/ 
ServerName xxx.cn 
DirectoryIndex index.html 
</VirtualHost> 

问题就是,有没有办法合并到一个当中呢?这样写两个很麻烦! 

解决方法: 

NameVirtualHost * 

<VirtualHost *> 
DocumentRoot /web/www/ 
ServerName xxx.cn 
DirectoryIndex index.html 
</VirtualHost>

如何修改mysql数据文件存储位置

很简单。 
FreeBsd主机上的mysql安装的时候数据库文件是放在/var/db/mysql下的, 

在linux主机上的默认存储位置为:/var/lib/mysql/下, 
如果想更换mysql的数据文件的存储位置,则 

freebsd下: 

#ds /usr/local/libexec/mysqld stop(停止mysql) 
#ds mkdir /other/db(建立新的数据文件目录,也可以直接移动过来) 
#ds mv /var/db/mysql /other/db(移动数据文件) 
#ds ln -s /other/db/mysql /var/db/mysql(建立数据文件的软链接) 
#ds /usr/local/libexec/mysqld start(启动mysql) 

OK! 

linux下: 

(linux下经过测试,可以不用停止musql而直接操作,不过如果是经常更新的数据库还是先停止的好,停止的方法在此就不介绍了!) 

# mkdir /other/db(建立新的数据文件目录,也可以直接移动过来) 
# mv /var/db/mysql /other/db(移动数据文件) 
# ln -s /other/db/mysql /var/db/mysql(建立数据文件的软链接) 

如果您的操作用户不是mysql,例如root用户操作,那可能mysql对新建立的数据文件夹没有读取权限,还有chown,或者是chgrp,chmod才可以! 

以上说了那么多,其实就是建立一个软链接的事,自己可以多试试,有问题欢迎到论坛提出:http://bbs.21e.cn/ 

数据文件夹可以是整个mysql的数据文件夹,也可以是单个的mysql数据库文件夹,这样就大大的方便了,一台主机上多个虚拟主机的用户管理备份数据库,而不用管理员挨个备份,转移到用户自己的目录下,用户自己备份即可!

apache 限制某些目录不能用php

apache 限制某些目录不能用php有很多中方法,可以设置php.ini和apache的配置信息都可以,下面简单介绍如下: 

php.ini中如下代码段 

引用文字:
——————————————————————————–
 
safe_mode = On 
; By default, Safe Mode does a UID compare check when  
; opening files. If you want to relax this to a GID compare,  
; then turn on safe_mode_gid.  
safe_mode_gid = Off  

; When safe_mode is on, UID/GID checks are bypassed when  
; including files from this directory and its subdirectories.  
; (directory must also be in include_path or full path must  
; be used when including)  
safe_mode_include_dir =  

; When safe_mode is on, only executables located in the safe_mode_exec_dir  
; will be allowed to be executed via the exec family of functions.  
safe_mode_exec_dir =  

; open_basedir, if set, limits all file operations to the defined directory  
; and below. This directive makes most sense if used in a per-directory  
; or per-virtualhost web server configuration file.  
;  
open_basedir =
——————————————————————————–

open_basedir 用来指定只在某一个目录中执行PHP 

如果不需要开放PHP权限的目录,在PHP的 Apache-specific Functions 章节中有如下介绍: 

 The behaviour of the Apache PHP module is affected by settings in php.ini. Configuration settings from php.ini may be overridden by php_flag settings in the server configuration file or local .htaccess files. 

示例为: 
php_flag engine off 

engine boolean 

    This directive is really only useful in the Apache module version of PHP. It is used by sites that would like to turn PHP parsing on and off on a per -directory or per-virtual server basis. By putting engine off in the appropriate places in the httpd.conf file,  PHP can be enabled or disabled.  

因此,只需在不需要PHP权限的目录或者虚拟主机设置段(目录为<Directory>,虚拟主机为<VirualHost>中加上 
php_flag engine off即可。 
即修改http.conf中的虚拟主机配置段,在特定目录<Directory>,或者说整个主机<VirualHost>段中加上php_flag engine off即可。 

以上方法,第二种比较简单。

解决windows文件夹不显示左侧提示信息

通常,我们使用的windows都是默认显示了文件夹的左侧的信息提示区,即在文件夹的左侧有文件夹的信息提示,当点击文件时,显示文件的大小等属性。通常这样是很方便的,当然默认的是使用的web编辑器的标准模版,你也可以选择使用其他的模版,当使用其他的模版时,如果出现类似以下情况,同样可以解决!  

有时候因为病毒,杀毒软件等或者是人工,误删除了Folder.htt这个文件后,打开文件夹的时候就不再显示左侧信息提示区域了。 

解决的办法是,在文件夹窗口中点击右健,选择 “自定义文件夹”,默认选择下一步,下一步,当然下一步的时候你可以选择不同的选项,我们只说默认的选项。最后确定,就可以显示左侧信息提示区域了! 

但是,这样每个文件夹都得如此重复,很麻烦,有没有办法直接一步到位的解决呢,有! 

随便找一个文件夹,(必须是文件夹,在我的电脑的根,目录没有此选项,例如:C:webwww.21e.cn)按照以上操作步骤操作,然后在文件夹的菜单栏选择,工具》文件夹选项》查看中去掉隐藏受保护的操作系统文件(推荐)前的√,确定,这时,你可以看到一个名为Folder Settings 的文件夹(注意,一定要在你操作过自定义文件夹的文件夹中。),文件夹中有Folder.htt这个文件,拷贝它到c:winntweb下 
当然,如果你是其他的操作系统,例如xp,他就在c:windowsweb下了,然后在工具》文件夹选项》查看中选择隐藏受保护的操作系统文件(推荐)前的√就可以了! 

这时,所有的文件夹,都可以显示了!问题解决!我只在xp和2000中测试过,其他的系统还没有测试,不过应该类似。

Apache服务器或空间防盗链功能实现

说明:REFERER验证来源是不安全的东西,据RFC,自己写一段HEADER,里边加上一个假的REFERER就行了(socket打开再写入)。 

首先要确认你的服务器或空间的服务器解译引擎为Apache2服务器(IIS服务器请参看其他文章) 
还有支持.htaccess客户设置文件, 
如果你有自己的服务器就请先对httpd.conf 文件做以下修改 
找到:#LoadModule rewrite_module modules/mod_rewrite.so 
把前面的 # 给去掉,找到<Directory>中的AllowOverride None 改为 AllowOverride All 
重启Apache2服务器 

建立一个 .htaccess 文件了,其 .htaccess 文件内容为 

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://21e.cn/.*$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://21e.cn$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://www.21e.cn/.*$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://www.21e.cn$ [NC] 
RewriteRule .*.(jpg|jpeg|gif|png|bmp|rar|zip|exe)$ http://21e.cn/err.html [R,NC] 

(当中的err.html可以修改为err.jpg等信息,自己随便) 
其中网址要改为你的: 
  (jpg|jpeg…):就是要保护文件的扩展名(以|分开),也就是说以这些为扩展名的文件只有通过上面设定的网址才可以访问。 
 err.html,重定义地址,只要不是正确来访,就定义到该地址! 

把该文件上传到你网站的根目录,OK,搞定,可以防盗连了! 

该测试在windows+apache下也已经通过,如果windows不能上传.htaccess文件,就把它修改成htaccess.txt测试一下!我没有测试,不过一定可以通过!!祝你成功!~

apache服务器显示乱码的问题

apache服务器显示中文简体,或者是繁体乱码的问题解决方法: 

共有三种方法: 
方法一: 
AddDefaultCharset ISO-8859-1 改为 AddDefaultCharset off 
注意:推荐使用这种方法,好处是让浏览器来控制显示的语言,进行自动的选择,而不仅仅的局限于某一种语言! 

使用:<meta http-equiv=”Content-Type” content=”text/html; charset=GB2312″> 
来定义网页语言! 

方法二: 
AddDefaultCharset GB2312 —–这里注意,要求大写的一定是大写 
这个是把所有的都默认成中文简体,遇到繁体的时候,必须手动修改浏览器才能正常显示!当然定义繁体的时候也要手动修改为简体,不是很方便,不过对语言很单一的网站来说,可以使用! 

方法三: 
如果使用php,也可以定义php的默认语言. 

php.ini中: 
;default_charset = “gb2312″ 
注意这里是注释掉此行,做了以上修改,目的是为让浏览器根据网页 
头中的charset来自动选择语言,这样就可以在同台服务器上提供 
多种语言的网页服务。 

记住:所做修改后,要重起服务器!祝成功!~

linux服务器配置--vsftpd+pam_mysql

由于以前看到很多文章介绍VSftpd的安装,如法炮制,总是有些地方出问题,本文将可能出现问题的地方加以补充,希望能对你有些用处,由于本人也是初学,可能有些不到的地方,请谅解,恳请指出!可以到http://www.21bbs.cn/    给我留言!或者是发邮件到ecto@163.com   告知,谢谢! 

详细安装配置文件请参照:http://bbs.21e.cn/ibbs.dll?bbsdisp?t_id=53532&bp=1&bt=0 

本文将着重介绍:pam_mysql虚拟用户的实现以及可能出现的问题 

安装pam_mysql是经常出现以下错误: 

[root@eking-linux pam_mysql]# make 
mkdir -p ./dynamic 
gcc -O2 -Dlinux -DLINUX_PAM -ansi -D_POSIX_SOURCE -Wall -Wwrite-strings -Wpointer-arith -Wcast-qual -Wcast-align -Wtraditional -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wshadow -pedantic -fPIC -DPAM_DYNAMIC -c pam_mysql.c -o dynamic/pam_mysql.o 
make: gcc: Command not found 
make: *** [dynamic/pam_mysql.o] Error 127 

解决办法: 
用以下命令查看: 
[root@eking-linux RPMS]# rpm -qa |grep mysql 
mod_auth_mysql-20030510-1.ent 
libdbi-dbd-mysql-0.6.5-5 
mysql-3.23.58-1 
mysql-bench-3.23.58-1 
mysql-server-3.23.58-9 
php-mysql-4.3.2-11.ent 
mysql-devel-3.23.58-1 

其中的 
mysql-devel-3.23.58-1 
mysql-server-3.23.58-9 
mysql-3.23.58-1 
必须安装另外同样使用如上命令: 
[root@eking-linux RPMS]# rpm -qa |grep gcc 
查看本机是否安装gcc编译工具,如果没有安装,直接从安装盘中安装就可以! 

因为pam_mysql安装需要gcc编译工具,所以,必须安装gcc才能安装pam_mysql 

安装后设置方法和前面详细安装配置的文章一样,即可顺利实现: 
VSftpd+mysql的虚拟用户认证+个人目录限制等功能!