Compile and Install LAMP(Linux/Apache/MySQL/PHP) from source on Ubuntu 12.10

This blog will guide you finish the compiling and installing a LAMP Server from source on Ubuntu step by step.

Of course, it will take you a little much time(Thanks for the 15 source packages ) ,so a cup of coffee will be a good choice 🙂

Zeroth. Here follows some source packages, which will be used when we build the LAMP.Some of them are the newest, others not.

1. httpd-2.4.4

2. mysql-5.6.10

3. php.5.3.22

4. libxml2-2.6.30

5. libmcrypt-2.5.8

6. zlib-1.2.7

7. gd-2.0.35

8. autoconf-2.61

9. freetype-2.3.5

10. libpng-1.6.0

11. jpeg-6b

12. apr-1.4.6

13. apr-util-1.4.1

14. pcre-8.32

15. libtool-2.2.6

First. check the basic system info

1. $ uname -a:
Selection_103

2. check whether there is gcc or not
$ gcc -v
Selection_104
Whoops!!!There is not,but never mind ,just install it.
$ sudo apt-get install gcc

Now, we can begin to build all the source packages:)

Second. Compile and install the source packages

2.1 install the newest libxml2 library files
2.1.1 download the libxml2-2.6.30.tar.gz from the link above or the official site, and put it into the directory /usr/local/src/, then extract it to directory  libxml2-2.6.30/ and then get into that derectory. Command lines as follow:
$ cd /usr/local/usr/                                      // enter the directory which the source package lays
$ sudo tar zxvf libxml2-2.6.30.tar.gz         // extract it
$ cd libxml2-2.6.30/                                    // enter the directory

2.1.2 use command “configure” to check and configure the system environment and generate the configured files. Command lines as follow:
$ ./configure –prefix=/usr/local/libxml2
the option –prefix=/usr/local/libxml2 here is to tell the installer to install it to directory /usr/local/libxml2 .When it finished, there will be a tips “Done configuring”, as the pic shows below.
Selection_106

2.1.3 use  command “make” to compile and generate install files
$ sudo make                                                          // compile
Here comes a error:
In function ‘open’,inlined from ‘xmlNanoHTTPSave__internal_alias’ at nanohttp.c:1588:12:

/usr/include/x86_64-linux-gnu/bits/fcntl2.h:51:24: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments

solution:
open and edit the nanohttp.c which is  on the current directory,see the 1588th line, and modify
fd = open(filename, O_CREAT | O_WRONLY);                   to
fd = open(filename, O_CREAT | O_WRONLY,0777);
as the pic shows below.
Selection_108

2.14 use command”make install” to install the software.Command lines as follow:
$ sudo make install                                               // install
if installed success, there will be 5 subdirectories bin, include ,lib, man and share under /usr/local/libxml2/, as the pic shows below.
Selection_109
*when we install php5 later, we’ll add “–with-libxml-dir=/usr/local/libxml2” to the configure options to  specify the location of  libxml2 library files.

2.2 install the newest libmcrypt library files
2.2.1 download the libmcrypt-2.5.8.tar.gz from the link above or the official site, and put it into the directory /usr/local/src/, then extract it to directory libxml2-2.6.30/ and then get into that derectory. Command lines as follow:
$ cd /usr/local/usr/                                      // enter the directory which the source package lays
$ sudo tar libmcrypt-2.5.8.tar.gz                // extract it
$ cd libxml2-2.6.30/                                    // enter the directory

2.2.2 use command “configure” to check and configure the system environment and generate the configured files. Command lines as follow:
$ ./configure –prefix=/usr/local/libmcrypt
the option –prefix=/usr/local/libmcrypt here is to tell the installer to install it to directory /usr/local/libmcrypt.
Here will use the g++ complier, and if there is not a g++, you should first do the sudo apt-get install g++ first.

2.2.3 use  command “make” to compile and generate install files
$ sudo make                                                          // compile

2.2.4 use command”make install” to install the software.Command lines as follow:
$ sudo make install                                              // install
if installed success, there will be 5 subdirectories bin, include ,lib, man and share under /usr/local/libmcrypt/, as the pic shows below.
Selection_110
*when we install php5 later, we’ll add “–with-mcrypt-dir=/usr/local/libmcrypt” to the configure options to  specify the location of  libmcrypt library files.

2.2.5 install the libltdl library files
when finished installing the libmcrypt, enter into the directory /usr/local/src/libmcrypt-2.5.8, and then enter the subdirectory libltdl. Follow the command lines below to finish the configure, compile and install:
$ cd /usr/local/src/libmcrypt-2.5.8/libltdl    // enter the directory which the source package lays
$ ./configure  –enable-ltdl-install                  // configure it
$ make                                                             // compile
$ make install                                                  // install
if installed success, there will be a header file ltdl.h under the directory /usr/local/include,as the pic show below.
Selection_112

2.3 install the newest zlib library files
2.3.1 download the zlib-1.2.7.tar.gz from the link above or the official site, and put it into the directory /usr/local/src/, then extract it to directory zlib-1.2.7/ and then get into that derectory. Command lines as follow:
$ cd /usr/local/usr/                                      // enter the directory which the source package lays
$ sudo tar zxvf zlib-1.2.7.tar.gz                  // extract it
$ cd zlib-1.2.7/                                             // enter the directory

2.3.2 use command “configure” to check and configure the system environment and generate the configured files. Command lines as follow:
$ ./configure
you’d better not use the option –prefix=/usr/local/zlib here, because it will lead to failing  to locate the zlib library when install libpng.

