Ubuntu9.10下 php(FastCGI PHPFPM)+Nginx+.........

摘要:
ubuntu的安装部分省略了N.M.P,并开始安装编译和安装phpnginx所需的包(有些在ubuntu源代码中,有些通过下载源代码进行编译和安装)。首先,安装build essential(包括gccc++(g++)、autoconf、automake、m4apt-geinstallbuild essential autofautomake)。第二,安装支持包1,安装libjpeglibjpeg devie

ubuntu安装部分省略N.M.P
下面开始安装编译安装php nginx等所需要包(有的是在ubuntu的源里有的是自己下载源代码编译安装)
一、安装build-essential(包括gcc c++(g++)等)、 autoconf、 automake、 m4
apt-get install build-essential autoconf automake
二、安装支持包
1、安装libjpeg libjpeg-devel
apt-get install libjpeg62 libjpeg62-dev
2、安装libpng libpng-devel
apt-get install libpng12-0 libpng12-dev
3、安装 freetype-devel
apt-get install libfreetype6-dev libfreetype6 freetype2-demos
4、安装libxml2
apt-get install libxml2 libxml2-dev libxml++2.6-2 libxml++2.6-dev
5、安装zlib zlib-devel
apt-get zlib1g zlib1g-dev zlib1g-dbg
6、安装glib2 glib2-devel
apt-get install libglib2.0-0 libglib2.0-dev
7、安装bzip2 bzip2-devel
apt-get bzip2 libbz2-dev
8、安装ncurses ncurses-devel
apt-get install libncurses5 libncurses5-dev
9、安装curl curl-devel
apt-get install curl libcurl3 libcurl4-dev libcurl4-openssl-dev
10、安装e2fsprogs e2fsprogs-devel
apt-get install e2fsprogs uuid-dev
11、安装krb5 krb5-devel
apt-get install libkrb5-3 libkrb5-dev
12、安装libidn libidn-devel
apt-get install libidn11 libidn11-dev
13、安装openssl openssl-devel
apt-get install openssl libssl-dev
14、装openldap openldap-devel
apt-get libldap-2.4-2 libldap2-dev
15、libmcrypt libmcrypt-dev
apt-get install libmcrypt4 libmcrypt-dev
16、libltdl libltdl-dev
apt-get install libltdl7 libltdl-dev
17、libmhash libmhash-dev
apt-get install libmhash2 libmhash-dev
18、mcrypt
apt-get install mcrypt
19、gd2
apt-get install libgd2-xpm

20、安装mysql

apt-get install mysql-server

21、安装sqlite libsqlite-dev

apt-get install sqlite libsqlite-dev

22、安装mysql-dev
apt-get libmysqlclient libmysqlclient-dev libmysqlclient16 libmysqlclient16-dev
23、libsasl2-dev
apt-get install libsasl2-dev
24、libticonv3 libticonv-dev

24、安装libiconv-1.13.1
下载libiconv-1.13.1.tar.tar
tar zxvf libiconv-1.13.1.tar.tar
cd llibiconv-1.13.1
./configure --prefix=/usr/local
make
make install
25php的安装
下载php源代码我用的是php5.3.1
下载fpm-php源代码
解压缩
生成fpm的patch文件
./generate-fpm-patch
给php打fpm补丁
进入php源码目录
patch -p1 < ../fpm.patch
打完补丁后运行
./buildconf --force
完了
./configure --prefix=/usr/local/webserver/php --with-mysql --with-mysqli --with-mysql-sock --with-iconv-dir=/usr/local --with-

iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-rpath --

enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex

--with-fpm --with-libevent --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --

enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --with-pear
完了
make ZEND_EXTRA_LIBS='-liconv'
完了
make test
完了
make install
meke make test 时间都很长
完成后
cp php.ini-production /usr/local/webserver/php/lib/php.ini
cd ../
curl http://pear.php.net/go-pear | /usr/local/webserver/php/bin/php
一路回车吧
接下来安装php的扩展模块
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../

tar jxvf eaccelerator-0.9.6-rc1.tar.bz2
cd eaccelerator-0.9.6-rc1
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../

tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/usr/local/webserver/mysql
make
make install
cd ../

apt-get install imagemagick
(特别注意要安装dev的,不然下面的那个不能编译的)

