busybox filesystem httpd php-5.5.31 sqlite3 webserver
2016-01-24 17:32
666 查看
/******************************************************************** * 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的接口可以避免这个错误。
相关文章推荐
- HTTP的长连接和短连接
- 【Java】下载网络上的图片并保存到本地目录
- WIFI网络访问(一)
- 多看Kindle的“导出失败,请检查网络或账号”错误的解决
- 分析tcp-rst数据报文产生场景以及判断谁主动断开连接
- 使用ODBC创建数据源出现未发现 ”Oracle(TM) 客户端和网络组件“问题解决方案
- 网络爬虫
- 网络流学习笔记
- 使用JS实现倒计时功能(http://www.cnblogs.com/doll-net)
- 高级特性(3)- 网络
- 计算机网络——体系结构
- Android程序开发通过HttpURLConnection上传文件到服务器
- hadoop - hadoop2.6 分布式 - 集群环境搭建 - 系统搭建和网络配置
- HttpClient容易忽视的细节——连接关闭
- 扇区 物理块 逻辑块 flash 基础概念【网络收集】
- android Http通信局域网测试详解
- 浅谈HTTP中Get与Post的区别
- HTTP报文详解
- Http 400 --- The request sent by the client was syntactically incorrect
- 两台win7电脑,双网卡主机共享网络(局域网和Internet)给从机