我们都知道, 机房里 24 小时不停机的计算机是服务器, 而家里使用的笔记本或台式机是个人电脑. 大部分程序员都有个人电脑, 笔记本. 这些家里的个人电脑在用的时候开机, 用完了就关机, 所以, 一些需要 24 小时执行的任务无法放在个人电脑上, 只能放在服务器上执行 -- 即使只是一些小任务. 事实上, 每个人家里都有几台 24 小时不关机的服务器, 只是你没用意识到它们可以当做服务器, 它们就是你们的安卓手机, 安卓手机的底层就是 Linux, 如果你家里有旧的安卓手机, 千万别丢, 我们可以把它改造成一个小型的服务器.
之前的文章里我介绍了如何在安卓手机上安装 Linux, 下面我将介绍如何在这个安装了 Linux 的手机上安装 Lighttpd + PHP + sqlite3 组合.
之所以选择 https://www.lighttpd.net/ 而不是 apache, 是考虑到手机的性能毕竟不如服务器, 尽量采用轻量级的软件. 下载, 编译, 安装 lighttpd 的步骤如下:
- wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.45.tar.gz
- tar xvf lighttpd-1.4.45.tar.gz
- cd lighttpd-1.4.45
- ./configure
- make
- sudo make install
安装过程中会出现一些问题, 首先报的错误是缺少 C/C++ 编译器, 这是因为手机上安卓的 Linux 系统比较精简, 缺少很多编译软件需要的东西. 执行下面命令:
sudo apt-get install build-essential
build-essential 是一个工具包, 里面包含了编译 Linux 内核需要的一些基本的工具和类库, 包括 C 编译. 安装完 build-essential 后, 在继续安装的过程中还发现缺少几个类库, 下面列出的就是遇到的编译问题和解决方法.
错误 1
configure: error: pcre-config not found, install the pcre-devel package or build with -without-pcre
解决方法:
sudo apt-get install libpcre3-dev
错误 2
configure: error: zlib-headers and/or libs were not found, install them or build with -without-zlib
解决方法:
sudo apt-get install zlib1g-dev
错误 3
configure: error: bzip2-headers and/or libs were not found, install them or build with -without-bzip2
解决方法:
sudo apt-get install libbz2-dev
解决了上面三个问题, Lighttpd 的编译安装过程很顺利. 接着安装 PHP:
- http://117.75.20.11/files/10070000027BB8AD/cn2.php.net/distributions/php-5.6.30.tar.gz
- tar xvf PHP-5.6.30.tar.gz
- cd PHP-5.6.30
- ./configure
- make
- sudo make install
安装过程中可能会遇到一个错误:
configure: error: xml2-config not found. Please check your libxml2 installation.
解决方法是:
sudo apt-get install libxml2-dev
这个编译过程比较费时, 大概要半个小时. 安装完 Lighttpd 和 PHP 后, 我们需要将它们结合到一起, 只需要在 Lighttpd 的配置文件里添加下面的内容:
- fastcgi.server = ( ".php" =>
- ( "localhost" =>
- (
- "socket" => "/tmp/php-fastcgi.socket",
- "bin-path" => "/usr/local/bin/php"
- )
- )
- )
Lighttpd 是 web 服务器, PHP 是动态脚本语言, 我们还需要一个数据库, 在 PHP5 里内置了 sqlite3 数据, 我们可在 PHP5 里直接调用 SQLite3, 下面是一个使用 PHP 访问 SQLite 数据的例子:
- <?PHP
- /**
- * Simple example of extending the SQLite3 class and changing the __construct
- * parameters, then using the open method to initialize the DB.
- */
- class MyDB extends SQLite3
- {
- function __construct()
- {
- $this->open('mysqlitedb.db');
- }
- }
- $db = new MyDB();
- $db->exec('CREATE TABLE foo (bar STRING)');
- $db->exec("INSERT INTO foo (bar) VALUES ('This is a test')");
- $result = $db->query('SELECT bar FROM foo');
- var_dump($result->fetchArray());
- ?>
是不是非常的简单! 这个服务架构都安装好了, 下面我们就可以在上面放置一些服务程序了.
附: 安装过程中遇到的很多错误是缺少了相关的类库, 工具包, 可以用下面的命令一次安装完成:
sudo apt-get install build-essential zlib1g zlib1g-dev zlibc libxml2 libxml2-dev libpcre3-dev libbz2-dev
来源: http://www.webhek.com/post/instll-lighttpd-php-sqlite3-on-android-arm-linux.html