2.3.3 use  command “make” to compile and generate install files
$ sudo make                                                          // compile

2.3.4 use command”make install” to install the software.Command lines as follow:
$ sudo make install                                              // install
if installed success, there will be 3 subdirectories include ,lib and share under /usr/local/zlib/, as the pic shows below.
Selection_113*when we install php5 later, we’ll add “–with-zlib-dir=/usr/local/zlib” to the configure options to  specify the location of  zlib library files.

2.4 install the newest libpng library files

2.4.1 Download the file: libpng-1.6.0.tar.gz from the above link or the official site , put it under /usr/local/src/, and extract it to libpng-1.6.0/, then enter the directory using following command:

$ cd /usr/local/usr/                                      // enter the directory where the source code is
$ sudo tar zxvf libpng-1.6.0.tar.gz             // extract the file
$ cd libpng-1.6.0/                                        // enter the current directory

2.4.2 Check and configure the installation environment with “configure” command, which will generate installation configuration file.  The command line as follows:

$ ./configure –prefix=/usr/local/libpng

“–prefix=/usr/local/libpng” means that the installing software will be installed under /usr/local/libpng.

ERROR: configure: error: zlib not installed

Solution at this blog: http://keping.me/2013-3-12-2/ (see the English version… I don’t like this solution but it’s the only effective one I have ever found. 🙁 )

2.4.3 use the make command to compile the source file and generate the installation file:

$ make                                                          // compile

2.4.4 use command make install to install:

$ make install                                              // install

If the installation succeeded, there would be four directories(bin/, include/, lib/, share/)generated under /usr/local/libpng, as following picture:

* When installing the GD2 lib, it should add the option –with-png-dir=/usr/local/libpng behind configure command to locate the position of libpng file.

2.5 install the newest jpeg6 library files

2.5.1 Download the jpegsrc.v6b.tar.gz file from above link or the official site,  put it under /usr/local/src/, and extract it into  directory jpeg-6b/  and then enter the current directory jpeg-6b/. Commands as follows:

$ cd /usr/local/usr/                                      // enter the directory where the source file is
$ sudo tar zxvf jpegsrc.v6b.tar.gz              // extract the file
$ cd jpeg-6b/                                                // enter the current directory

2.5.2 We need to create the installation directory manually when installing the jpeg6 lib files before installing the GD2. The installation directory will not be created automatically. The command as follows:

$ sudo mkdir /usr/local/jpeg6                          // create a installation directory
$ sudo mkdir /usr/local/jpeg6/bin                   // create a directory saving commands
$ sudo mkdir /usr/local/jpeg6/lib                     // create a jpeg6 directory
$ sudo mkdir /usr/local/jpeg6/include              // create a directory saving header files
$ sudo mkdir -p /usr/local/jpeg6/man/man1   // create a directory saving manual

2.5.3 Check and configure the installation environment with “configure” command, which will generate installation configuration file.  The command line as follows: ( for displaying explicitly, use “\” to split the command for several lines):

$ sudo ./configure \
> –prefix=/usr/local/jpeg6/ \                // install the software into /usr/local/jpeg6
> –enable-shared \                                 // GUN’s libtool will be used when creating shared lib
> –enable-static                                       // GUN’s libtool will be used when creating static  lib

2.5.4 use the make command to compile the source file and generate the installation file:

$ make                                                          // compile

ERROR:

./libtool –mode=compile gcc -O2 -I. -c ./jcapimin.c
make: ./libtool: Command not found
make: *** [jcapimin.lo] Error 127

Solution:  http://keping.me/2013-4-12/ ( see the English version…:) )

2.5.5 use command make install to install:

$ make install                                              // install

* When installing the GD2 lib, it should add the option –with-jpeg-dir=/usr/local/jpeg6 behind configure command to locate the position of jpeg lib file.

So far, we have installed so many packages as following picture~~~Have a rest, please~~

2.6 install the newest freetype library files

2.6.1 Download the file freetype-2.3.5.tar.gz on the above link or the official site, put it under /usr/local/src/, and extract it into freetype-2.3.5/ and then enter the current directory. The commands as follows:

$ cd /usr/local/usr/                                      //  enter the directory where the source code is
$ sudo tar zxvf freetype-2.3.5.tar.gz          // extract the file
$ cd freetype-2.3.5/                                     // enter the current directory

2.6.2 Check and configure the installation environment with “configure” command, which will generate installation configuration file.  The command line as follows:

$ ./configure –prefix=/usr/local/freetype

“–prefix=/usr/local/freetype” means that the installing software will be installed under /usr/local/freetype.

2.6.3 use the make command to compile the source file and generate the installation file:
$make                                                      // compile

2.6.4 use command make install to install:
$ make install                                              // install

If the installation succeeded, there would be four directories(bin/, include/, lib/, share/)generated under /usr/local/freetype, as following picture:

* When installing the freetype lib, it should add the option –with-jpeg-dir=/usr/local/freetype behind configure command to locate the position of freetype lib file.

2.7 install the newest autoconf library files

2.7.1 Download the file autoconf-2.61.tar.gz on the above link or the official site, put it under /usr/local/src/, and extract it into autoconf-2.61/ and then enter the current directory. The commands as follows:

$ cd /usr/local/usr/            // enter the directory where the source code is
$ sudo tar zxvf autoconf-2.61.tar.gz          // extract the file
$ cd autoconf-2.61/                              // enter the current directory

