Tunning Apache
Apache几目前Internet上使用最为广泛的Web服务器。它具有比商业Web服务器不遑多让的功能与速度,同时安装与设置也十分简单,正是这些特性让它成为市场占有率最高的Web服务器软件。不过Apache安装简单,并不意味着简单地安装就可以适用于绝大多数应用环境,在高负荷的Web站点,Apache还需要进行调整、优化......
优化方法
Apache的配置文件是httpd.conf。Windows下该文件位于Apache安装目录的Conf子目录下,RedHat Enterprise Linux AS 3.0 Update 2位于/etc/httpd/conf。通过调整该文件的某些参数,可以优化Apache的运行效率。
为了验证后文Apache参数的调整是否起作用,我们通常用Apache附带的ab(Apache Bench)对其进行压力测试。
ab最常用的语法格式是这样的:
ab -n XXX -c YYY -k http://hostname.port/path/filename
其中:
-n XXX:
表示最多进行XXX次测试。也就是下载filename文件XXX次。
-c YYY:
客户端并发连接个数。
-k:
启用HTTP KeepAlive功能。默认不启用KeepAlive功能。
Apache几目前Internet上使用最为广泛的Web服务器。它具有比商业Web服务器不遑多让的功能与速度,同时安装与设置也十分简单,正是这些特性让它成为市场占有率最高的Web服务器软件。不过Apache安装简单,并不意味着简单地安装就可以适用于绝大多数应用环境,在高负荷的Web站点,Apache还需要进行调整、优化......
优化方法
Apache的配置文件是httpd.conf。Windows下该文件位于Apache安装目录的Conf子目录下,RedHat Enterprise Linux AS 3.0 Update 2位于/etc/httpd/conf。通过调整该文件的某些参数,可以优化Apache的运行效率。
为了验证后文Apache参数的调整是否起作用,我们通常用Apache附带的ab(Apache Bench)对其进行压力测试。
ab最常用的语法格式是这样的:
ab -n XXX -c YYY -k http://hostname.port/path/filename
其中:
-n XXX:
表示最多进行XXX次测试。也就是下载filename文件XXX次。
-c YYY:
客户端并发连接个数。
-k:
启用HTTP KeepAlive功能。默认不启用KeepAlive功能。
一、文件系统
在fstab里加入noatime,如
#cat /etc/fstab
/dev/sda1 /home ext3 noatime,defaults 1 2
reboot或者重新mount生效
二、Tcp优化
在/etc/sysctl.conf里加入
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 3
net.ipv4.tcp_syncookies = 1 #启用syncookies
net.ipv4.tcp_max_syn_backlog = 8192 #定义backlog队列容纳的最大半连接数
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
[color=blue:b6bef7e40f]老实说,对于sysctl.conf究竟能不能用起来还真不知道,因为我是没用起来,虽然内核里面是支持的 = =b[/color:b6bef7e40f]
三、虚拟内存优化
/etc/sysctl.conf
vm.lower_zone_protection = 100
四、I/O调度器
在grub.conf的相应启动选项里加入elevator=deadline,如:
kernel /vmlinuz-2.6.6 ro root=/dev/sda6 elevator=deadline
这里用了Deadline的I/O调度器,它比系统默认的AnticipatoryI/O调度器更为小巧,在数据吞吐量非常大的数据库系统中表现得更有优势。
五、内核源代码参数修改
修改/usr/src/linux/include/linux/posix_types.h
#define __FD_SETSIZE 1024 65536
设置fd_set支持的最大数量
修改/usr/src/linux/include/linux/fs.h
#define INR_OPEN 1024 65536
#define NR_FILE 8192 65536
#define NR_RESERVED_FILES 10 128
设置最大打开文件数量(TCP连接数量)
修改/usr/src/linux/include/net/tcp.h
#define TCP_TIMEWAIT_LEN (60*HZ) 1*HZ
#define TCP_SYNACK_RETRIES 5 3
设置在backlog队列里的半连接的重试次数,每次都会花相应的时间,本质上
也是减少重试时间
make menuconfig中,去掉没用的选项,打开以下选项的开关:
High Memory Support (支持4GB以上内存)
Symmetric multi-processing support (支持多CPU)
TCP syncookie support (可以防DOS)
设置文件打开数等的其他方法(好处就是可以不重新编译内核)
在 /etc/init.d/sshd里加入(统一加在. /etc/rc.d/init.d/functions行后面)
[code:1:b6bef7e40f]ulimit -n 65535 >/dev/null 2>&1
ulimit -u 16384 >/dev/null 2>&1[/code:1:b6bef7e40f]
重起sshd:nohup /etc/init.d/sshd restart &
BTW:其实limits.conf不好,因为他需要root su - user遗传给普通用户
如果直接远程登陆是没效果的
六、apache
1、安装:采用worker线程工作模式
[code:1:b6bef7e40f]./configure --prefix=/prefix
--enable-mods-shared=all
--enable-deflate
--with-mpm=worker[/code:1:b6bef7e40f][color=blue:b6bef7e40f]chmod +s /prefix/bin/httpd [/color:b6bef7e40f]#允许普通用户也可以启动apache
2、配置:httpd.conf
[code:1:b6bef7e40f]Timeout 60
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 5
StartServers 3
MaxClients 3200 #支持3200个客户端哦
ServerLimit 32
MinSpareThreads 50
MaxSpareThreads 250
ThreadLimit 200
ThreadsPerChild 100
MaxRequestsPerChild 0
#上面的几个参数对机器要求比较高,如果是比较差的机器,每台机1000个连接最多了,你可能要重新设置参数,我的机器是DELL 2850
UseCanonicalName Off
HostnameLookups Off
ServerSignature Off[/code:1:b6bef7e40f]
备注:
要apache支持3200个客户端,默认最大支持1024(64*16)个客户端,所以必须修改apache的源代码树下的server/mpm/worker/worker.c
把 #define DEFAULT_THREAD_LIMIT 64 --> 128 #每个子进程中包含的线程数
#define DEFAULT_SERVER_LIMIT 16 --> 32 #最大的子进程总数
注意,不要把这两个值设得太高,超过系统的处理能力,那就事与愿违了
现在我的机子能承受每天350W的访问量,高峰期的load最多到2左右
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients
大家可以根据自己的实际情况调试一下的。祝大家愉快。 :)
在fstab里加入noatime,如
#cat /etc/fstab
/dev/sda1 /home ext3 noatime,defaults 1 2
reboot或者重新mount生效
二、Tcp优化
在/etc/sysctl.conf里加入
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 3
net.ipv4.tcp_syncookies = 1 #启用syncookies
net.ipv4.tcp_max_syn_backlog = 8192 #定义backlog队列容纳的最大半连接数
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
[color=blue:b6bef7e40f]老实说,对于sysctl.conf究竟能不能用起来还真不知道,因为我是没用起来,虽然内核里面是支持的 = =b[/color:b6bef7e40f]
三、虚拟内存优化
/etc/sysctl.conf
vm.lower_zone_protection = 100
四、I/O调度器
在grub.conf的相应启动选项里加入elevator=deadline,如:
kernel /vmlinuz-2.6.6 ro root=/dev/sda6 elevator=deadline
这里用了Deadline的I/O调度器,它比系统默认的AnticipatoryI/O调度器更为小巧,在数据吞吐量非常大的数据库系统中表现得更有优势。
五、内核源代码参数修改
修改/usr/src/linux/include/linux/posix_types.h
#define __FD_SETSIZE 1024 65536
设置fd_set支持的最大数量
修改/usr/src/linux/include/linux/fs.h
#define INR_OPEN 1024 65536
#define NR_FILE 8192 65536
#define NR_RESERVED_FILES 10 128
设置最大打开文件数量(TCP连接数量)
修改/usr/src/linux/include/net/tcp.h
#define TCP_TIMEWAIT_LEN (60*HZ) 1*HZ
#define TCP_SYNACK_RETRIES 5 3
设置在backlog队列里的半连接的重试次数,每次都会花相应的时间,本质上
也是减少重试时间
make menuconfig中,去掉没用的选项,打开以下选项的开关:
High Memory Support (支持4GB以上内存)
Symmetric multi-processing support (支持多CPU)
TCP syncookie support (可以防DOS)
设置文件打开数等的其他方法(好处就是可以不重新编译内核)
在 /etc/init.d/sshd里加入(统一加在. /etc/rc.d/init.d/functions行后面)
[code:1:b6bef7e40f]ulimit -n 65535 >/dev/null 2>&1
ulimit -u 16384 >/dev/null 2>&1[/code:1:b6bef7e40f]
重起sshd:nohup /etc/init.d/sshd restart &
BTW:其实limits.conf不好,因为他需要root su - user遗传给普通用户
如果直接远程登陆是没效果的
六、apache
1、安装:采用worker线程工作模式
[code:1:b6bef7e40f]./configure --prefix=/prefix
--enable-mods-shared=all
--enable-deflate
--with-mpm=worker[/code:1:b6bef7e40f][color=blue:b6bef7e40f]chmod +s /prefix/bin/httpd [/color:b6bef7e40f]#允许普通用户也可以启动apache
2、配置:httpd.conf
[code:1:b6bef7e40f]Timeout 60
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 5
StartServers 3
MaxClients 3200 #支持3200个客户端哦
ServerLimit 32
MinSpareThreads 50
MaxSpareThreads 250
ThreadLimit 200
ThreadsPerChild 100
MaxRequestsPerChild 0
#上面的几个参数对机器要求比较高,如果是比较差的机器,每台机1000个连接最多了,你可能要重新设置参数,我的机器是DELL 2850
UseCanonicalName Off
HostnameLookups Off
ServerSignature Off[/code:1:b6bef7e40f]
备注:
要apache支持3200个客户端,默认最大支持1024(64*16)个客户端,所以必须修改apache的源代码树下的server/mpm/worker/worker.c
把 #define DEFAULT_THREAD_LIMIT 64 --> 128 #每个子进程中包含的线程数
#define DEFAULT_SERVER_LIMIT 16 --> 32 #最大的子进程总数
注意,不要把这两个值设得太高,超过系统的处理能力,那就事与愿违了
现在我的机子能承受每天350W的访问量,高峰期的load最多到2左右
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients
大家可以根据自己的实际情况调试一下的。祝大家愉快。 :)
Apache 1.3 限制并发连接
由于网站内容有很多下载,而大家一般使用flasget下载,一般使用多线程,同时有很多人在大量下载资料的话,就会形成并发连接饱和,后面的人就无法下载使用了。
这个问题一直困扰我们。
解决的思路应该有两个方面,一个是限制单ip的并发连接。一个是增加服务器并发连接的容量。目前服务器默认是1024个连接,还不会增加。
关于限制并发的问题,经过多次测试,基本解决了apache 1.3 限制并发连接的问题。
http://www.gknw.net/development/apache/apache-1.3/win32/modules/
从这里下载:
mod_limitipconn-0.04-w32.zip
解压后,其中 有些说明文件。
有 mod_limitipconn.so 文件,拷贝文件到 apache 的 modules 目录下。
1、编辑 httpd.conf
在相应位置,增加
LoadModule limitipconn_module modules/mod_limitipconn.so
AddModule mod_limitipconn.c
2、在AddModule mod_limitipconn.c 后面,即增加 mod设置:
# Configuration for mod_limitipconn
<IfModule mod_limitipconn.c>
<Location /somewhere>
MaxConnPerIP 3
# exempting images from the connection limit is often a good
# idea if your web page has lots of inline images, since these
# pages often generate a flurry of concurrent image requests
NoIPLimit image/*
</Location>
<Location /mp3>
MaxConnPerIP 1
# In this case, all MIME types other than audio/mpeg and video*
# are exempt from the limit check
OnlyIPLimit audio/mpeg video
</Location>
</IfModule>
# End of mod_limitipconn.
3、设置
ExtendedStatus On
4、在这里一般以为就可以了,结果出现严重错误,apache无法启动。
错误是:
The Apache service named D:\Server\Apache\Apache.exe reported the following error:
>>> Invalid command 'ExtendedStatus', perhaps mis-spelled or defined by a module not included in the server configuration <<<
before the error.log file could be opened.
More information may be available in the error.log file. .
通过搜索,发现是因为mod_status模块 没有加载的缘故。
通过loadModule 和 downmodule 加载 mod_status模块。
重新启动apahce,解决问题。
5、如果要看 access文件,可以修改:
# Optional supress logging of denied access
CustomLog logs/access_log common env=!LIMITIP
6、控制特殊文件的下载:
AddType application/x-rar .rar .iso #添加自定义minetype,控制iso和rar的下载
< IfModule mod_limitipconn.c >
< Location / >
MaxConnPerIP 5
NoIPLimit image/*
< /Location >
< Location /upload >
MaxConnPerIP 1 #upload文件夹限制下载
OnlyIPLimit audio/mpeg video/* application/x-rar #只对音频视频文件,自定义 minetype文件起作用
< / Location >
< / IfModule >
由于网站内容有很多下载,而大家一般使用flasget下载,一般使用多线程,同时有很多人在大量下载资料的话,就会形成并发连接饱和,后面的人就无法下载使用了。
这个问题一直困扰我们。
解决的思路应该有两个方面,一个是限制单ip的并发连接。一个是增加服务器并发连接的容量。目前服务器默认是1024个连接,还不会增加。
关于限制并发的问题,经过多次测试,基本解决了apache 1.3 限制并发连接的问题。
http://www.gknw.net/development/apache/apache-1.3/win32/modules/
从这里下载:
mod_limitipconn-0.04-w32.zip
解压后,其中 有些说明文件。
有 mod_limitipconn.so 文件,拷贝文件到 apache 的 modules 目录下。
1、编辑 httpd.conf
在相应位置,增加
LoadModule limitipconn_module modules/mod_limitipconn.so
AddModule mod_limitipconn.c
2、在AddModule mod_limitipconn.c 后面,即增加 mod设置:
# Configuration for mod_limitipconn
<IfModule mod_limitipconn.c>
<Location /somewhere>
MaxConnPerIP 3
# exempting images from the connection limit is often a good
# idea if your web page has lots of inline images, since these
# pages often generate a flurry of concurrent image requests
NoIPLimit image/*
</Location>
<Location /mp3>
MaxConnPerIP 1
# In this case, all MIME types other than audio/mpeg and video*
# are exempt from the limit check
OnlyIPLimit audio/mpeg video
</Location>
</IfModule>
# End of mod_limitipconn.
3、设置
ExtendedStatus On
4、在这里一般以为就可以了,结果出现严重错误,apache无法启动。
错误是:
The Apache service named D:\Server\Apache\Apache.exe reported the following error:
>>> Invalid command 'ExtendedStatus', perhaps mis-spelled or defined by a module not included in the server configuration <<<
before the error.log file could be opened.
More information may be available in the error.log file. .
通过搜索,发现是因为mod_status模块 没有加载的缘故。
通过loadModule 和 downmodule 加载 mod_status模块。
重新启动apahce,解决问题。
5、如果要看 access文件,可以修改:
# Optional supress logging of denied access
CustomLog logs/access_log common env=!LIMITIP
6、控制特殊文件的下载:
AddType application/x-rar .rar .iso #添加自定义minetype,控制iso和rar的下载
< IfModule mod_limitipconn.c >
< Location / >
MaxConnPerIP 5
NoIPLimit image/*
< /Location >
< Location /upload >
MaxConnPerIP 1 #upload文件夹限制下载
OnlyIPLimit audio/mpeg video/* application/x-rar #只对音频视频文件,自定义 minetype文件起作用
< / Location >
< / IfModule >
限制客户端一个IP同时连接数,实际应用:限制flashget,网络蚂蚁等软件只有2个进程有效
apache如何限制用户线程数?
限制客户端一个IP同时连接数,实际应用:限制flashget,网络蚂蚁等软件只有2个进程有效。
(注释:/opt/httpd/是我的apache的安装目录,大家可以自行改成自己的路径)
首先,从http://dominia.org/djao/下载mod_limitipconn-0.22.tar.gz
上传解压后运行
#/opt/httpd/bin/apxs -c -i -a mod_limitipconn.c 将此外部DSO模块编译入Apache
检查/opt/httpd/modules是否有mod_limitipconn.so模块
配置apache配置文件,找到相应位置,如下:
LoadModule limitipconn_module modules/mod_limitipconn.so
#
MaxConnPerIP 2
并将#ExtendedStatus On的注释去掉
重启Apache,检查是否可限制单一IP多个并发连接
测试效果,用flashget下载,默认是5个蚂蚁,只有2个可以连接并进行下载,其他的3个始终连接不上!--成功!!!
apache如何限制用户线程数?
限制客户端一个IP同时连接数,实际应用:限制flashget,网络蚂蚁等软件只有2个进程有效。
(注释:/opt/httpd/是我的apache的安装目录,大家可以自行改成自己的路径)
首先,从http://dominia.org/djao/下载mod_limitipconn-0.22.tar.gz
上传解压后运行
#/opt/httpd/bin/apxs -c -i -a mod_limitipconn.c 将此外部DSO模块编译入Apache
检查/opt/httpd/modules是否有mod_limitipconn.so模块
配置apache配置文件,找到相应位置,如下:
LoadModule limitipconn_module modules/mod_limitipconn.so
#
MaxConnPerIP 2
并将#ExtendedStatus On的注释去掉
重启Apache,检查是否可限制单一IP多个并发连接
测试效果,用flashget下载,默认是5个蚂蚁,只有2个可以连接并进行下载,其他的3个始终连接不上!--成功!!!
首先下载Apache的source,Unix Source: apache_1.3.37.tar.gz 。当然也可以选择后面这个版本:Win32 Source: httpd-2.0.59-win32-src.zip 。这里面的区别就是,后者可以直接在Windows下进行编译。需要的一点转换就是要把某些文件的格式由unix转换为DOS的。这里我们选择前者。
需要的工具:Visual C++,这里需要使用Visual C++来编译,其实Apache已经设置好了makefile,所以真正要用的是namke。
有了以上的准备就可以很方便的编译Apache了。在Windows下真的不如在Linux下边感觉好(即使选择了WIndows版本的Source),这里虽然是编译Apache了,但是很多参数不能用,所以Apache推荐直接安装Binary版本。不过通过编译apache可以体验制作工程的过程。下面开始:
解压缩下载的zip文件。apache工程布局是典型的Linux风格,根目录下放置的是一些脚本文件,用于探测环境并设置makefile,当然这些在Windows环境下使用不到也没办法用的。我们要使用的是/src目录下面的文件。nmake默认的文件是MAKEFILE,而我们要使用的是Makefile.win。在命令行下进入/src目录,执行以下命令
nmake /f Makefile.win _apacher
这样就得到了必需的apache.exe和一些dll文件,同时会在c:\生成相应的目录。但是如果想运行apache还需要在/conf目录配置http.conf文件。
需要的工具:Visual C++,这里需要使用Visual C++来编译,其实Apache已经设置好了makefile,所以真正要用的是namke。
有了以上的准备就可以很方便的编译Apache了。在Windows下真的不如在Linux下边感觉好(即使选择了WIndows版本的Source),这里虽然是编译Apache了,但是很多参数不能用,所以Apache推荐直接安装Binary版本。不过通过编译apache可以体验制作工程的过程。下面开始:
解压缩下载的zip文件。apache工程布局是典型的Linux风格,根目录下放置的是一些脚本文件,用于探测环境并设置makefile,当然这些在Windows环境下使用不到也没办法用的。我们要使用的是/src目录下面的文件。nmake默认的文件是MAKEFILE,而我们要使用的是Makefile.win。在命令行下进入/src目录,执行以下命令
nmake /f Makefile.win _apacher
这样就得到了必需的apache.exe和一些dll文件,同时会在c:\生成相应的目录。但是如果想运行apache还需要在/conf目录配置http.conf文件。
大家都知道,rename()函数可以对文件或目录进行重命名的操作。其实它还可以做很多事情。
熟悉unix的朋友应该知道shell命令mv,它相当与win32的移动,而且移动的同时可进行重命名。我发现,php的rename()函数就相当于mv,它不仅仅只有简单的重命名的功能,同样可以改变文件甚至整个目录的路径。
例如:
$oldpath ----文件或目录原来路径
$newpath ----新定义路径
那么 rename($oldpath,$newpath)就可以完成文件/目录移动的操作
经过我的测试,win32和unix的php4版本都支持这个功能。
另外,好象php4的win32版取消了unlink()函数。那么还可以巧用rename()函数来完成删除的操作,例如:
$path ---- 文件或目录路径
$tmp ---- tmp目录(/tmp)
用rename($path,$tmp) 将文件移动到tmp目录.
熟悉unix的朋友应该知道shell命令mv,它相当与win32的移动,而且移动的同时可进行重命名。我发现,php的rename()函数就相当于mv,它不仅仅只有简单的重命名的功能,同样可以改变文件甚至整个目录的路径。
例如:
$oldpath ----文件或目录原来路径
$newpath ----新定义路径
那么 rename($oldpath,$newpath)就可以完成文件/目录移动的操作
经过我的测试,win32和unix的php4版本都支持这个功能。
另外,好象php4的win32版取消了unlink()函数。那么还可以巧用rename()函数来完成删除的操作,例如:
$path ---- 文件或目录路径
$tmp ---- tmp目录(/tmp)
用rename($path,$tmp) 将文件移动到tmp目录.
is_file 测试文件是否为正常文件。
语法: boolean is_file(string filename);
返回值: 布尔值
函数种类: 文件存取
内容说明: 本函数返回 true 值则表示指定的 filename 存在并为正常的文件。返回值放在快取缓冲区中,可以参考 clearstatcache()。
参考: is_dir() is_link()
is_link 测试文件是否为链接文件。
语法: boolean is_link(string filename);
返回值: 布尔值
函数种类: 文件存取
内容说明: 本函数返回 true 值则表示指定的 filename 存在并为符号链接文件 (symbolic link)。返回值放在快取缓冲区中,可以参考 clearstatcache()。
参考: is_dir() is_file()
is_readable 测试文件是否可读取。
语法: boolean is_readable(string filename);
返回值: 布尔值
函数种类: 文件存取
内容说明: 本函数返回 true 值则表示指定的 filename 存在并且可读取。返回值放在快取缓冲区中,参考 clearstatcache()。
参考: is_writeable()
语法: boolean is_file(string filename);
返回值: 布尔值
函数种类: 文件存取
内容说明: 本函数返回 true 值则表示指定的 filename 存在并为正常的文件。返回值放在快取缓冲区中,可以参考 clearstatcache()。
参考: is_dir() is_link()
is_link 测试文件是否为链接文件。
语法: boolean is_link(string filename);
返回值: 布尔值
函数种类: 文件存取
内容说明: 本函数返回 true 值则表示指定的 filename 存在并为符号链接文件 (symbolic link)。返回值放在快取缓冲区中,可以参考 clearstatcache()。
参考: is_dir() is_file()
is_readable 测试文件是否可读取。
语法: boolean is_readable(string filename);
返回值: 布尔值
函数种类: 文件存取
内容说明: 本函数返回 true 值则表示指定的 filename 存在并且可读取。返回值放在快取缓冲区中,参考 clearstatcache()。
参考: is_writeable()
fgets 取得文件指针所指的行。
语法: string fgets(int fp, int length);
返回值: 字符串
函数种类: 文件存取
内容说明: 本函数取得文件指针所指的行,返回字符串长度为行的长度减一。若发生错误则返回 false。一般常遇到的陷阱是用 C 语言的经验来使用本函数,而 EOF 时的处理方式则和 C 语言的 fgets() 不同。其中的文件指针必须是有效的,且必须是已经用 fopen()、popen() 或 fsockopen() 成功开文件的指针。
使用范例
<?php
$fd = fopen("/tmp/myfile.txt", "r");
while ($buffer = fgets($fd, 4096)) {
echo $buffer;
}
fclose($fd);
?>
语法: string fgets(int fp, int length);
返回值: 字符串
函数种类: 文件存取
内容说明: 本函数取得文件指针所指的行,返回字符串长度为行的长度减一。若发生错误则返回 false。一般常遇到的陷阱是用 C 语言的经验来使用本函数,而 EOF 时的处理方式则和 C 语言的 fgets() 不同。其中的文件指针必须是有效的,且必须是已经用 fopen()、popen() 或 fsockopen() 成功开文件的指针。
使用范例
<?php
$fd = fopen("/tmp/myfile.txt", "r");
while ($buffer = fgets($fd, 4096)) {
echo $buffer;
}
fclose($fd);
?>
basename: 返回不含路径的文件字符串。
chgrp: 改变文件所属的群组。
chmod: 改变文件的属性。
chown: 改变文件的拥有者。
clearstatcache: 清除文件状态快取。
copy: 复制文件。
delete: 无用的项目。
dirname: 取得路径中的目录名。
diskfreespace: 取得目录所在的剩余可用空间。
fclose: 关闭已打开的文件。
feof: 测试文件指针是否指到档尾。
fgetc: 取得文件指针所指的字符。
fgetcsv: 取得文件指针所指行,并解析 CSV 字段。
fgets: 取得文件指针所指的行。
fgetss: 取得文件指针所指的行,并去掉 HTML 语言标记。
file: 将文件全部读入数组变量中。
file_exists: 检查文件是否存在。
fileatime: 取得文件最后的存取时间。
filectime: 取得文件最后的改变时间。
filegroup: 取得文件所属的群组。
fileinode: 取得文件的 inode 值。
filemtime: 取得文件最后的修改时间。
fileowner: 取得文件的拥有者。
fileperms: 取得文件的权限配置。
filesize: 获得文件的大小。
filetype: 获得文件的类型。
flock: 锁住文件。
chgrp: 改变文件所属的群组。
chmod: 改变文件的属性。
chown: 改变文件的拥有者。
clearstatcache: 清除文件状态快取。
copy: 复制文件。
delete: 无用的项目。
dirname: 取得路径中的目录名。
diskfreespace: 取得目录所在的剩余可用空间。
fclose: 关闭已打开的文件。
feof: 测试文件指针是否指到档尾。
fgetc: 取得文件指针所指的字符。
fgetcsv: 取得文件指针所指行,并解析 CSV 字段。
fgets: 取得文件指针所指的行。
fgetss: 取得文件指针所指的行,并去掉 HTML 语言标记。
file: 将文件全部读入数组变量中。
file_exists: 检查文件是否存在。
fileatime: 取得文件最后的存取时间。
filectime: 取得文件最后的改变时间。
filegroup: 取得文件所属的群组。
fileinode: 取得文件的 inode 值。
filemtime: 取得文件最后的修改时间。
fileowner: 取得文件的拥有者。
fileperms: 取得文件的权限配置。
filesize: 获得文件的大小。
filetype: 获得文件的类型。
flock: 锁住文件。