php源码安装

PHP即“超文本预处理器”。

PHP原始为Personal Home Page的缩写,已经正式更名为 \”PHP: Hypertext Preprocessor\”。

  • 服务端脚本,与web服务器的公共网关接口(CGI)交互解析PHP程序
  • 命令行脚本,与cron结合做任务调度
  • 调用相关扩展支持处理更多的功能,如图像,PDF,excel,邮件等

下载地址: https://www.php.net/distributions/php-8.0.8.tar.bz2

配置阶段:./configure

执行./configure时出现错误提示,大部分是因为缺省相关软件导致,看提示安装即可.

当出现Thank you for using PHP.即配置完成.

编译阶段:make

在1cpu,1G内存,1G交换空间的情况下,make命令会最高占用99%的cpu资源,内存最高使用600M左右.

如果说自有的ecs配置不高的情况下,选择源码编译并不是一个好的选择.

当出现Build complete.即编译完成.

安装阶段:make install

查看一看默认安装了哪些模块,php -m

其中发现了libxmlsqlite3这就是为什么在配置阶段会提示安装libxml2-devel,sqlite-devel的原因了.

vim /usr/local/php/php.ini

vim /usr/local/etc/php-fpm.conf

vim /usr/local/etc/php-fpm.d/www.conf

下载地址: http://nginx.org/download/nginx-1.21.0.tar.gz

fastcgi是cgi的升级版,php-fpm是php-cgi的升级版,https是http的升级版.

客户端与web服务器通过超文本传输协议(等)进行通信.

web服务器与php解析器(等)通过cgi(等)进行通信.

在nginx里配置fastcgi协议的相关参数,将数据通过9000端口传递出去.

vim /usr/local/nginx/conf/nginx.conf

生成一个测试文件 http://localhost/index.php

监听9000端口进行程序解析.

php-cgi

执行命令:

php-fpm

执行命令:php-fpm

vim /usr/local/etc/php-fpm.d/www.conf

php源码网站搭建方法和过程

web网站是我们上网的窗口,而网站是如何搭建的呢?今天我们来做一个介绍,以php代码为例来进行介绍(后续会介绍一下java代码搭建,如果想要我这里涉及的工具或源码请私信我)。

1、首先你需要去网上下载你想搭建的源码。

2、安装phpstudy或者其他apache和mysql集成性工具。(我这里用的是phpstudy)

3、把你下载的源码拷贝到phpstudy目录下的www目录里,如下图(这里用iwebshop为例):

拷贝完后直接在你的电脑访问就行了(用你电脑的ip,如果不知道是多少用ipconfig看一下)打开访问就是下图这个样,然后选择同意,点击“下一步”

点击“下一步”

这时候需要提前去mysql数据库中创建数据库iwebshop(名字随便取,只要在下一步填写一样就行)

按照上图“下一步”显示的把数据库配置的文件填写进去

记得记住自己创建的后台用户名密码。点击“下一步”

到这一步,就算安装完成了,记得按照提示把install目录删除掉把,不然会干扰使用

点击“到前台”如下图:

点击到后台如下图:

到此一个开源的php网站安装完成。

注意事项:在安装过程中注意提前创建数据库,记住数据库的配置信息,方便再安装源码过程中填写。

后端开发干货:PHP源码阅读技巧

作者:张勇,腾讯IEG后台开发工程师

时光匆匆 光阴似箭,今年已经是小张做码农的第N个年头了,得益于世界上最好的语言(PHP),小张的头发依旧茂密。但是项目写了一个又一个,PHP、swoole用到飞起,这些年的成长却大不如从前。

你是否也纠结于此,今天让我们换个角度看PHP,打开源码从C的角度看PHP,看一眼这个具有20年历史的庞大C项目是如何工作的。

从这一刻开始,你将荣升为C程序员,你可以去温习一下C的语法、结构体、指针和引用。

你也许会问,看个代码git拉一下用sublime打开不就好了吗,为什么要写个KM。确实这样可以看代码,但那叫看代码片段,不是看工程。PHP项目需要兼容Windows、Linux、Mac平台还要处理线程安全,其代码包含大量宏定义。我们需要借助IDE的自动跳转和提示才能更好的阅读。

我们需要一个IDE无错误提示的项目。(当你要看一个方法却无法跳转的时候,真是太难受了)

devCloud是内部用于开发调试的linux虚拟机。没有的小伙伴可以自己准备一台可以ssh的CentOS虚拟机,本地虚拟机或云平台都可以。(最好网络能好一点,后面要传不少东西)