2.7.2 Check and configure the installation environment with “configure” command, which will generate installation configuration file.  The command line as follows:
$ ./configure

ERROR: configure: error: GNU M4 1.4 is required

Solution: $ sudo apt-get install m4

2.7.3 use the make command to compile the source file and generate the installation file:
$make                                                      // compile

2.7.4 use command make install to install:
$ make install                                              // install

2.8 install the newest GD library files

2.8.1 Download the file gd-2.0.35.tar.gz on the above link or the official site, put it under /usr/local/src/, and extract it into gd-2.0.35/ and then enter the current directory. The commands as follows:

$ cd /usr/local/usr/            // enter the directory where the source code is
$ sudo tar zxvf gd-2.0.35.tar.gz          // extract the file
$ cd gd-2.0.35/                              // enter the current directory

2.8.2 Check and configure the installation environment with “configure” command, which will generate installation configuration file.  The command line as follows:

$ sudo ./configure \
> –prefix=/usr/local/gd2/ \                             // install the software into /usr/local/gd2
> –with-zlib=/usr/local/zlib/ \                         // locate zlib
> –with-jpeg=/usr/local/jpeg6/ \                    // locate jpeg6
> –with-png=/usr/local/libpng/ \                    // locate libpng
> –with-freetype=/usr/local/freetype/           // locate freetype 2.x font lib

2.8.3 use the make command to compile the source file and generate the installation file:
$make                                                      // compile

ERROR: gd_png.c:16:53: fatal error: png.h: No such file or directory

Solution: http://keping.me/2013-3-13/( see the English version 🙂 )

2.8.4 use command make install to install:
$ make install                                              // install

If the installation succeeded, there would be four directories(bin/, include/, lib/, share/)generated under /usr/local/gd2, as following picture:

* When installing the GD2 lib, it should add the option –with-jpeg-dir=/usr/local/gd2/ behind configure command to locate the position of GD lib file.

2.9 install the newest Apache server

2.9.1 Download the file httpd-2.4.4.tar.gz on the above link or the official site, put it under /usr/local/src/, and extract it into httpd-2.4.4/ and then enter the current directory. The commands as follows:

$ cd /usr/local/usr/            // enter the directory where the source code is
$ sudo tar zxvf  httpd-2.4.4.tar.gz          // extract the file
$ cd httpd-2.4.4/                              // enter the current directory

2.9.2 Check and configure the installation environment with “configure” command, which will generate installation configuration file.  The command line as follows: ( for displaying explicitly, use “\” to split the command for several lines):

$ sudo ./configure \
> –prefix=/usr/local/apache2 \                // specify the installation location of Apache
> –sysconfdir=/etc/httpd  \                             // specify the location saving configuration files of Apache server
> –with-z=/usr/local/zlib/ \                             // specify the location of zlib
> –with-included-apr  \                                    // using the copy of bundled APR / APR-Util
> –disable-userdir \                                          // requests mapped to user-specific directories
> –enable-so \                                                   // compiled as dynamic sharing object(DSO)
> –enable-deflate=shared \                             // reduce the support of transmission encoding
> –enable-expires=shared \                            // support the control of the header files expiration
> –enable-rewrite=shared \                            // url control based on rules
> –enable-static-support                                 // create a support of a statically linked version

ERROR: configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/.

Solution: http://keping.me/2013-3-13-2/ (see the English version 🙂 )

2.9.3  use the make command to compile the source file and generate the installation file:
$make                                                      // compile

2.9.4 use command make install to install:
$ make install                                              // install

If the installation succeeded, there would be twelve directories(bin/, build/, cgi-bin/, error/, htdocs/, icons/, include/, lib/, logs/, man/, manual/, modules/)generated under /usr/local/apache2, as following picture:

2.9.5 Start Apache server using following command:

$ sudo /usr/local/apache2/bin/apachectl start

ERROR: AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive globally to suppress this message

Solution: modify the file httpd.conf under the directory /etc/httpd( the location specified when installing Apache server), as following picture:

and use following command to modify the file:

$ sudo vim /etc/httpd/httpd.conf

find the location of ServerName, as following picture:

add a line “ServerName localhost” under the ServerName, as following picture:

Restart Apache server with following command:

sudo /usr/local/apache2/bin/apachectl restart

To check whether it started successfully, use the grep command:

$ ps -ef | grep httpd

If there are 4/5 lines output, it started successfully, as following picture:

Also, we can check it by entering “localhost” in the your browser. If succeeded, the following content will occur:

2.9.6 Run on startup

Each server software need to be configured to run on startup. About Apache, we just need to add the start command line of Apache server in the file “/etc/rc.local”. Command as follows:

$ sudo vim /etc/rc.local

2.10 install the Mysql

2.10.1 Download the file mysql-5.6.10.tar.gz on the above link or the official site, put it under /usr/local/src/, and extract it to mysql-5.6.10/, and enter the current directory. The commands as follows:
$ cd /usr/local/usr/            // enter the directory where the source code is
$ sudo tar zxvf  mysql-5.6.10.tar.gz         // extract the file
$ cd mysql-5.6.10/                              // enter the current directory

2.10.2 Install cmake. The mysql 5.5 doesn’t use “./configure” command to configure and change to cmake, so we should install cmake. Check if there is cmake in your system with command as follows:

$ cmake -version

If there is no output as the following picture

you should install it by yourself:

$ sudo apt-get install cmake

2.10.3 Add new user group:

$ sudo groupadd mysql

2.10.4 Add new user:

$ sudo useradd mysql -g mysql

2.10.5 Create a new directory of database execution file :

