LAMP.md
LAMP
Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。
工作流程
我们在日常上网访问网站时,大部分时间都是查看网站的内容,而这种使用都是通过web服务器(httpd或则nginx)提供,例如:html文件、css样式表、还有js文件。但是有些时候查看一些数据这就需要服务器的PHP/Perl/Python来执行并提供给我们,而这些语言在执行中可能会和端的数据库进行交互但有时候并不需要。而我们在购买一个商品或者注册一个帐号后则需要用PHP/Perl/Python 把我们提交的数据写入到MySQL数据库中。在以上的操作中由于使用到了LAMP 这套经典的组合,所以下面就列出这个组合的工作模式。
静态资源:Client -- http协议 --> httpd
动态资源:Client -- http协议 --> httpd --> libphp5.so ()
动态资源:Client -- http协议 --> httpd --> libphp5.so () -- mysql --> MySQL server
安装方式
在httpd+php 中的工作方式可以有下面三种:
modules
cgi
fastcgi
上面三种安装方式中cgi的已经不会使用,而modules和fastcgi可以根据httpd的版本进行选择,modules可以和httpd2.2和httpd2.4结合使用。而fastcgi一般是和httpd2.4结合使用。所以我们在不同版本的CentOS 中的安装也会有不同的方式,下面介绍如何安装:
CentOS 6
yum安装
# yum install -y httpd php php-mysql mysql-server
说明:在CentOS 6 中系统默认的httpd版本是2.2 而php版本是5.3.3 而MySQL版本是5.1.73,由于版本比较老所以实际使用中需要根据自己的需求进行部署。
rpm包安装
上面说的yum 安装是由OS 系统的提供商提供的rpm包,这种安装很方便但是其更新速度不是很快。所以有时候使用起来很不方便。但有些软件的作者会给我们提供自己软件的rpm包,这种提供方式的版本会比OS 所提供的版本会高。但如果软件的作者没有提供那我们只能通过源码编译,或者自己制作rpm包。在CentOS 6系统中rpm 包的后缀是带有el6的。
源码安装
下面给的路径是国内公司提供的镜像路径,如果公司有需要则自己在官网进行下载。
httpd 下载路径:http://mirrors.aliyun.com/apache/httpd/
php下载路径:http://mirrors.sohu.com/php/
MySQL 下载路径:http://mirrors.sohu.com/mysql/
MariaDB 下载路径:https://downloads.mariadb.org/mariadb/
说明:由于MySQL 已经是Oracle 公司的产品,所以资源获取会很麻烦,建议可以试着尝试使用MariaDB。
注意:如果在CentOS 6中安装httpd2.4 则需要自己手动安装apr-1.4+和apr-util-1.4+。
CentOS 7
yum安装
Modules 工作方式:
# yum install -y httpd php php-mysql mariadb-server
FastCGI 工作方式:
# yum install -y httpd php-fpm php-mysql mariadb-server
注意:以上两种方式安装中php安装不能一起使用。
rpm安装
安装方式和CentOS 6相同但是需要注意的是在CentOS 7 中的rpm包的后缀是含有el7的。
源码安装
和CentOS 6源码编译安装一样,但是在安装httpd-2.4时如果源码编译则不用在编译apr和apr-util。
安装LAMP(modules方式)
环境说明
L:CentOS 6.6
A:httpd-2.4
M:MySQL-5.7.15
P:php-5.6.28
httpd 安装配置
安装
# yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl-devel
# tar xf apr-1.5.2.tar.bz2
# cd apr-1.5.2
# ./configure --prefix=/usr/local/apr
# make && make install
# tar xf apr-util-1.5.4.tar.gz
# cd apr-util-1.5.4
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
# make && make install
# ./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-ssl --enable-rewrite --with-pcre --with-z --enable-mods-shared=all --enable-mpms-shared=all --with-mpm=event
关于MPM编译说明:
--enable-mpms-shared=all 这个是将prefork、worker和event模型已动态可装载的方式编译进httpd,默认是event模式。
--with-mpm=event 这个是指定默认的mpm工作模式,如果不指定在httpd2.4中是event。
以上两个编译参数中如果第一个没有指定,则会默认将event模型已静态的模式编译进httpd。
建议还是使用动态编译这样操作比较容易更换mpm的工作模型。
配置
添加环境变量
# cat /etc/profile.d/httpd.sh
export PATH=/usr/local/httpd/bin:$PATH
MySQL 安装配置
创建用户的存储数据目录
# groupadd -r mysql
# useradd -g mysql -r -M -s /sbin/nologin mysql
# mkdir -p /data/mydata
# chown -R mysql.mysql /data/mydata/
安装
# tar xf mysql-5.7.15-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
# ln -sv /usr/local/mysql-5.7.15-linux-glibc2.5-x86_64 /usr/local/mysql
`/usr/local/mysql' -> `/usr/local/mysql-5.7.15-linux-glibc2.5-x86_64'
# cd /usr/local/mysql
# chown -R root:mysql ./*
# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mydata
2016-09-13T08:24:28.761851Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-09-13T08:24:31.241466Z 0 [Warning] InnoDB: New log files created, LSN=45790
2016-09-13T08:24:31.542488Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2016-09-13T08:24:31.754866Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 7ee23783-798b-11e6-97a5-000c291aa17f.
2016-09-13T08:24:31.792287Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2016-09-13T08:24:31.795564Z 1 [Note] A temporary password is generated for root@localhost: %wgqEZG:t7zt
# bin/mysql_ssl_rsa_setup --datadir=/data/mydata/
配置
# cat /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
# . /etc/profile.d/mysql.sh
# cp support-files/mysql.server /etc/init.d/mysqld
# chmod +x /etc/init.d/mysqld
# egrep "^basedir=|^datadir=" /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/data/mydata
# cp support-files/my-default.cnf /etc/my.cnf
# egrep "^basedir|^datadir" /etc/my.cnf
basedir = /usr/local/mysql
datadir = /data/mydata
说明:关于mysql的配置参数这边就不多做介绍,这个只是简单的将配置参数中需要文件路径的给修改。
修改mysql密码
初次登录mysql的密码是初始化数据库后自动生成的密码:%wgqEZG:t7zt。这个密码在登录后系统会要求我们进行修改:
# mysql -uroot -hlocalhost -p
mysql> set password=password('redhat');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select user,host,authentication_string from mysql.user;
+-----------+-----------+-------------------------------------------+
| user | host | authentication_string |
+-----------+-----------+-------------------------------------------+
| root | localhost | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
注意事项
在5.7中存储密码的字段不再是password了,变成了authentication_string。
第一次登录进mysql需要修改密码。
5.7.6之后的版本初始化数据库不再使用mysql_install_db。
配置开机自动启动
# chkconfig --add mysqld
# chkconfig mysqld on
php安装配置
安装
# yum install -y libxml2-devel bzip2-devel gd-devel libmcrypt-devel
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd/bin/apxs --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-pcre-dir --with-openssl --with-zlib-dir --with-bz2 --with-curl --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-mbstring --with-mcrypt --enable-opcache --enable-sockets --enable-xml --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql=/usr/local/mysql
# make && make install
# cp php.ini-production /etc/php.ini
配置
# cd /usr/local/httpd/conf
# vim httpd.conf
209 ServerName localhost:80
267 <IfModule dir_module>
268 DirectoryIndex index.php index.html
269 </IfModule>
397 AddType application/x-httpd-php .php
398 AddType application/x-httpd-php-source .phps
验证
在启动httpd之前请查看php编译后的模块是否加载进httpd中:
# httpd -M |grep php
php5_module (shared)
# httpd -k graceful
# cat /usr/local/httpd/htdocs/info.php
<?php
phpinfo();
?>
启动httpd 之后在浏览器输入:http://IP/info.php
,之后就会出先php的phpinfo信息。
安装typecho
安装typecho 我会用www.a.com
域名来访问,所以请做好解析,请将域名写入到系统的hosts文件中。
配置httpd
# vim /usr/local/httpd/conf/httpd.conf
486 #Include conf/extra/httpd-vhosts.conf
# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/opt/a.com"
ServerName www.a.com
ServerAlias a.com
DirectoryIndex index.php index.html index.htm
ErrorLog "logs/a.com-error_log"
CustomLog "logs/a.com-access_log" common
<Directory "/opt/a.com">
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
安装typecho
# wget https://github.com/typecho/typecho/releases/download/v1.0-14.10.10-release/1.0.14.10.10.-release.tar.gz
# mkdir /opt/a.com
# tar xf 1.0.14.10.10.-release.tar.gz -C /opt/a.com/
# cd /opt/a.com/
# mv build/* .
# ls
admin index.php install install.php license.txt usr var
# pwd
/opt/a.com
# httpd -k graceful
下面就需要在浏览器输www.a.com
,进行安装。安装前请在数据库中创建typecho库。
访问测试
未使用Opcache的压力测试结果:
# ab -c 10 -n 1000 http://www.a.com/admin/login.php
.....
Requests per second: 72.72 [#/sec] (mean)
Time per request: 137.510 [ms] (mean)
Time per request: 13.751 [ms] (mean, across all concurrent requests)
Transfer rate: 486.40 [Kbytes/sec] received
.....
# ab -c 100 -n 1000 http://www.a.com/admin/login.php
.....
Requests per second: 69.63 [#/sec] (mean)
Time per request: 1436.185 [ms] (mean)
Time per request: 14.362 [ms] (mean, across all concurrent requests)
Transfer rate: 465.71 [Kbytes/sec] received
....
这种测试只是为了和后面使用Opcache测试相对比。
Opcache 配置:
zend_extension=opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.enable=1
使用Opcache后的压力测试结果:
# ab -c 10 -n 1000 http://www.a.com/admin/login.php
......
Requests per second: 325.27 [#/sec] (mean)
Time per request: 30.743 [ms] (mean)
Time per request: 3.074 [ms] (mean, across all concurrent requests)
Transfer rate: 2175.58 [Kbytes/sec] received
# ab -c 100 -n 1000 http://www.a.com/admin/login.php
......
Requests per second: 326.60 [#/sec] (mean)
Time per request: 306.186 [ms] (mean)
Time per request: 3.062 [ms] (mean, across all concurrent requests)
Transfer rate: 2184.45 [Kbytes/sec] received
通过上面的测试结果可以看到有着明显的效果提升。
APCu 安装
源码编译安装
# tar xf apcu-4.0.11.tgz
# cd apcu-4.0.11
# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20121113
Zend Module Api No: 20121212
Zend Extension Api No: 220121212
# ./configure --enable-apcu --with-php-config=/usr/local/php/bin/php-config
# make && make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/
Installing header files: /usr/local/php/include/php/
# mkdir /etc/php.d
# vim /etc/php.d/apcu.ini
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/
apc.enabled=1
apc.shm_segments = 1
apc.shm_size=128M
apc.ttl=0
apc.enable_cli=0
apc.entries_hint=0
apc.gc_ttl = 3600
apc.rfc1867 = off
apc.slam_defense = off
apc.use_request_time = 0
注意:在使用APCu之前请把Zend Opcache关闭。
访问测试:
# ab -c 10 -n 1000 http://www.a.com/admin/login.php
......
Requests per second: 81.47 [#/sec] (mean)
Time per request: 122.749 [ms] (mean)
Time per request: 12.275 [ms] (mean, across all concurrent requests)
Transfer rate: 544.89 [Kbytes/sec] received
......
# ab -c 100 -n 1000 http://www.a.com/admin/login.php
.......
Requests per second: 72.62 [#/sec] (mean)
Time per request: 1376.995 [ms] (mean)
Time per request: 13.770 [ms] (mean, across all concurrent requests)
Transfer rate: 485.73 [Kbytes/sec] received
xcache 安装
安装xcache之前,请把前面编译安装的apcu给删除。
# httpd -k stop
# rm -rf /usr/local/php/include/php/ext/apcu
# rm -f /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/apcu.so
# rm -f /etc/php.d/php.ini
# wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
# tar xf xcache-3.2.0.tar.gz
# cd xcache-3.2.0
# /usr/local/php/bin/phpize
# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
# make && make install
# vim /etc/php.d/xcache.ini
[xcache]
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/xcache.so
xcache.shm_scheme = "mmap"
xcache.size = 128M
xcache.count = 1
xcache.slots = 8K
xcache.ttl = 0
xcache.gc_interval = 0
xcache.var_size = 4M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
访问测试:
# ab -c 10 -n 1000 http://www.a.com/admin/login.php
......
Requests per second: 221.55 [#/sec] (mean)
Time per request: 45.136 [ms] (mean)
Time per request: 4.514 [ms] (mean, across all concurrent requests)
Transfer rate: 1481.84 [Kbytes/sec] received
......
# ab -c 100 -n 1000 http://www.a.com/admin/login.php
......
Requests per second: 192.22 [#/sec] (mean)
Time per request: 520.242 [ms] (mean)
Time per request: 5.202 [ms] (mean, across all concurrent requests)
Transfer rate: 1285.65 [Kbytes/sec] received
关于上面三个php加速器的比较看还是Opcache 速度好些,其实不管使用那款软件,我还是建议用Opcache,这是因为Opcache进编译进php内核了,这样今后就会有人进行维护。而xcache 已经没有更新了。所以在选用软件是还要关注软件的社区活跃程度,别到时候出先问题就很麻烦了。
安装LAMP(fastcgi方式)
php-fpm 安装
安装前请停止httpd 服务,同时为避免出现不必要的错误请将php.ini 等文件移走或删除。下面是php的编译参数,注意由于使用的fastcgi 则php则需要启用php-fpm,这种方式的编译和modules 方式在是有一些区别的。
# ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-pcre-dir --with-openssl --with-zlib-dir --with-bz2 --with-curl --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-mbstring --with-mcrypt --enable-opcache --enable-sockets --enable-xml --enable-fpm --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql=/usr/local/mysql
# cp php.ini-production /etc/php.ini
# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# chmod +x /etc/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on
# cd /usr/local/php-fpm/etc/
# cp php-fpm.conf.default php-fpm.conf
# /etc/init.d/php-fpm start
Starting php-fpm done
httpd 配置
# vim /usr/local/httpd/conf/httpd.conf
#在配置文件内将基于proxy的模块取消注释和前面编译的php modules注释
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#LoadModule php5_module modules/libphp5.so
#在文件内添加下面的内容,位置最好在AddType下面的行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/opt/b.net"
ServerName www.b.net
ServerAlias b.net
DirectoryIndex index.php index.html index.htm
ErrorLog "logs/b.net-error_log"
CustomLog "logs/b.net-access_log" common
<Directory "/opt/b.net">
Options None
AllowOverride None
Require all granted
</Directory>
ProxyRequests off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/opt/b.net/$1
</VirtualHost>
# httpd -k graceful
测试
安装phpmyadmin:
# cd /opt/b.net/
# wget https://files.phpmyadmin.net/phpMyAdmin/4.6.5.2/phpMyAdmin-4.6.5.2-all-languages.tar.xz
# tar xf phpMyAdmin-4.6.5.2-all-languages.tar.xz
# mv phpMyAdmin-4.6.5.2-all-languages/* .
未使用Opcache:
# ab -c 10 -n 1000 http://www.b.net/
......
Requests per second: 24.37 [#/sec] (mean)
Time per request: 410.303 [ms] (mean)
Time per request: 41.030 [ms] (mean, across all concurrent requests)
Transfer rate: 284.47 [Kbytes/sec] received
# ab -c 100 -n 1000 http://www.b.net/
......
Requests per second: 25.32 [#/sec] (mean)
Time per request: 3949.086 [ms] (mean)
Time per request: 39.491 [ms] (mean, across all concurrent requests)
Transfer rate: 295.56 [Kbytes/sec] received
使用Opcache:
# vim /etc/php.ini
zend_extension=opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.enable=1
# /etc/init.d/php-fpm restart
# ab -c 10 -n 1000 http://www.b.net/
......
Requests per second: 147.96 [#/sec] (mean)
Time per request: 67.584 [ms] (mean)
Time per request: 6.758 [ms] (mean, across all concurrent requests)
Transfer rate: 1727.01 [Kbytes/sec] received
# ab -c 100 -n 1000 http://www.b.net/
Requests per second: 134.80 [#/sec] (mean)
Time per request: 741.866 [ms] (mean)
Time per request: 7.419 [ms] (mean, across all concurrent requests)
Transfer rate: 1573.31 [Kbytes/sec] received
编译php遇到的问题:
configure: error: Cannot find libmysqlclient_r under /usr/local/mysql
Note that the MySQL client library is not bundled anymore!
# cd /usr/local/mysql/lib/
# ln -s libmysqlclient.so.20.3.2 libmysqlclient_r.so
关于php加速器的一些博客:
http://blog.oneapm.com/apm-tech/125.html
http://blog.csdn.net/liuxinmingcode/article/details/8058864
https://www.vpser.net/opt/apc-eaccelerator-xcache.html
https://cnzhx.net/blog/zendopcache-accelerate-php/
https://my.oschina.net/angelangel/blog/338458
关于一些Opcache的gui界面的项目:
https://github.com/PeeHaa/OpCacheGUI
https://github.com/rlerdorf/opcache-status
LAMP.md的更多相关文章
- 在centos7上实现LAMP的全过程及实现wordpress
原理 http使用方法一编译安装,php独立服务fpm实现. 软件版本 在本次实验中,我们需要用到的软件版本如下: apr-1.6.2 apr-util-1.6.0 httpd-2.4.28 mari ...
- 在centos6上实现LAMP的FPM模式
原理 http使用一次编译法编译安装,php独立服务fpm实现. 软件版本 在本次实验中,我们需要用到的软件版本如下: apr-1.6.2 apr-util-1.6.0 httpd-2.4.28 ma ...
- [svc]linux常用手头命令-md版-2017年11月12日 12:31:56
相关代码 curl命令-网站如果3次不是200或301则报警 curl -o /dev/null -s -w "%{http_code}" baidu.com -k/--insec ...
- Linux 笔记 - 第十四章 LAMP 之(二) 环境配置
博客地址:http://www.moonxy.com 一.前言 LAMP 环境搭建好之后,其实仅仅是安装上了软件,我们还需要掌握 httpd 和 PHP 的配置. 二.httpd 配置 2.1 创建虚 ...
- 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构
目录 实现CentOS 7 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构 准备环境: 准备软件版本: 主机名修改用以区分 数据库服务器 实现数据库二进 ...
- 基于LAMP实现后台活动发布和前端扫码签到系统
目的 无论是公司.学校和社会团体,都会举办各式各样的活动,比如运动会.部门会议.项目会议.野炊.团建等.作为团队管理者来讲,当然希望能够把这类活动转移到线上形成完整的系统,类似于电子流的形式.本文以学 ...
- lamp分离部署
目录 lamp分离部署 1. 安装httpd 2. 安装mysql 3. 安装php 4. 配置apache并部署项目 4.1 启用代理模块 4.2 配置虚拟主机 4.3 部署PbootCMSPHP企 ...
- 项目cobbler+lamp+vsftp+nfs+数据实时同步(inotify+rsync)
先配置好epel源 [root@node3 ~]#yum install epel-release -y 关闭防火墙和selinux [root@node3 ~]#iptables -F [root@ ...
- Linux安装LAMP开发环境及配置文件管理
Linux主要分为两大系发行版,分别是RedHat和Debian,lamp环境的安装和配置也会有所不同,所以分别以CentOS 7.1和Ubuntu 14.04做为主机(L) Linux下安装软件,最 ...
随机推荐
- [moka同学笔记]四、Yii2.0课程笔记(魏曦老师教程)[匿名函数的使用操作]
在评论页面中index.php中 [ 'attribute'=>'status', 'value'=>'status0.name', 'filter'=>Commentstatus: ...
- Javascript中call,apply,bind方法的详解与总结
在 javascript之 this 关键字详解 文章中,谈及了如下内容,做一个简单的回顾: 1.this对象的涵义就是指向当前对象中的属性和方法. 2.this指向的可变性.当在全局作用域时,thi ...
- 兼容 IE input button 左右内边距的增加
IE 下的按钮标签(input.button)会随着文字的增加导致文本左右两侧的间距越来越大.该问题存在于 IE6/IE7,IE8~IE10 没发现类似问题.一般情况下,只要给按钮标签设置 overf ...
- angular源码分析:angular中入境检察官$sce
一.ng-bing-html指令问题 需求:我需要将一个变量$scope.x = '<a href="http://www.cnblogs.com/web2-developer/&qu ...
- jQuery介绍 DOM对象和jQuery对象的转换与区别
jQuery介绍 DOM对象和jQuery对象的转换与区别 jQuery介绍 jQuery: http://jquery.com/ write less, do more. j ...
- iOS UIPageViewController缺陷
为什么弃用UIPageViewController?问题1:设置UIPageViewController为UIPageViewControllerTransitionStyleScroll且调用set ...
- Java异常之自定义异常
哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...
- 基于Ruby的watir-webdriver自动化测试方案与实施(四)
接着基于Ruby的watir-webdriver自动化测试方案与实施(三) http://www.cnblogs.com/Javame/p/4159468.html 继续 ... ... 首先回忆 ...
- iPhone 6 被盗记录二【写在315前夕:苹果售后福州直信创邺在没有三包的情况下帮小偷翻新、助力小偷换机销赃!无视王法。让人震惊,痛心,憎恨!消费者很受伤很无奈】
投诉公司: 北京直信创邺数码科技有限公司 标题: 写在315前夕:苹果售后在没有三包的情况下帮小偷翻新.助力小偷换机销赃!无视王法.让人震惊,痛心,憎恨!消费者很受伤很无奈 期望: 还我手机,或者赔 ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(一)
一. 准备工作 1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版 如果想实现Win7与Linux双系统,可参考我的 ...