后面我们需要使用Clion作为C项目的IDE,Clion需要使用cmake作为项目自动化构建工具。所以我们首先需要安装cmake devCloud上的yum默认的cmake版本为2.8.12.2符合要求,这里就直接用yum安装。

re2c 是语法生成器

devCloud的gdb版本过低,这里需要手动安装一个符合要求的版本,我选了7.8.2

选择一个php版本,这里我用7.1.33版本。 有几个理由:

1.项目中使用了这个版本。

2.php7对内核做了大量的改动,之前的php5已经不适合学习了。

3.后续会介绍的书籍也是基于php7.0的版本和php7.1比较接近。

4.php8目前还在测试,且和php7比较接近。

注意:本地远程都拉取一份,要保持tag一致,两边都要执行下面的cmake改造

工欲善其事必先利其器,要看代码需要选一个好的IDE,多年使用PhpStorm的我推荐使用全家桶里面的Clion。一般我们不会直接使用Linux做桌面系统,这里使用Clion的远程部署功能配合devCloud做环境部署。我的本地是Windows环境,构建编译在远端的devCloud进行。(用WSL也是一样的,但是PHP的git仓库太大在WSL中做git操作非常卡,应该是WSL文件系统的bug)

这一步是阻止大部分同学使用Clion查看PHP源码的主要原因。PHP项目由于历史悠久一直使用autoconfig作为项目自动管理工具。然而Clion并不支持autoconfig,它需要项目使用cmake构建,因此我们需要对php的源码做cmake构建改造。

https://wiki.php.net/internals/cmake 官网有一份cmake的改造文档。

https://github.com/gloob/php-cmake github上也有对应的代码。

但是这个文档和代码都太老了,应该是PHP5年代的代码。我对这个项目做了一些升级,兼容了PHP7(水平有限可能存在问题,欢迎提PR)。

在本地执行如下命令,clone php-cmake项目,切换分支,拷贝php-cmake/cmake中的所有文件到php源代码目录。注意目录合并。

这里设置远程机器的信息,设置相关工具的路径。一般会自己识别,如果不能识别可以手动输入。会检查版本,默认devCloud上的版本好像都不正确需要自己升级。

这里需要设置代码同步的目录,设置好以后点按√好设置为默认。完成上面Toolchains设置后,这里可能默认出现一个devCloud的信息,但是Mappings 里面的Deployment path是/tmp/目录下面,你可以删除自己配置,也可以直接修改Deployment path到你需要的项目目录。

注意:这里的Local path如果是windows上需要使用/分割路径,不是windows默认的\\,否则在执行cmake构建的时候会提示目录无法找到。

在Options里面可以设置 不要同步.phpt文件,这是php项目中的测试用例文件。(我们在拉代码的时候其实已经会手动保证本地和远程机器的文件一致,但是Clion还会自己同步一次,设置这个可以加速同步速度。)

同步代码到devCloud。首次同步真的很慢,你需要耐心等待。

执行cmake构建,看看报错不?

由于PHP cmake构建会在远端生成一些文件,我们需要同步这些文件到本地,否则打开代码会因为这部分.c .h文件不存在导致代码没有提示,各种报错。

选择比对方式 用Size adn Timestamp 会快一点,这里比较慢,耐心等待一下。

分析完成以后,就可以看到远程比本地多的文件了,我们需要把他们同步到本地。最上面的.clion.source.upload.marker 不需要同步,可以点击红框中的箭头取消。 之后点击同步。

打开php_cli.c看看源码,是不是干干净净一个红线都没有。

光看肯定是不行的,最好能把代码跑起来 打个断点可以更深入的了解运行机制。你可以用gdb去断点。我这里既然用了clion就直接用clion的断点功能,用起来更直观。

1、准备一个yong.php 写一点代码用来做测试文件。

2、这里配置运行配置。

3、设置 arguments 和 Working directory

4、把yong.php文件同步到远端。执行以下看看。

5、打断点。真的很爽~~

PHP项目有很多目录,大概功能如下:

其实和源代码相关的 只有这几个目录, 在Clion中标记为Source和Header目录方便IDE构建索引。

准备工作都做好了,还有借口不看代码吗?如果你还是不知道从哪里开始,那我推荐从main函数开始吧。 它在sapi\\cli\\php_cli.c的最后面。 附图一张可以和源代码结合起来看。 图片引自:https://github.com/pangudashu/php7-internal/blob/master/1/base_process.md

最后推荐一本书 秦朋 的 《PHP7内核剖析》

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。