$ sudo mkdir -p /usr/local/mysql

2.10.6 Create a new directory of new data file

$ sudo mkdir -p /db/mysql/data

2.10.8 Modify the directory owners:

$ sudo chown -R mysql:mysql /usr/local/mysql
$ sudo chown -R mysql:mysql /db/mysql/data
$ sudo chown -R mysql:mysql /usr/local/mysql/.
$ sudo chown -R mysql:mysql /db/mysql/data/.

2.10.8 Configure with cmake:

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/db/mysql/data \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306

ERROR:CMake Error at cmake/readline.cmake:83 (MESSAGE):
Curses library not found. Please install appropriate package,

remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
cmake/readline.cmake:126 (FIND_CURSES)
cmake/readline.cmake:193 (MYSQL_USE_BUNDLED_LIBEDIT)
CMakeLists.txt:325 (MYSQL_CHECK_READLINE)

Solution: according the prompt, install the missing package ncurses:

$ sudo apt-get install libncurses5-dev

adn then delete the cache files under current diretory:

$ sudo rm CMakeCache.txt

then reconfigure using cmake. Just copy commands above.

2.10.9 use the make command to compile the source file and generate the installation file:
$sudo make                                                      // compile

It shall take a long time to compile:

2.10.10 use command make install to install:
$ sudi make install                                              // install

2.10.11 copy the configuration file

$ sudo cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

2.10.12 enter the installation path:

$ cd /usr/local/mysql

2.10.13 run the configuration script;

$ sudo ./scripts/mysql_install_db –user=mysql –datadir=/db/mysql/data

2.10.14 copy the service start script:

$ sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

2.10.15 start MySQL:

$ sudo service mysql start

2.10.16 set  password for root:

$ sudo /usr/local/mysql/bin/mysqladmin -u root password 123456

2.10.17 run on startup:

$ sudo update-rc.d mysql defaults

2.10.18 set mysql as system command:

$ sudo ln -s /usr/local/mysql/bin/* /bin/

after that, just execute the following command:

$ mysql -u root -p

you can login to mysql

2.10.19 set access permission

During installing MySQL, the application mysql_install_db installed the MySQL database authorization table. This table defines the initial accounts and authorizations of MySQL, and all accounts have no passwords. These accounts are super user accounts, they can perform any operations. Root account’s initial has no password, so anyone an use the root account without password to connect to MySQL server and get all permissions, which means MySQL installation is unprotected. If you want to prevent client form connecting without password, you should specify a password for anonymous account or delete anonymous account and set a password for MySQL users. Start MySQL client  console with “mysql –u root” to connect to MySQL server, command as follows:

$ mysql -u root -p

use the password set above (123456) to login, and perform:

mysql> DELETE FROM mysql.user WHERE Host=’localhost’ AND User=”;
Query OK, 1 rows affected (0.08 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 1 rows affected (0.01 sec)

This means MySQL installed succeessfully~~

2.11 install the PHP

2.11.1 Download the file php-5.3.22.tar.gz on the above link or the official site, put it under /usr/local/src/, and extract it to php-5.3.22/, and enter the current directory. The commands as follows:
$ cd /usr/local/usr/            // enter the directory where the source code is
$ sudo tar zxvf  pcphp-5.3.22.tar.gz          // extract the file
$ cd php-5.3.22/                              // enter the current directory

2.11.2 Check and configure the installation environment with “configure” command, which will generate installation configuration file.  The command line as follows: ( for displaying explicitly, use “\” to split the command for several lines):

$ sudo ./configure \
> –prefix=/usr/local/php \                                                     // set the installation path for PHP5
> –with-config-file-path=/usr/local/php/etc \                     // specify the path saving PHP5 configuration files
> –with-apxs2=/usr/local/apache2/bin/apxs \                   // locate Apache2
> –with-mysql=/usr/local/mysql/ \                                      // specify the installation directory of PHP5
> –with-libxml-dir=/usr/local/libxml2/ \                             // locate libxml2
> –with-png-dir=/usr/local/libpng/ \                                   // locate libpng
> –with-jpeg-dir=/usr/local/jpeg6/ \                                    // locate jpeg
> –with-freetype-dir=/usr/local/freetype/ \                        // locate freetype
> –with-gd=/usr/local/gd2/ \                                                // locate gd
> –with-zlib-dir=/usr/local/zlib/ \                                         // locate zlib
> –with-mcrypt=/usr/local/libmcrypt/ \                              // locate libmcrypt
> –with-mysqli=/usr/local/mysql/bin/mysql_config \       // locate  MySQLi
> –enable-soap \                                                                    // enable SOAP
> –enable-mbstring=all \                                                       // enable multiple string
> –enable-sockets                                                                   // enable socket

2.11.3 use the make command to compile the source file and generate the installation file:
$make                                                      // compile
2.11.4 use command make install to install:
$ make install                                              // install
2.11.5 Create configuration file. Specify the location of configuration file by adding the option “–with-config-file-path=/usr/local/php/etc/” when using “configure” command to install the configuration. Copy the “php.ini- dist” file from the source directory to specified
directory “/usr/local/php/etc/” and change its name to “php.int”:

$ sudo cp php.ini-dist /usr/local/php/etc/php.ini      // create the configuration

2.11.6 Integrate Apache and PHP. Before compiling PHP, we add the option “–with-apxs2=/usr/local/apache2/bin/apxs” behind the configure command to make PHP as the Apache function. But we still need to modify Apache configuration file by adding PHP support to tell Apache certain extensions as PHP parse. For example, let Apache parse files with extensions like .php and .phtml to PHP. Open Apache configuration file /etc/httpd/httpd.conf, find the line “AddType application/x-gzip .gz .tgz” and under it add a command line “Addtype application/x-httpd- php .php .phtml”. Files with any extension can be parsed to PHP, as long as we add the type to the added command and separated with backspace, as following picture:

We add a line “AddType application/x-httpd-php-source .phps” in the end to take the file with .phps extensions as PHP source file for syntax highlighting.

2.11.7 Restart Apache server, for only after the restart changes of configuration file would take effect:

$ sudo /usr/local/apache2/bin/apachectl stop           // stop Apache service
$ sudo /usr/local/apache2/bin/apachectl start           // start Apache service

2.11.8 Test the PHP environment. Create a directory named phpinfo/ under /usr/local/apache2/htdocs and create a file named index.php. Add following lines to the file:

<?php
phpinfo();
?>

Open your browser enter the URL”http://localhost/phpinfo/index.php”, if the following picture occurs, it means your LAMP is successfully installed.

The function phpinfo() is to output most information about the PHP current status. It includes the information of compilation and extension, the PHP version, server information and environment, PHP environment, system information, path, local configuration value , HTTP header information and PHP License. Due to the different of each system’s installation, the  function phpinfo() can be used to check the configuration of a particular system and available predefined variable. It’s also a valuable debug tool, because it includes all EGPCS data(Environment,GET,POST,Cookie,Server).

large

ahaaaaaaaaaaaaaa~

Finally, we finished it

Sophia 译

Ubuntu下PHP扩展cURL

开发php的时候遇到一个错误,

Fatal error: Call to undefined function curl_init()

Google了一下,网上基本都是你抄我,我抄你,还不能解决,我勒个擦。还是自己动手吧,结合以前经验,解决方法如下:

0. 前提。我的php开发环境是用源码包编译、安装而成的。并且保留了php的源码包。

1. 安装cURL。
1.1 进入/usr/local/src目录,命令如下:
$ cd /usr/local/src

1.2 下载cURL源码包,可以通过命令下载,也可以直接去http://curl.haxx.se/download/选择版本下载,然后copy到该目录。如果是敲命令,如下:
$ sudo wget http://curl.haxx.se/download/curl-7.17.1.tar.gz

1.3 配置。在当前目录下执行命令:
$ sudo ./configure –prefix=/usr/local/curl

1.4 编译,命令如下:
$ sudo make

1.5 安装,命令如下:
$ sudo make install

如果安装成功以后,在/usr/local/curl/目录下将生成bin、include、lib和share四个目录。
Selection_135

2. 扩展php。
2.1 进入php源码包(不是安装以后的)位置/ext/curl/目录,我的在/usr/local/src/php-5.3.22/ext/curl,如下图所示Selection_134

2.2 在当前目录下,通过phpize可以建立php的外挂模块,命令如下:
$ sudo /usr/local/php/bin/phpize
其中/usr/local/php/是我的php安装路径,有可能与各位不一样。

2.3 配置扩展,命令如下:
$ sudo ./configure –with-php-config=/usr/local/php/bin/php-config –with-curl=/usr/local/curl

2.4 编译,命令如下:
$ sudo make

2.5 安装,命令如下:
$ sudo make install

安装成功后,会在/usr/local/php/lib/php/extensions目录下生成no-debug-zts-20090626(php版本不同,这个名称也许不同)目录,该目录下就能看到生成的curl.so文件,如下图所示。
Selection_136

2.6 修改php.ini配置文件,添加extension=”/usr/local/php/lib/php/extensions/no-debug-zts-20090626/curl.so”,如下图所示
Selection_137

2.7 重启apache服务器,完成。

Ubuntu搭建LAMP环境(jpeg-6b 安装错误 ,找不到libtool命令)

继续安装php开发环境,

jpeg-6b make的时候错误:

./libtool –mode=compile gcc -O2 -I. -c ./jcapimin.c
make: ./libtool: Command not found
make: *** [jcapimin.lo] Error 127

看提示应该是没有安装libtool,由于才拿到手里的服务器,什么都没装,出现这个错误也正常。

解决办法:安装libtool

1 在上面的链接或者网上下载 libtool-2.2.6a.tar.gz,放到/usr/local/src/目录下,解压软件包到当前目录libtool-2.2.6下,并进入libtool-2.2.6目录,命令如下:
$ cd /usr/local/usr/                                      // 进入源码包所在目录
$ sudo tar zxvf libtool-2.2.6a.tar.gz           // 解压缩
$ cd libtool-2.2.6                                         // 进入目录

2 使用“configure”命令检查并配置安装需要的系统环境,并生成安装配置文件,命令行如下:
$ ./configure
安装到默认路径就可以。

3 使用make命令编译源码文件并生成安装文件,命令如下:
$ sudo make                                                    // 编译

4 使用make install命令进行安装,命令如下:
$ sudo make install                                         // 安装

5 复制libtool中的config.sub和config.guess文件至jpeg-6b根目录,命令如下:
$ cd /usr/local/src/jpeg-6b/
$ sudo cp /usr/local/share/libtool/config/config.sub .
$ sudo cp /usr/local/share/libtool/config/config.guess .

6 重新配置并编译、安装jpeg-6b,命令如下:
$ sudo ./configure \
> –prefix=/usr/local/jpeg6/ \                             // 安装时将软件安装到/usr/local/jpeg6目录下
> –enable-shared \                                              // 建立共享库使用的GNU的libtool
> –enable-static                                                   // 建立静态库使用的GNU的libtool
$ sudo make                                                        // 编译
$ sudo make install                                             // 安装

7 Done.
————————————-华丽丽的分割线,下面是英语版———————–

English Version:

Continue to install the PHP environment.
An error occured when make jpeg-6b:

./libtool –mode=compile gcc -O2 -I. -c ./jcapimin.c
make: ./libtool: Command not found
make: *** [jcapimin.lo] Error 127

According the prompt, the libtool isn’t installed. It’s normal to have this error on a bare machine.

Solution: install libtool, of course!

1. Download the file libtool-2.2.6a.tar.gz on the above link or the official site, put it under /usr/local/src/, and extract it into libtool-2.2.6/ and then enter the current directory. The commands as follows:

$ cd /usr/local/usr/            // enter the directory where the source code is
$ sudo tar zxvf libtool-2.2.6a.tar.gz           // extract the file
$ cd libtool-2.2.6                              // enter the current directory

2. Check and configure the installation environment with “configure” command, which will generate installation configuration file.  The command line as follows:
$ ./configure
we can just install it in the default path.

3. use the make command to compile the source file and generate the installation file:
$make                                                      // compile

4. use command make install to install:
$ make install                                              // install

5. copy the config.sub and config.guess of libtool to jpeg-6b/, command as follows:
$ cd /usr/local/src/jpeg-6b/
$ sudo cp /usr/local/share/libtool/config/config.sub
$ sudo cp /usr/local/share/libtool/config/config.guess

6. reconfigure, compile and install jpeg-6b, commands as follows:
$ sudo ./configure \
> –prefix=/usr/local/jpeg6/ \                                   //install the software into /usr/local/jpeg6
> –enable-shared \                                       // GUN’s libtool will be used when creating shared lib
> –enable-static                                           // GUN’s libtool will be used when creating static  lib
$ sudo make                                                        // compile
$ sudo make install                                             // install

7. Done

ubuntu下PHP安装pdo_mysql扩展

在linux下使用yii框架的时候,遇到一个错误

“CDbConnection failed to open the DB connection: could not find drive ”

google了一下,然后去/yii路径/requirements/index.php确认了是由于PDO MYSQL extension 没有安装的原因(PDO MYSQL extension 后面出现了Warning)。

解决方法:

1.进入php源码包中的/etc/pdo_mysql目录,我的在

cd /usr/local/src/php-5.3.22/ext/pdo_mysql 

在当前目录执行phpize(在php的安装路径里的bin/目录里,我的在

/usr/local/src/php-5.3.22/ext/pdo_mysql$  /usr/local/php/bin/phpize

2.配置

在当前目录下执行

./configure –with-php-config=/usr/local/php/bin/php-config –with-pdo-mysql=/usr/local/mysql

其中/usr/local/mysql是我的mysql安装目录

3.编译安装

make一下,然后make install

安装成功以后,会在/usr/local/php/lib/php/extensions/no-debug-zts-20090626目录有pdo_mysql.so文件

其中no-debug-non-zts-20090626可能会根据你下的php源码包不同而有所不同,如no-debug-non-zts-20050922等

4.修改配置文件

修改php.ini文件,添加扩展语句

extension=”/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/pdo_mysql.so”

5.重启apache,完成。

6.在phpinfo中就可以看到扩展成功

Selection_101

7.在yii的/requirements/index.php中也可以看到Warning变成了Passed

Selection_102

Yii框架Register模块开发流程

本文用以下五个步骤来详细介绍:

1. 用gii创建所需Module, Model, Controller,Crud以及Form

2. 注册界面显示部分(以下则以access模块作为例子讲解)

3. 编辑逻辑部分代码

4. 修改Controller

5. 总结

一. 用gii创建所需Module, Model, Controller,Crud以及Form

在浏览器输入地址http://127.0.0.1/icampus/sns/index.php?r=gii进入gii界面,输入密码123456,进入可视化代码生成工具页面。按照module -> model -> controller -> crud -> form 的顺序分别生成代码。

1

1.选择Module Generator,在Module ID输入框中输入模块名称access(为了演示这里输入的是access2,以后类同),点击Preview,确认没错以后点击Generate即可生成代码。

2

然后可以在icampus\sns\protected\modules文件夹下看到生成的access2文件夹。

 2.把上图中代码部分添加到\icampus\sns\protected\config\main.php中的modules数组里面,以便可以访问,如下图所示。

3

3. 点击Model Generator,参照下图的输入,填入所需内容,如表名前缀icp_access;注册所需要用的表示user,所以Table Name这里填入icp_access_user;Model Class可自定义,不妨用AccessUser2来创建;然后输入正确的Model Path。

4

至此model也建立好了,可以在icampus\sns\protected\modules\access2文件夹下看到多出来一个model文件夹,里面有model文件AccessUser2.php

4. 点击Controller Generator,参照下图所示,填写具体输入框。Controller ID这里填写module名称/model名称,即access2/AccessUser2

5

然后点击Generate,即会在模块的controller文件夹(icampus\sns\protected\modules\access2\controllers)下生成AccessUser2Controlller.php

5. 点击Crud Generator,参考下图填写

6

然后点击Generate即可

6. 点击Form Generator,参考下图填写各个输入框

7

点击Generate即可生成所需要的form页面。然后会提示将下列代码添加到controller中。

8

打开AccessUser2Controlller.php,将上述方法复制进去即可。

至此,注册模块所有需要自动生成的步骤已经完成。注意:最好按顺序来(module -> model -> controller -> crud -> form)

二. 注册界面显示部分(以下则以access模块作为例子讲解)

1.由于数据库中字段如lastlogin, salt等是不需要用户输入的,所以首先必须在view中去掉这些部分;由于注册的时候需要用户重复密码以及为了防止恶意注册采取了验证码,必须在view中添加这两个字段。

打开\icampus\sns\protected\modules\access\views\accessUser文件夹中register.php

[php] <div class="row">
<?php echo $form->labelEx($model,’name’); ?>
<?php echo $form->textField($model,’name’); ?>
<?php echo $form->error($model,’name’); ?>
</div>

<div class="row">
<?php echo $form->labelEx($model,’password’); ?>
<?php echo $form->passwordField($model,’password’); ?>
<?php echo $form->error($model,’password’); ?>
</div>

<div class="row">
<?php echo $form->labelEx($model,’passwordConfirm’); ?>
<?php echo $form->passwordField($model,’passwordConfirm’); ?>
<?php echo $form->error($model,’passwordConfirm’); ?>
</div>

<div class="row">
<?php echo $form->labelEx($model,’verifyCode’); ?>
<?php echo $form->textField($model,’verifyCode’); ?>
<?php echo $form->error($model,’verifyCode’); ?>
</div>
<div class="row">
<?php $this->widget(‘CCaptcha’); ?>
</div>[/php]

可以看到每一个字段都是写在一个div里的,可以很方便的让我删除或者添加,div组中的

form->labelEx表示要显示的说明文字;

form->passwordField表示采取的格式;

form->error表示错误提示;

从上面代码可以看到,我们保留的字段有name,password,passwordConfirm,以及verifyCode。其中密码输入框不能明文显示,所以采用form->passwordField形式;用户名与验证码输入框需要明文显示,所以我们采用form->textField形式。

最后三行即是显示验证码图片。

效果图如下图所示。

1

三. 编辑逻辑部分代码

由于刚才我们删除了一些字段显示,又添加了一些字段显示。所以需要作一些逻辑修改。

1. 打开icampus\sns\protected\modules\access\models文件下下的AccessUser.php,首先添加两个public字段,如果不声明为public,会导致访问出错。

[php]
public $passwordConfirm;
public $verifyCode;
[/php]

2. 修改下面这个函数,将上述两个字段在要求用户输入的时候,需要显示的说明文字写上去。比如需要用户重复输入密码的时候,我希望显示的提示信息是“Confirm your password”

[php]
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels()
{
return array(
‘id’ => ‘ID’,
‘name’ => ‘Name’,
‘password’ => ‘Password’,
‘lastlogin’ => ‘Lastlogin’,
‘passwordConfirm’ => ‘Confirm your password’,
‘verifyCode’ => ‘repeat the following code’,
‘salt’ => ‘Salt’,
);
}
[/php]

3. 修改下面的函数,添加规则。由于两次密码必须一致,所以给passwordConfirm添加一条验证规则(即下面代码中的13行),验证码也需要添加规则(下面代码中的15行)。

[php]
/**
* @return array validation rules for model attributes.
*/
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array(‘name, password, salt’, ‘length’, ‘max’=>255),
array(‘lastlogin’, ‘safe’),

