busybox filesystem httpd php-5.5.31 sqlite3 webserver

/********************************************************************
 *      busybox filesystem httpd php-5.5.31 sqlite3 webserver
 * 声明:
 *     本文主要是记录使用httpd、php5、sqlite3搭建php web服务器。
 *
 *                                 2016-1-24 深圳 南山平山村 曾剑锋
 *******************************************************************/

一、参考文章:
    1. Run busybox httpd with php
        https://box.matto.nl/busyboxphp.html
    2. Sqlite undefined reference to `sqlite3_open' error in Netbeans C++ on Ubuntu, Integrating SQLite into Netbeans C++ Ubuntu
        http://stackoverflow.com/questions/3463438/sqlite-undefined-reference-to-sqlite3-open-error-in-netbeans-c-on-ubuntu-in
    3. 嵌入式WEB服务器移植三部曲之PHP的移植
        http://blog.csdn.net/cos_sin_tan/article/details/7734278
    4. Real210 编译sqlite错误:.//libsqlite3.a(sqlite3.o): In function `unixDlSym’:
        http://www.jyguagua.com/?p=965
    5. 成功移植SQLite3到ARM Linux开发板
        http://www.myir-tech.com/bbs/thread-6189-1-1.html
    6. ARM上linux终端操作SQLITE,退格键问题
        http://www.programgo.com/article/61872541163/
    7. 用busybox做一个简单的文件系统
        http://blog.chinaunix.net/uid-9688646-id-3346880.html
    8. Using SQLite3 with PHP
        http://babbage.cs.qc.cuny.edu/courses/cs903/2013_02/using_sqlite3.html

二、测试busybox httpd:
    1. cat /www/index.html
        <h1>Welcome to Tinyfs</h1>
        <p>zengjf</p>
    2. shell命令:/usr/sbin/httpd -vv -f -h /www/
    3. 查看ARM板IP:
        [zengjf@root www]# ifconfig eth0
        eth0      Link encap:Ethernet  HWaddr 1E:ED:19:27:1A:B3
                  inet addr:10.0.1.52  Bcast:10.0.1.255  Mask:255.255.255.0
                  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                  RX packets:39 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:33 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:1000
                  RX bytes:4990 (4.8 KiB)  TX bytes:4050 (3.9 KiB)

        [zengjf@root www]#
    4. PC机浏览器访问:http://10.0.1.52/
        经验证获取到了正确信息,Vim里贴不上图,就不贴图了。
    5. shell响应如下:
        [zengjf@root www]# /usr/sbin/httpd -vv -f -h /www/
        10.0.1.50:55185: url:/
        10.0.1.50:55185: response:200
