仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3585|回复: 19

[学习教程] PHP教程之编译成绩

[复制链接]
灵魂腐蚀 该用户已被删除
发表于 2015-2-16 00:28:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在学习HTML中我想边学边做是最有效的方式,当然这一方式对于学习PHP同样是最有效的。编译|成绩   这章节汇集了良多编译时会发生的毛病情形。 1. 我用匿名CVS失掉最新版的源代码包, 但没有设置装备摆设剧本文件! 2. 我在设置装备摆设 PHP 在 Apache下任务时出了成绩。 它说不克不及找到 httpd.h, 可是我看它就在那边! 3. 当我运转conifgure时,它说它不克不及找到include文件或 一些库: GD, gdbm, 或其它的一些包! 4. 我在编译文件 language-parser.tab.c时, 失足,提醒: yytname undeclared. 5. 当我运转 make, 后来正常但 终究掉败了,在毗连最初的使用时,失足说找不到一些文件。 6. 在毗连 PHP 时, 出一堆错说 undefined references。 7. 我不清晰如何在 Apache 1.3下编译PHP。 8. 我依照步调一步一步装置了Apache模块(Unix下), 可是在阅读器里翻开 PHP 剧本时它却问我是不是要保留。 9. 体系说利用: --activate-module=src/modules/php4/libphp4.a, 可那文件基本不存在, 我只好改成 --activate-module=src/modules/php4/libmodphp4.a 好了,它不任务了! 该怎样办? 10. 我要把PHP编译成Apache的静态模块,用: --activate-module=src/modules/php4/libphp4.a 可是体系说我的编译器不是 ANSI 兼容的。 11. 我用 --with-apxs编译PHP时, 我老是失掉一些奇异的毛病。 12. 在 make时, 我失掉良多关于microtime毛病, 还有很多 RUSAGE_ stuff. 13. 我想晋级PHP,我在哪可以看到我如今运转的PHP 确当初设置装备摆设装置时所利用的./configure 一行的内容? 14. 编译带GD库的PHP时,它不是给一些奇异的错, 就是履行时发生 segfaults 段毛病.
1. 我用匿名CVS失掉最新版的源代码包, 但没有设置装备摆设剧本文件!

你必需装置 GNU autoconf 包,如许可以从 configure.in生成设置装备摆设剧本文件. 只需运转在CVS办事器失掉源代码的顶级目次下的 ./buildconf。 (注重, 除非你运转configure --enable-maintainer-mode 选项, 设置装备摆设剧本是不会从头生成, 即便configure.in 文件已更新, 所以当你发明 configure.in 改动了,你也要手工做一遍. 在config或config.status 运转后应当在你的Makefile里能看到象@VARIABLE@如许的标号。)
2. 我在设置装备摆设 PHP 在 Apache下任务时出了成绩。 它说不克不及找到 httpd.h, 可是我看它就在那边!

你要告知 configure/setup 剧本 Apache 的顶级目次的地位。 就是说你要标明 --with-apache=/path/to/apache , 而不是 --with-apache=/path/to/apache/src.
3. 当我运转conifgure时,它说它不克不及找到include文件或 一些库: GD, gdbm, 或其它的一些包!

你可以看看 configure 剧本,那些头文件或非尺度库的地位,要送一些特别的标记给C预处置器。例如:
  1. CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
复制代码
假设你的shell利用 csh-variant , 那末它将会是 (为何?):
  1. env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
复制代码

4. 我在编译文件 language-parser.tab.c时, 失足,提醒: yytname undeclared.

你需求更新你的 Bison 版本. 你可以在 ftp://ftp.gnu.org/pub/gnu/bison/找到最新版本.
5. 当我运转 make, 后来正常但 终究掉败了,在毗连最初的使用时,失足说找不到一些文件。

一些老版本的 make 不克不及把 functions 目次下的编译的文件放到统一个目次下, 试着运转 cp *.o functions 然后再运转 make 看看是不是会好些。 假如好了,你真的应当更新你的GNU Make的版本了。
6. 在毗连 PHP 时, 出一堆错说 undefined references。