//the "passwordConfirm" shoud be equal to the "password"
array(‘passwordConfirm’, ‘compare’, ‘compareAttribute’=>’password’),
//the verifyCode
array(‘verifyCode’, ‘captcha’, ‘on’=>’register’, ‘allowEmpty’=>!extension_loaded(‘gd’)),

// The following rule is used by search().
// Please remove those attributes that should not be searched.
array(‘id, name, password, lastlogin, salt’, ‘safe’, ‘on’=>’search’),
);
}
[/php]

4. 如果需要,重写beforeSave()函数。因为注册的时候,需要作给密码加密等操作,所以我重写了beforeSave()函数

[php]/**
* Author: HuKeping
* Date: 2013-4-1 22:08:00
* Brief: override the super beforeSave() function to do some thing before save the record to database.
* salt is a unix timestamp by the time of the very moment.
* password is encoded by md5 and then attached with the md5ed salt string and md5 the new string again.
* lastlogin is initialized with the time of the very moment.
* set the timezone to PRC is to make the timezone correct.
*
*/
public function beforeSave()
{
if($this->isNewRecord)
{
$salt = time(); //get the unix timestamp here
date_default_timezone_set(‘PRC’); //set the timezone to PRC
$this->lastlogin = date(‘Y-m-d H:i:s’, time()); //the timestamp in mysql is not the same with it in php
$salt = md5($salt); //encode the salt by md5
$password = md5(md5($this->password) . $salt); //md5 again
$this->password = $password; //set the password
$this->salt = $salt; //set the salt
}
else
{
return false;
}
return parent::beforeSave();
}[/php]

