开发者社区> zengjf> 正文

busybox filesystem httpd php-5.5.31 sqlite3 webserver

简介: /******************************************************************** * busybox filesystem httpd php-5.5.31 sqlite3 webserver * 声明: * 本文主要是记录使用httpd、php5、sqlite3搭建php web服务器。
+关注继续查看
/********************************************************************
 *      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的接口可以避免这个错误。

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Run busybox httpd with php, sqlite
/*********************************************************************************** * Run busybox httpd with php, sqlite * ...
1276 0
PHP为什么可以连接MySQL?底层原理是什么?
PHP为什么可以连接MySQL?底层原理是什么?
73 0
php为什么选mysql作为数据库?
php为什么选mysql作为数据库?
30 0
PHP操作MySQL实现增删改查的底层原理是什么?
PHP操作MySQL实现增删改查的底层原理是什么?
53 0
Docker 可以通过创建多个容器,分别部署 Linux、Nginx、MySQL 和 PHP 等组件,为什么不可以一个容器包含所有呢?底层原理是什么?
Docker 可以通过创建多个容器,分别部署 Linux、Nginx、MySQL 和 PHP 等组件,为什么不可以一个容器包含所有呢?底层原理是什么?
116 0
基于PHP和MySQL的新闻发布系统——【功能优化】
基于PHP和MySQL的新闻发布系统——【功能优化】
33702 0
基于PHP和MySQL的新闻发布系统
基于PHP和MySQL的新闻发布系统
62 0
开心档-软件开发入门之PHP - AJAX 与 MySQL
本文主要讲解AJAX 可用来与数据库进行交互式通信。
52 0
如何修复“PHP 安装缺少 WordPress 所需的 MySQL 扩展”的错误?
在WordPress建站,WordPress定制开发过程中,开发者容易遇见“您的 PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展”的错误提示,如果出现这样的情况,应该怎么办?北京六翼信息有限公司的开发工程师指出,要修复错误“您的 PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展”,您需要确保您的 PHP 安装已正确安装和配置 MySQL 数据库驱动程序 (mysqlnd) 和 mysqli 扩展。只有这样,您才能恢复 WordPress 和 WordPress 数据库之间的正常连接,并让您的网站重新运行。
87 0
ECS配置mySQL\MariaDB和PHP环境
ECS配置mySQL\MariaDB和PHP环境
51 0
+关注
zengjf
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
PHP 2017.北京 全球开发者大会——高可用的PHP
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多