busybox filesystem httpd php-5.5.31 sqlite3 webserver

   2023-02-08 学习力0
核心提示:/******************************************************************** *busybox filesystem httpd php-5.5.31 sqlite3 webserver * 声明: * 本文主要是记录使用httpd、php5、sqlite3搭建php web服务器。 * * 2016-1-24 深圳 南山平山村 曾剑锋 *********
/********************************************************************
 *      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://***.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的接口可以避免这个错误。

 busybox filesystem httpd php-5.5.31 sqlite3 webserver

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • php-fpm进程管理的三种模式 phpfpm子进程
    php-fpm进程管理的三种模式 phpfpm子进程
    php-fpm解读-进程管理的三种模式—程序媛大丽标明转载以示尊重 感谢原作者的分享。php-fpm进程管理一共有三种模式:ondemand、static、dynamic,我们可以在同一个fpm的master配置三种模式,看下图1。php-fpm的工作模式和nginx类似,都是一个master,多个worke
    03-08
  • nginx和php-fpm 是使用 tcp socket 还是 unix s
    tcp socket允许通过网络进程之间的通信,也可以通过loopback进行本地进程之间通信。unix socket允许在本地运行的进程之间进行通信。分析从上面的图片可以看,unix socket减少了不必要的tcp开销,而tcp需要经过loopback,还要申请临时端口和tcp相关资源。但是
    03-08
  • [PHP8] 我参加了PHP8工程师认证初学者考试beta考试
    [PHP8] 我参加了PHP8工程师认证初学者考试beta
    前几天,2022/08/05,PHP工程师认证机构PHP8 技术员认证初级考试宣布实施考试将于 2023 年春季开始。和 beta 测试完成于 2022/09/11所以我收到了。一般社团法人BOSS-CON JAPAN(代表理事:Tadashi Yoshimasa,地点:东京都世田谷区,以下简称“BOSS-CON JAPAN
    03-08
  • 将 PHP Insights 放入旧版 PJ 不是很好吗?谈论
    将 PHP Insights 放入旧版 PJ 不是很好吗?谈论
    介绍在最近的PHP系统开发中,感觉故事在理所当然包含静态分析工具的前提下进行。我的周围现有代码很脏,我很久以前安装了工具,但几乎没有检查已经观察到许多这样的案例。 (这是小说。而不是像 0 或 100 这样不允许单行错误的静态分析,一点一点,逐渐我想介
    03-08
  • PHP基于elasticsearch全文搜索引擎的开发 php使
    1.概述:全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接
    02-09
  • php视图操作
    一、视图的基本介绍         视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。        使用视图需要MySQL5及以后的版本支持。        下面是视图的一些常见应用:        重用SQL语句;        简化复杂的S
    02-09
  • php中图像处理的常用函数 php图形图像处理技术
    php中图像处理的常用函数 php图形图像处理技术
    1.imagecreate()函数imagecreate()函数是基于一个调色板的画布。?php $im = imagecreate(200,80);                //创建一个宽200,高80的画布。$white = imagecolorallocate($im,225,35,180);     //设置画布的背景颜色imagegif($im);
    02-09
  • PHP安全之webshell和后门检测
    PHP安全之webshell和后门检测
    基于PHP的应用面临着各种各样的攻击:XSS:对PHP的Web应用而言,跨站脚本是一个易受攻击的点。攻击者可以利用它盗取用户信息。你可以配置Apache,或是写更安全的PHP代码(验证所有用户输入)来防范XSS攻击SQL注入:这是PHP应用中,数据库层的易受攻击点。防范
    02-09
  • php使用时间戳保存时间的意义 PHP获取时间戳
    时间戳记录的是格林尼治时间,使用date格式化的时候会根据你程序设置的不同时区显示不同的时间。如果使用具体时间,则还需要进行多一步转换。
    02-09
  • PHP 获取提交表单数据方法
    PHP $_GET 和 $_POST变量是用来获取表单中的信息的,比如用户输入的信息。PHP表单操作在我们处理HTML表单和PHP表单时,我们要记住的重要一点是:HTML页面中的任何一个表单元素都可以自动的用于PHP脚本:表单举例: htmlbodyform action="welcome.php" method
    02-09
点击排行