注意1:如果没有出错,一定要返回true,否则记录不会插入数据库

注意2:最好在验证以后,保存之前,在beforeSave()里进行所需要的编码(如md5加密)等操作,否则有可能会验证出错(比如密码与md5过后的密码比较),导致save()操作失败。

四. 修改Controller

需要在controller中添加访问规则以及action等。打开\icampus\sns\protected\modules\access\controllers文件夹下AccessUserController.php

1. 在下面的函数中,把‘register’以及启用验证码‘captcha’添加进所有用户的权限中

14

2. 为了使用验证码,需要添加一个action,如下图所示

[php]
/**
*
* Author: HuKeping
* Date: 2013-4-1 15:48:22
* Brief: add the verification action
* minLength is the mininum number of characters that used to as the verify code
* maxLength is the maximum number of characters that used to as the veryfy code
* when minLength == maxLength, the number of bytes is set, otherwise it’s random.
*/
public function actions()
{
return array(
‘captcha’=>array(
‘class’ => ‘CCaptchaAction’,
‘backColor’ => 0xCCCCCC,
‘minLength’ => 4,
‘maxLength’ => 4,
),
);
}
[/php]

其中数组中的各个参数已经在注释中写明。

3. 修改自动生成的actionRegister函数,如下图所示

16

至少添加最后一句 $model->save(),即更新数据库。执行这一句之前,框架会自动执行刚才写的beforeSave()。执行完save()以后,整个注册流程也到此结束。