三、编译、安装、测试php-5.5.31
    1. ./configure -host=arm-linux-gnueabihf -prefix=/usr/local/php -disable-all -enable-pdo -with-sqlite3 -with-sqlite -with-pdo-sqlite -with-zlib -without-iconv
    2. make
        1. 错误
            ext/sqlite3/libsqlite/sqlite3.o: In function `unixDlError':
            /home/Qt/rootfs/busybox/php/php-5.5.31/ext/sqlite3/libsqlite/sqlite3.c:31521: undefined reference to `dlerror'
            ext/sqlite3/libsqlite/sqlite3.o: In function `unixDlClose':
            /home/Qt/rootfs/busybox/php/php-5.5.31/ext/sqlite3/libsqlite/sqlite3.c:31552: undefined reference to `dlclose'
            ext/sqlite3/libsqlite/sqlite3.o: In function `unixDlSym':
            /home/Qt/rootfs/busybox/php/php-5.5.31/ext/sqlite3/libsqlite/sqlite3.c:31548: undefined reference to `dlsym'
            ext/sqlite3/libsqlite/sqlite3.o: In function `unixDlOpen':
            /home/Qt/rootfs/busybox/php/php-5.5.31/ext/sqlite3/libsqlite/sqlite3.c:31507: undefined reference to `dlopen'
            collect2: error: ld returned 1 exit status
            make: *** [sapi/cli/php] Error 1
        2. 解决方法:
            修改Makefile中的:
                EXTRA_LIBS = -lcrypt -lcrypt -lrt -lz -lm -lcrypt -lcrypt
            为:
                EXTRA_LIBS = -lcrypt -lcrypt -lrt -lz -lm -lcrypt -lcrypt -ldl
        3. 效果:
            end_closures.lo Zend/zend_float.lo Zend/zend_string.lo Zend/zend_signal.lo Zend/zend_generators.lo Zend/zend_objects.lo Zend/zend_object_handlers.lo Zend/zend_objects_API.lo Zend/zend_default_classes.lo Zend/zend_execute.lo main/internal_functions_cli.lo sapi/cgi/cgi_main.lo sapi/cgi/fastcgi.lo -lcrypt -lcrypt -lrt -lz -lm -lcrypt -lcrypt -ldl  -o sapi/cgi/php-cgi

            Build complete.
            Don't forget to run 'make test'.
    3. sudo make install
    4. 拷贝PC机/usr/local/php目录下文件到:<filesystem root>/usr/local/php
    5. 配置httpd.conf:
        cat /etc/httpd.conf
            *.php:/usr/local/php/bin/php-cgi
    6. cat /www/test.php
        <?
            phpinfo();
        ?>
    7. PC机浏览器访问:http://10.0.1.52/test.php
        1. 报错现象:
        This PHP CGI binary was compiled with force-cgi-redirect enabled. This means that a page will only be served up if the REDIRECT_STATUS CGI variable is set, e.g. via an Apache Action directive.
        For more information as to why this behaviour exists, see the manual page for CGI security.
        For more information about changing this behaviour or re-enabling this webserver, consult the installation file that came with this distribution, or visit the manual page.
        2. 解决办法:
            将force-cgi-redirect设置disable。
    8. 查看php.ini位置:
        [zengjf@root /usr/local/php/bin]# ./php-cgi -i | grep ini
        <tr><td class="e">Configuration File (php.ini) Path </td><td class="v">/usr/local/php/lib </td></tr>
        <tr><td class="e">Loaded Configuration File </td><td class="v">/usr/local/php/lib/php.ini </td></tr>
        <tr><td class="e">Scan this dir for additional .ini files </td><td class="v">(none) </td></tr>
        <tr><td class="e">Additional .ini files parsed </td><td class="v">(none) </td></tr>
        <tr><td class="e">user_ini.cache_ttl</td><td class="v">300</td><td class="v">300</td></tr>
        <tr><td class="e">user_ini.filename</td><td class="v">.user.ini</td><td class="v">.user.ini</td></tr>
        <tr><td class="e">Classes </td><td class="v">AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException </td></tr>
    9. 配置php.ini:
        cat /usr/local/php/lib/php.ini
            cgi.force_redirect = 0
            cgi.redirect_status_env ="yes";
    10. PC机浏览器访问:http://10.0.1.52/test.php
        经验证获取到了正确信息,Vim里贴不上图,就不贴图了。
    11. shell响应如下:
        [zengjf@root /usr/local/php/lib]# /usr/sbin/httpd -vv -f -h /www/
        10.0.1.50:58652: url:/
        10.0.1.50:58652: response:200
        10.0.1.50:58656: url:/test.php