tar zxvf imagick-2.3.0.tgz
cd imagick-2.3.0/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../

修改php.ini文件
手工修改:查找/usr/local/webserver/php/lib/php.ini中的extension_dir = "./"
修改为extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090613/"
并在此行后增加以下几行,然后保存:
extension = "memcache.so"
extension = "pdo_mysql.so"
extension = "imagick.so"
设置下时区date.tiemzone="PRC"
配置eAccelerator加速PHP(据说比zend好用)
mkdir -p /usr/local/webserver/eaccelerator_cache
vi /usr/local/webserver/php/lib/php.ini
按shift+g键跳到配置文件的最末尾,加上以下配置信息
[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090613/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
创建www用户和组,以及供虚拟主机使用的目录
groupadd www
useradd -g www www
mkdir -p /usr/local/www/www
chmod +w /usr/local/www/www
chown -R www:www /usr/local/www/www
配置php-fpm的配置文件(位置在/etc/php-fpm.conf)
一下是我的配置文件,注意的地只有几个pid文件的位置 这个文件在php-fpm的控制脚本里面要用,不然没办法停止php-fpm
还有连接日志、错误日志的位置要建立好相应的目录 并且给相应权限 chmod +w chown -R www:www
还有就是几个数字 都是英文的而且有解释自己根据自己的情况来吧!这个需要按照实际情况调整的,服务器配置不可能一下子就ok的,要综合各种情况和

环境来设置这些性能参数

<?xml version="1.0" ?>
<configuration>

All relative paths in this config are relative to php's install prefix

<section name="global_options">

Pid file
<value name="pid_file">/var/run/php-fpm.pid</value>

Error log file
<value name="error_log">/usr/local/webserver/php/logs/php-fpm.log</value>

Log level
<value name="log_level">notice</value>

When this amount of php processes exited with SIGSEGV or SIGBUS ...
<value name="emergency_restart_threshold">10</value>

... in a less than this interval of time, a graceful restart will be initiated.
Useful to work around accidental curruptions in accelerator's shared memory.
<value name="emergency_restart_interval">1m</value>

Time limit on waiting child's reaction on signals from master
<value name="process_control_timeout">5s</value>

Set to 'no' to debug fpm
<value name="daemonize">yes</value>

</section>

<workers>

<section name="pool">

Name of pool. Used in logs and stats.
<value name="name">default</value>

Address to accept fastcgi requests on.
Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket'
<value name="listen_address">127.0.0.1:9000</value>

<value name="listen_options">

Set listen(2) backlog
<value name="backlog">-1</value>

Set permissions for unix socket, if one used.
In Linux read/write permissions must be set in order to allow connections from web server.
Many BSD-derrived systems allow connections regardless of permissions.
<value name="owner"></value>
<value name="group"></value>
<value name="mode">0666</value>
</value>

Additional php.ini defines, specific to this pool of workers.
<value name="php_defines">
<value name="sendmail_path">/usr/sbin/sendmail -t -i</value>
<value name="display_errors">1</value>
</value>

Unix user of processes
<value name="user">www</value>

Unix group of processes
<value name="group">www</value>

Process manager settings
<value name="pm">

Sets style of controling worker process count.
Valid values are 'static' and 'apache-like'
<value name="style">static</value>

Sets the limit on the number of simultaneous requests that will be served.
Equivalent to Apache MaxClients directive.
Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi
Used with any pm_style.
<value name="max_children">128</value>

Settings group for 'apache-like' pm style
<value name="apache_like">

Sets the number of server processes created on startup.
Used only when 'apache-like' pm_style is selected
<value name="StartServers">20</value>

Sets the desired minimum number of idle server processes.
Used only when 'apache-like' pm_style is selected
<value name="MinSpareServers">5</value>

Sets the desired maximum number of idle server processes.
Used only when 'apache-like' pm_style is selected
<value name="MaxSpareServers">35</value>

</value>

</value>

The timeout (in seconds) for serving a single request after which the worker process will be terminated
Should be used when 'max_execution_time' ini option does not stop script execution for some reason
'0s' means 'off'
<value name="request_terminate_timeout">0s</value>

The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file
'0s' means 'off'
<value name="request_slowlog_timeout">0s</value>

The log file for slow requests
<value name="slowlog">logs/slow.log</value>

Set open file desc rlimit
<value name="rlimit_files">65535</value>

Set max core size rlimit
<value name="rlimit_core">0</value>

Chroot to this directory at the start, absolute path
<value name="chroot"></value>

Chdir to this directory at the start, absolute path
<value name="chdir"></value>

Redirect workers' stdout and stderr into main error log.
If not set, they will be redirected to /dev/null, according to FastCGI specs
<value name="catch_workers_output">yes</value>

How much requests each process should execute before respawn.
Useful to work around memory leaks in 3rd party libraries.
For endless request processing please specify 0
Equivalent to PHP_FCGI_MAX_REQUESTS
<value name="max_requests">102400</value>

Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.
Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)
Makes sense only with AF_INET listening socket.
<value name="allowed_clients">127.0.0.1</value>