五. 总结

总的来说,流程就是

  1. gii自动生成模块
  2. 根据需求修改视图
  3. 根据视图修改逻辑
  4. 修改权限、规则等。

不算读书笔记的笔记——《murder in Mesopotamia》

IMG_0026

Somehow,the more I get older,and the more I see of people and sadness and illness and everything,the sorrier I get for everyone
                                                                ————–Leatheran, the nurse
其实,自己几个月读的书,还不如人家两周读的书多。可也是喜欢不是么,也愿意这一小小爱好随意写写,让脑子从代码堆里暂时解放出来。

呐,在开头的开头,是偶然在未明BBS看到的一篇帖子,提到了阿加莎和她的作品,看着挺有意思,加上正好当时手头上书已经读完啦,就决定去买一本阿婆的书来瞅瞅。大家好像对《古墓之谜》评价挺高的,作为第一次读人家作品的菜鸟级人物,当然听大家的最保险啦:)

本来打算买中文版的,又见很多人说翻译得太烂(其实也许不是译者水平烂,只是文化差异在那里摆着,有很多东西翻译以后就失去那种意境、那种味道了),所以此书就在某一天落到了我的口袋里。至于为什么中文叫《古墓之谜》,英文叫《murder in Mesopotamia》,就没有去深究了,很常见的现象。

算起来这是我看的第二本英文小说,第一本《who moved my cheese》单词比较简单,这本看起来就比较费劲了,不过终于,在那天回本部的地铁上看完了,耶~!虽然不是句句清晰,甚至都不能记全书中人物的名字,但也算掌握了故事的大概。

跟所有悬疑小说一样,往往最不起眼的或者最不可能的或者在感情上最不能接受的,往往就是凶手,差别只在于作案的手法,这大概也才是吸引读者的地方。这本书自然是把这些细节描写得淋漓尽致,但我印象最深的却是他们之间的爱情纠葛以及最后小护士的一番自我体会——Somehow,the more I get older,and the more I see of people and sadness and illness and everything,the sorrier I get for everyone。不知道该怎么翻译才恰当,只是觉得自己也是这样,越大越有一种抱歉的情绪在滋生。

好啦,写完啦,所以说不像是一篇读书笔记嘛。而且本来也不咋会写的,呵呵O(∩_∩)O~.

PS:大学姐真好~今天陪我去逛书店买书,可是太累,地铁上都睡着了55。。

IMG_0311_25

 

晚安。

2013.3.28 00:48:32 @ my bed

其实,还是挺喜欢软微这座园子的

又到了周二晚上,明天周三(是的,这是废话),上午有课,下午例行跑校医院。

所以不用去实验室,所以可以翘一天班,所以心情大好,所以可以晃晃悠悠的在园子里散步,慢慢感受夜里的宁静,也感受这里的光与影。晃荡着来了兴致,索性跑回寝室把三脚架、照相机带出来,记录一下也不知道是倒数第几个还能呆在这里的夜晚。

白天的软微是荒凉的,荒凉到我只愿呆在实验室里。幸而夜色会还这里一份宁静。

本来夜里一个人出来散步就很容易有一些感触,也想写一些东西,但转念一下,老弟说得对啊,堂堂七尺男儿,矫情你妹儿,于是作罢。直接上图。

IMG_3597_1280

这是每天从寝室到实验室必经的石板小道,设计得还不错。

右边就是女生宿舍,拍的时候大学姐不知什么时候站我身后了,,,,,啊啊啊啊啊啊啊啊啊啊啊啊啊~我在大学姐心目中的形象毁了啊啊啊啊啊啊啊啊啊啊啊啊啊啊~好了,上图。

IMG_3625_25

大学姐也出来散步了,hurry!!!!!!!果断拉一起同行啊:)

那就不能继续拍这里了~~转拍那边转弯的路口吧,过去拍了挺多,选了一张自己感觉比较合适的。就是下面这张啦。

IMG_3645_25

嘿嘿,大学姐也觉得这张不错,心情一好,决定赐一个合拍机会~于是有了下面这张HoHoHo~

IMG_3639_25

可为什么我的鞋子下面那么黑啊。。。。。。。。。。。。

不说了,说多了都是泪,再传一张白天校园草地的图吧,在下雨,光线不是很好~~附带大学姐一枚:)

IMG_5587_12.5

草地中间那些一块儿一块儿的是园丁师傅修剪草坪以后留下来的枯草,让他们重回泥土当肥料有木有,天然绿色有机肥O(∩_∩)O哈哈~

再传一张小花园的

IMG_0320_3

 

这就是花园区啦,正确面是宿舍楼和某些专业的实验小别墅楼。

Enjoy!