看看文件里的毗连行,确认一切的相干包都已准确包括。凡是如许是由于短少'-ldl',还有一些你想撑持的数据库包。
假如你是在毗连到 Apache 1.2.x, 你记得要在在EXTRA_LIBS 行增添一些额定的信息 而且重运转 Apache's Configure 剧本吗? 拜见刊行包里的 INSTALL 文件。
良多人说他们一增添 '-ldl' 即刻失掉了 libphp4.a 。
7. 我不清晰如何在 Apache 1.3下编译PHP。

现实上很复杂,按上面的步调:


  • 获得 Apache 1.3 源代码,鄙人面的地位 http://www.apache.org/dist/.

  • 在某个目次下解压出来, 如 /usr/local/src/apache-1.3.

  • 在PHP的刊行包目次下,编译 PHP ,./configure --with-apache=/<path>/apache-1.3 ( 用户实践的apache-1.3目次地位替换 <path> .

  • 打入: make 然后: make install 编译PHP,拷必需的文件到Apache目次下。

  • 改动到你的 /<path>/apache-1.3/src 目次,编纂 Configuration文件. 把上面的行增添到文件里: AddModule modules/php4/libphp4.a.

  • 打入: ./Configure 然后: make.

  • 如许你就有了一个 httpd 文件!


注重:你也能够利用新的Apache ./configure 剧本. 见刊行包里的 README.configure 固然也要看看PHP刊行包里的 INSTALL 文件。
8. 我依照步调一步一步装置了Apache模块(Unix下), 可是在阅读器里翻开 PHP 剧本时它却问我是不是要保留。

这意味着你的PHP模块没有被加载。你可从上面三点来反省:


  • 确认你运转的Httpd是你方才编译了PHP的Httpd. 可以运转: /path/to/binary/httpd -l
    假如你没有看到 mod_php4.c 列出来,那末你运转了不准确的Httpd. 最好从头装置它。

  • 确认你在 Apache .conf 文件里增添了准确的Mime 类型.它应当是如许: AddType application/x-httpd-php3 .php3 ( PHP 3)
    或 AddType application/x-httpd-php .php ( PHP 4)
    也包管 AddType 这行没有包含在 <Virtualhost> 或 <Directory> 块里,它们会使它有效。

  • 最初, Apache 1.2 和 Apache 1.3默许的设置装备摆设文件的地位是分歧的. 你应当反省你增添了AddType行的设置装备摆设文件的地位 . 你可以在 httpd.conf 放一些分明的毛病或改动,如许假如这文件被读的话,体系会告诉你。


9. 体系说利用: --activate-module=src/modules/php4/libphp4.a, 可那文件基本不存在, 我只好改成 --activate-module=src/modules/php4/libmodphp4.a 好了,它不任务了! 该怎样办?

请注重 libphp4.a 现实其实不存在. apache 历程会创立它!
10. 我要把PHP编译成Apache的静态模块,用: --activate-module=src/modules/php4/libphp4.a 可是体系说我的编译器不是 ANSI 兼容的。

这个毛病动静是 Apache 误导的,可以用更新版原本修改它。
11. 我用 --with-apxs编译PHP时, 我老是失掉一些奇异的毛病。

呈现如许的情形可以从三点来反省. 第一, 由于某种缘由,Apache 在编译apxs Perl 剧本的时分, 它没有创立恰当的标记变量, 找到你的apxs剧本 (尝尝号令 which apxs, 凡是在 /usr/local/apache/bin/apxs or /usr/sbin/apxs. 翻开它找到象上面如许的行:
  1. my $CFG_CFLAGS_SHLIB  = ' ';          # substituted via Makefile.tmplmy $CFG_LD_SHLIB      = ' ';          # substituted via Makefile.tmplmy $CFG_LDFLAGS_SHLIB = ' ';          # substituted via Makefile.tmpl
复制代码
假如你看到的是如许,那末成绩就出在这里. 由于值里包括的是空格或其它不准确的值, 如 'q()'. 把它样酿成象上面的那样:
  1. my $CFG_CFLAGS_SHLIB  = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmplmy $CFG_LD_SHLIB      = 'gcc';                   # substituted via Makefile.tmplmy $CFG_LDFLAGS_SHLIB = q(-shared);              # substituted via Makefile.tmpl
复制代码
第二种能够仅仅呈现在Red Hat 6.1 和 6.2上. apxs 剧本 Red Hat 版有错. 看这行:
  1. my $CFG_LIBEXECDIR    = 'modules';         # substituted via APACI install
复制代码
假如你看到了,就把它改成上面的行:
  1. my $CFG_LIBEXECDIR    = '/usr/lib/apache'; # substituted via APACI install
复制代码
第三, 你如果 重设置装备摆设/重装置 Apache, 必需在 ./configure 后,在 make之前,履行make clean
12. make时, 我失掉良多关于microtime毛病, 还有很多 RUSAGE_ stuff.

在装置过程当中 make时,假如你看到上面的错:
  1. microtime.c: In function `php_if_getrusage':microtime.c:94: storage size of `usg' isn't knownmicrotime.c:97: `RUSAGE_SELF' undeclared (first use in this function)microtime.c:97: (Each undeclared identifier is reported only oncemicrotime.c:97: for each function it appears in.)microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function)make[3]: *** [microtime.lo] Error 1make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard'make[2]: *** [all-recursive] Error 1make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard'make[1]: *** [all-recursive] Error 1make[1]: Leaving directory `/home/master/php-4.0.1/ext'make: *** [all-recursive] Error 1
复制代码
那是你的体系失足了. 你应当修复 /usr/include 文件.详细做法是装置和你的glibc婚配的glibc-devel 包. 这些错相对和PHP有关,为了证实,你可以如许做:
  1. $ cat >test.c <<X#include <sys/resource.h>X$ gcc -E test.c >/dev/null
复制代码
假如失足,证实你的包括文件受损了.
13. 我想晋级PHP,我在哪可以看到我如今运转的PHP 确当初设置装备摆设装置时所利用的./configure 一行的内容.?

你可以看你装置PHP源目次下的 config.nice 文件. 假如不可还有别的一种办法.你只需复杂运转
  1. <?php phpinfo(); ?>
复制代码
剧本. 在输入页面的第一行,就是 ./configure 行, 是你现在用来设置装备摆设PHP的那行.
14. 编译带GD库的PHP时,它不是给一些奇异的错, 就是履行时发生 segfaults 段毛病.

你必需确认你在编译 GD 库 和 PHP 时所利用一样的依附库 (例如 libpng).   基础这个东西,有人问学php需要任何基础不?
小魔女 该用户已被删除
发表于 2015-2-16 04:27:36 | 显示全部楼层
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
再见西城 该用户已被删除
发表于 2015-2-17 11:28:25 | 显示全部楼层
本文当是我的笔记啦,遇到的问题随时填充
海妖 该用户已被删除
发表于 2015-2-21 06:01:45 | 显示全部楼层
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
飘灵儿 该用户已被删除
发表于 2015-2-25 07:14:14 | 显示全部楼层
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
兰色精灵 该用户已被删除
发表于 2015-3-7 17:43:59 | 显示全部楼层
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
第二个灵魂 该用户已被删除
发表于 2015-3-15 10:24:49 | 显示全部楼层
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
谁可相欹 该用户已被删除
发表于 2015-3-22 00:09:20 | 显示全部楼层
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
冷月葬花魂 该用户已被删除
发表于 2015-4-1 02:26:49 | 显示全部楼层
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
只想知道 该用户已被删除
发表于 2015-4-28 11:48:11 | 显示全部楼层
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
爱飞 该用户已被删除
发表于 2015-5-9 21:22:16 | 显示全部楼层
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
活着的死人 该用户已被删除
发表于 2015-5-12 11:59:04 | 显示全部楼层
实践是检验自己会不会的真理。
灵魂腐蚀 该用户已被删除
 楼主| 发表于 2015-6-15 00:30:13 | 显示全部楼层
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
变相怪杰 该用户已被删除
发表于 2015-6-20 13:05:38 | 显示全部楼层
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
若相依 该用户已被删除
发表于 2015-7-4 01:35:18 | 显示全部楼层
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
admin 该用户已被删除
发表于 2015-7-5 01:43:33 | 显示全部楼层
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
乐观 该用户已被删除
发表于 2015-7-6 04:39:25 | 显示全部楼层
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
精灵巫婆 该用户已被删除
发表于 2015-7-12 20:22:43 | 显示全部楼层
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
蒙在股里 该用户已被删除
发表于 2015-9-24 00:05:56 | 显示全部楼层
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
山那边是海 该用户已被删除
发表于 2015-9-27 10:09:09 | 显示全部楼层
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-17 02:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表