Pass environment variables like LD_LIBRARY_PATH
All $VARIABLEs are taken from current environment
<value name="environment">
<value name="HOSTNAME">$HOSTNAME</value>
<value name="PATH">/usr/local/bin:/usr/bin:/bin</value>
<value name="TMP">/tmp</value>
<value name="TMPDIR">/tmp</value>
<value name="TEMP">/tmp</value>
<value name="OSTYPE">$OSTYPE</value>
<value name="MACHTYPE">$MACHTYPE</value>
<value name="MALLOC_CHECK_">2</value>
</value>

</section>

</workers>

</configuration>

启动下php-fpm看
ulimit -SHn 65535
service php-fpm start (安装的时候自己会生成一个启动脚本在inti.d下)
ulimit -SHn 65535必须和配置文件里相对应否则会产生错误,可以看日志文件就明白了。
如果没有错误提示恭喜,完成了,如果有错误按照提示解决

主要的一起错误就shmmax的值,在下面优化内核参数里面有的。
你还可以用netstat -nltp | grep php-fpm 确认下,监听的端口是9000
php到此结束
接下来是nginx
下载nginx
我用的是0.8.28
安装前要先安装Nginx所需的pcre库
tar zxvf pcre-8.00.tar.gz
cd pcre-8.00/
./configure --enable-utf8
make
make install

注意看下产生的lib的位置,如果nginx启动出错要ln -s 到相应目录

ln -s /usr/local/lib/libpcre.so.0 /usr/lib/libpcre.so.0

tar zxvf nginx-0.8.28.tar.gz
cd nginx-0.8.28/
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --http-client-body-temp-

path=/var/cache/nginx/client_body_temp --with-select_module --with-poll_module --with-http_sub_module --with-

http_stub_status_module --with-http_gzip_static_module --with-http_dav_module --with-http_flv_module --with-

http_secure_link_module
make
make install

安装完成后
修改nginx的配置文件,不得不说的是nginx的配置文件看着真是舒服(/usr/local/webserver/nginx/conf/nginx.conf)
我的配置文件如下 (一个网站 www.cfsyzx.cn 一个用来查看nginx的状态 status.cfsyzx.cn)
需要注意的是worker_cpu_affinity和你的cpu又关系的,另外连接日志,错误日志,pid文件路径要注意下。
user www www;

worker_processes 8;

worker_cpu_affinity 0001 0100 1000 0010 0001 0100 1000 0010;

error_log /var/log/nginx/nginx_error.log crit;

pid /usr/local/webserver/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;

events
{
use epoll;
worker_connections 65535;
}

http
{
include mime.types;
default_type application/octet-stream;

#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;

keepalive_timeout 60;

tcp_nodelay on;

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

#limit_zone crawler $binary_remote_addr 10m;

server
{
listen 80;
server_name www.cfsyzx.cn;
index index.html index.htm index.php;
root /usr/local/www/www;

#limit_conn crawler 20;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*\.(js|css)?$
{
expires 1h;
}

log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /var/log/nginx/access.log access;
}

server
{
listen 80;
server_name status.cfsyzx.cn;

location / {
stub_status on;
access_log off;
}
}
}
根据配置文件的内容建立相应目录用来存放日志,注意设置权限 chmod +w chown -R www:www
在/usr/local/webserver/nginx/conf/目录中创建fcgi.conf文件内容如下:
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;

fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
完成
ulimit -SHn 65535
service php-fpm start
/usr/local/webserver/nginx/sbin/nginx
在/usr/local/www/www 建立一个php文件
<?php
phpinfo();
?>;
好了完成了 看看你的php信息呵呵,漂亮吧,基本上全部都支持了!!!
下来时优化linux内核参数
vi /etc/sysctl.conf
在末尾增加以下内容:

# Add
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768

net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

net.ipv4.tcp_tw_recycle = 1
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800

#net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535

kernel.shmmax= 内存大小/2*1024*1024
使配置立即生效:

/sbin/sysctl -p

下来就是教php和nginx自动启动
需要安装一个软件包
apt-get install sysv-rc-conf

编辑/etc/init.d/下的php-fpm
注意几个文件路径,另外这个启动脚本有个bug ,在启动那里加上判断下 php-fpm是否已经启动如果已经启动,给出提示!

在 /etc/init.d/下建立nginx
vi nginx
内容如下:
#! /bin/sh

### BEGIN INIT INFO
# Provides: php-fpm
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts Nginx
# Description: starts the Nginx Process Manager daemon
### END INIT INFO

nginx_BIN=/usr/local/webserver/nginx/sbin/nginx
nginx_CONF=/usr/local/webserver/nginx/conf/nginx.conf
nginx_PID=/usr/local/webserver/nginx/nginx.pid

nginx_opts="-c $nginx_CONF"

wait_for_pid () {
try=0

while test $try -lt 35 ; do

case "$1" in
'created')
if [ -f "$2" ] ; then
try=''
break
fi
;;

'removed')
if [ ! -f "$2" ] ; then
try=''
break
fi
;;
esac

echo -n .
try=`expr $try + 1`
sleep 1

done

}

case "$1" in
start)
if [ -r $nginx_PID ];then
echo "nginx has been running... "
exit 1
fi

echo -n "Starting nginx "

ulimit -SHn 65535

$nginx_BIN $nginx_opts

if [ "$?" != 0 ] ; then
echo " failed"
exit 1
fi

wait_for_pid created $nginx_PID

if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;

stop)
echo -n "Gracefully shutting down nginx "

if [ ! -r $nginx_PID ] ; then
echo "warning, no pid file found - nginx is not running ?"
exit 1
fi

kill -QUIT `cat $nginx_PID`

wait_for_pid removed $nginx_PID

if [ -n "$try" ] ; then
echo " failed.Try force-quit"
exit 1
else
echo " done"
fi
;;

force-quit)
echo -n "Terminating nginx "

if [ ! -r $nginx_PID ] ; then
echo "warning, no pid file found - nginx is not running ?"
exit 1
fi

kill -TERM `cat $nginx_PID`

wait_for_pid removed $nginx_PID

if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;

restart)
$0 stop
$0 start
;;

reload)

echo -n "Reload service nginx "

if [ ! -r $nginx_PID ] ; then
echo "warning, no pid file found - nginx is not running ?"
exit 1
fi

kill -USR2 `cat $nginx_PID`

echo " done"
;;

*)
echo "Usage: $0 {start|stop|force-quit|restart|reload}"
exit 1
;;

esac

保存
运行 sysv-rc-conf
把php-fpm和nginx 的2 3 4 5 打钩q键退出!
完成!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
接下来是些零散的资料
ps -ef | grep apache | grep -v grep | wc -l

第一项:查看所有进程信息

第二项:过滤获取apache进程

第三项:反选去除本身grep干扰项

第四项:统计行数
==============================================
Nginx保护目录的配置如下,目录密码保护文件是 dynamic/htpasswd

if (!-e $request_filename) {
rewrite ^(.*)$ /hbcms404.php last;
}

location ~ /(admin/.*|phpMyAdmin*|include/.*|setup/.*) {
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
}
auth_basic "Restricted";
auth_basic_user_file dynamic/htpasswd;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
}

目录密码保护的配置,如果不加红色部分代码,php文件不会执行,会出现php文件下载的提示。

保护目录的配置,如果放在绿色代码后面,虽然会提示要输入密码,但是,不输入目录保护密码也会执行php并显示出来。

多次测试得到上面的结果,有些糊涂,记录一下,以便备查。

生成密码文件:

htpasswd -b -c htpasswd username password;
===================================================
Nginx身份验证
nginxstatus做身份验证:
#cd /usr/local/nginx/conf
#mkdir htpasswd
/usr/local/apache2/bin/htpasswd -c /usr/local/nginx/conf/htpasswd/zhang zhang #添加用户名为zhang
#或者
htpasswd -c /usr/local/nginx/conf/htpasswd/zhang zhang #添加用户名为zhang
New password: (此处输入你的密码)
Re-type new password: (再次输入你的密码)
Adding password for user
配置nginx
location ~ ^/(zhang)/ {
root /htdocs/count;
auth_basic "LT-COUNT-TongJi";
auth_basic_user_file /usr/local/nginx/conf/htpasswd/zhang;
}
看看打开页面是否需要输入用户名和密码!
======================================================
worker_processes指明了nginx要开启的进程数,据官方说法,一般开一个就够了,多开几个,可以减少机器io带来的影响。
据实践表明,nginx的这个参数在一般情况下开4个或8个就可以了,再往上开的话优化不太大。据另一种说法是,nginx开启太多的进程,会影响主进程

调度,所以占用的cpu会增高,这个说法我个人没有证实,估计他们是开了一两百个进程来对比的吧。

worker_processes配置的一些注意事项:

1、worker_cpu_affinity配置最好是能写上

我这里服务器多数是双核超线程,相当于4cpu,我一般开8进程,所以这个配置就是这样:

worker_cpu_affinity 0001 0100 1000 0010 0001 0100 1000 0010;

另,worker_cpu_affinity不是什么时候都能用的,我没有认真研究并罗列所有情况,只知道2.4内核的机器用不了,如果用不了的话,那么最好是加大

worker_processes进程数,这样分配cpu就会平均一点啦,如果不平均只好多重启几下。

2、worker_rlimit_nofile配置要和系统的单进程打开文件数一致,千万不要再画蛇添足地除以worker_processes。

我现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。

这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错

误。
========================================================
over

免责声明:文章转载自《Ubuntu9.10下 php(FastCGI PHPFPM)+Nginx+.........》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[C++ STL] vector使用详解MySQL开发规范下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【推荐】CentOS安装PHP5.6.4+扩展安装+安全配置+性能配置

注:以下所有操作均在CentOS 6.5 x86_64位系统下完成。 #准备工作# 前段时间PHP官方发布了一个重要的安全升级公告,修复了两个unserialize函数的严重漏洞,目前受影响的版本有: <5.4.36 <5.5.20 <5.6.4 这里我们直接下载5.6.4的版本进行安装配置,并且在这之前需要先把MySQL和Apach...

ubuntu基本命令

1、帮助      --help简单的帮助      help command 较详细的帮助      man command 最详细的帮助2、ls 命令      ls -a 显示全部的文件及文件夹,包括隐藏的文件或文件夹      ls -l 显示较全的文件信息,包括权限、用户、用户组等。      ls --color 显示文件及文件夹,并标有不同的...

svn的应用

SVN 如何来进行多人协作开发? 在实际工作中,通常是一个小组或者一个团队一起开发同一个项目,不同的人开发不同的功能模块,有一个公共的地方存放项目代码。 如果多个人同时对同一个文件做了修改,比如按照分工,两个人分别做文章模块的增删改查功能,需要操作同一个文件article控制器,如果大家同时完成工作并提交代码,会出现一个代码覆盖的问题。 解决办法: ①合理...

配置https

一.nginx 的 ssl 模块安装 查看 nginx 是否安装 http_ssl_module 模块。 /usr/local/nginx/sbin/nginx -V 如果出现 configure arguments: --with-http_ssl_module, 则已安装(下面的步骤可以跳过,进入 第五部 nginx.conf 配置)。 二.安装...

MFC之目录结构及消息流转(一)

跟上时代,用vs2010, 新建一个MFC应用程序Helloworld。 目录结构: 所有文件分为6个部分:解决方案相关文件、工程相关文件、应用程序头文件和源文件、资源文件、预编译头文件和编译链接生成文件。        1.解决方案相关文件        解决方案相关文件包括解决方案文件夹下的.sdf文件、.sln文件、.suo文件和ipch文件夹。  ...

FTPClient

using System;using System.Net;using System.IO;using System.Text;using System.Net.Sockets;using System.Threading; public class FTPClient{public static object obj = new object(); #r...