四、编译、安装、测试sqlite3:
    1. ./configure --host=arm-linux-gnueabihf --prefix=/usr/local/sqlite
    2. make
    3. sudo make install
        1. 报错:
            libtool: install: /usr/bin/install -c .libs/libsqlite3.a /usr/local/sqlite/lib/libsqlite3.a
            libtool: install: chmod 644 /usr/local/sqlite/lib/libsqlite3.a
            libtool: install: arm-linux-gnueabihf-ranlib /usr/local/sqlite/lib/libsqlite3.a
            ./libtool: line 1720: arm-linux-gnueabihf-ranlib: command not found
            make[1]: *** [install-libLTLIBRARIES] Error 127
            make[1]: Leaving directory `/home/Qt/rootfs/busybox/sqlite/sqlite-autoconf-3100200'
            make: *** [install-am] Error 2
        2. 解决方法:
            是由于使用了sudo,导致环境变丢失,用su切换到root用户,再重新设置环境变量来解决。
    4. 拷贝/usr/local/sqlite中的文件到<filesystem root>下对应的目录。
    5. 建立软链接:ln -s /bin/sqlite3 /bin/sqlite
    6. 不能使用退格键(backspace):
        1. 错误现象:
            [zengjf@root ~]# sqlite
            SQLite version 3.10.2 2016-01-20 15:27:19
            Enter ".help" for usage hints.
            Connected to a transient in-memory database.
            Use ".open FILENAME" to reopen on a persistent database.
            sqlite> shw^H^H^H^H^H
        2. 解决方法:
            终端执行shell命令:stty erase ^H
    7. 在ARM板上运行效果如下:
        [zengjf@root ~]# sqlite
        SQLite version 3.10.2 2016-01-20 15:27:19
        Enter ".help" for usage hints.
        Connected to a transient in-memory database.
        Use ".open FILENAME" to reopen on a persistent database.
        sqlite> .show
                echo: off
                 eqp: off
          explain: off
             headers: off
                mode: list
           nullvalue: ""
              output: stdout
        colseparator: "|"
        rowseparator: "\n"
               stats: off
               width:
        sqlite> .quit
        [zengjf@root ~]#
    8. cat /www/teatdb.php
        <?
            $db = new SQLite3('my_database') or die('Unable to open database');
            $query = <<<EOD
              CREATE TABLE IF NOT EXISTS users (
                username STRING PRIMARY KEY,
                password STRING)
        EOD;    # 这里一定要顶格
            $db->exec($query) or die('Create db failed');
            $query = <<<EOD
              INSERT INTO users VALUES ( 'zengjf', 'root' )
        EOD;    # 这里一定要顶格
            $db->exec($query) or die("Unable to add user $user");
            $result = $db->query('SELECT * FROM users') or die('Query failed');
            while ($row = $result->fetchArray())
            {
              echo "User: {$row['username']}\nPasswd: {$row['password']}\n";
            }
        ?>
    9. PC机浏览器访问:http://10.0.1.52/testdb.php
        经验证获取到了正确信息,Vim里贴不上图,就不贴图了。
    10. shell响应如下:
        [zengjf@root ~]#
        127.0.0.1:54905: url:/
        127.0.0.1:54905: response:200
        10.0.1.50:51536: url:/testdb.php
    11. 可能错误:
        1. Fatal error: Class 'SQLiteDatabase' not found in /www/testdb.php on line 3
        2. 这是由于移植的sqlite3,可能这里使用的是sqlite的接口,
           使用sqlite3的接口可以避免这个错误。

 

时间: 2024-10-27 01:32:29

busybox filesystem httpd php-5.5.31 sqlite3 webserver的相关文章

busybox filesystem matrix-gui-2.0 undefined function json_encode()

/******************************************************************************** * matrix-gui-2.0 undefined function json_encode() * 声明: * 本文解决matrix-gui-2.0中遇到的: * Fatal error: * Call to undefined function json_encode() in /www/generate.php on line

busybox filesystem add ldd function

/******************************************************************** * busybox filesystem add ldd function * 声明: * 本文主要是为了解决缪新建提出的查看程序涉及到动态链接库的问题. * * 2016-1-23 深圳 南山平山村 曾剑锋 *******************************************************************/ 一.参考文章

busybox filesystem udhcpc 原理

/******************************************************************** * busybox filesystem udhcpc 原理 * 声明: * 本文主要是记录busybox中的如何运用udhcpc获取IP,参考文章里写的 * 很详细,不再累赘. * * 2016-1-23 深圳 南山平山村 曾剑锋 ***************************************************************

busybox filesystem ifup

/******************************************************************** * busybox filesystem ifup * 声明: * 本文主要是记录busybox文件系统中ifup使用报错的解决方式. * * 2016-1-24 深圳 南山平山村 曾剑锋 *******************************************************************/ 一.错误处理1: 1. 现象:

busybox filesystem ts_config: No such file or directory

/******************************************************************** * busybox filesystem ts_config: No such file or directory * 声明: * 本文主要是记录移植tslib时遇到: * No raw modules loaded. ts_config: No such file or directory * 问题如何解决. * * 2016-1-23 深圳 南山平山村

Run busybox httpd with php, sqlite

/*********************************************************************************** * Run busybox httpd with php, sqlite * * * 2016-1-20 深圳 南山平山村 曾剑锋 **********************************************************************************/ 文章出处: Run busyb

使用skyeye运行uboot, linux-2.6.31和busybox

LDD6410工程网址为: http://code.google.com/p/ldd6410 代码通过svn管理,获取方法: # Non-members may check out a read-only working copy anonymously over HTTP. svn checkout http://ldd6410.googlecode.com/svn/trunk/ ldd6410-read-only 本页讲解如何使用LDD6410工程的代码在skyeye中运行uboot.2.6

在 CentOS 7 CPanel 服务器上安装 MariaDB 10

MariaDB 是一个增强版的.开源的 MySQL 替代品.它主要由 MariaDB 社区在维护,采用 GPL v2 授权许可.软件的安全性是 MariaDB 开发者的主要焦点.他们保持为 MariaDB 的每个版本发布安全补丁.当有任何安全问题被发现时,开发者会尽快修复并推出 MariaDB 的新版本. MariaDB 的优势 完全开源 快速且透明的安全版本 与 MySQL 高度兼容 性能更好 比 MySQL 的存储引擎多 在这篇文章中,我将谈论关于如何在 CentOS7 CPanel 服务器

fdisk分区命令详解与fdisk非交互式分区

1.说明:fdisk如何来学习     fdisk,就是在linux中用来分区的一个命令了,至于详细的参数,可以man一下,这里给出实际应用过程中最常用的用法,因为这样比起单纯讲命令的语法功能更能掌握一个命令的实际用法.     下面的过程是在我自己的实验环境中搭建,先把简要的过程看一下: (1)添加一块1GB的磁盘 (2)fdisk详细分区过程 (3)通知Linux内核分区信息的更改 (4)格式化分区 (5)挂载分区     OK!我相信这样一个过程下来,你是真正可以做到添加一块硬盘,并自己做