GVKun编程网logo

深入理解PHP之源码目录结构与功能说明(php文件目录源码)

27

这篇文章主要围绕深入理解PHP之源码目录结构与功能说明和php文件目录源码展开,旨在为您提供一份详细的参考资料。我们将全面介绍深入理解PHP之源码目录结构与功能说明的优缺点,解答php文件目录源码的相

这篇文章主要围绕深入理解PHP之源码目录结构与功能说明php文件目录源码展开,旨在为您提供一份详细的参考资料。我们将全面介绍深入理解PHP之源码目录结构与功能说明的优缺点,解答php文件目录源码的相关问题,同时也会为您带来HarmonyOS 源码目录结构的理解、linux 源码目录结构 文件系统目录结构、PHP7内核(三):源码目录结构、PHP之源码目录结构的实用方法。

本文目录一览:

深入理解PHP之源码目录结构与功能说明(php文件目录源码)

深入理解PHP之源码目录结构与功能说明(php文件目录源码)

本文讲述了PHP源码目录结构与功能说明。分享给大家供大家参考,具体如下:

PHP之所以能在web开发语言中排名靠前,不仅仅是因为语法简单,上手容易。我个人认为更多是因为其语言本身的:模块的易扩展性,可维护性以及内存安全管理等特点。写过PHP的程序员不一定都知道:PHP是如何执行的?其组织结构目录的作用?如果对其有所了解,对PHP的认识会更深入,写出的代码也会更高效,更健壮......

1. build 和编译有关的目录。
2. ext 扩展库代码,例如 MySQL、zlib、iconv 等我们熟悉的扩展库。其中/ext/standard/ 目录下是常用的标准函数集。
3. main 主目录包含主要的 PHP 宏和定义。
4. sapi 和各种服务器的接口调用,例如apache、IIS等,也包含一般的fastcgi、cgi等。
5. win32 和 Windows 下编译 PHP 有关的脚本。
6. Zend 文件夹核心的引擎,所有的 Zend API 定义与宏等。
7. scripts Linux 下的脚本目录。
8. tests 测试脚本目录
9. sapi 各类 Web 服务器的接口。
10.TSRM Zend 和 PHP 的 “线程安全资源管理器” (TSRM) 目录。
11.pear 这个目录就是“PHP 扩展与应用仓库”的目录。包含了PEAR 的核心文件。

其中几个重要的文件绝对值得你共时间去了解:

php-src/main/php.h, 位于PHP 主目录。这个文件包含了绝大部分 PHP 宏及 API 定义。

php-src/Zend/zend.h, 位于 Zend 主目录。这个文件包含了绝大部分 Zend 宏及 API 定义。

php-src/Zend/zend_API.h, 也位于 Zend 主目录,包含了Zend API 的定义

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数学运算技巧总结》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《PHP数组(Array)操作技巧大全》、《php排序算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《php正则表达式用法总结》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:
  • php源码加密 仿微盾PHP加密专家(PHPCodeLock)
  • PHP源码之 ext/mysql扩展部分
  • 修改Zend引擎实现PHP源码加密的原理及实践
  • 学习php开源项目的源码指南
  • 深入理解PHP原理之执行周期分析
  • 深入理解PHP之OpCode原理详解
  • PHP的运行机制与原理(底层)
  • 深入理解PHP原理之异常机制
  • PHP原理之异常机制深入分析

HarmonyOS 源码目录结构的理解

HarmonyOS 源码目录结构的理解

目录:

applications

base

Foundtion

utils

kernel

drivers

原文 PDF 文件

 

本文目的:梳理 HarmonyOS 源码目录结构,介绍重要目录包含的内容与作用,便于学习开发过程有全局观,有针对性的研读开发。

      HarmonyOS 源码文件之多,想要短时间内研读完成是比较困难的。对于我们刚刚学习此操作系统的开发来说,如果一个个目录去研读代码,需要花费大量的时间。本文从框架上简单解析 HarmonyOS 的目录结构,让开发者有针对性的研究它。

    下图将 HarmonyOS 源码的一级目录通过软件层进行了简单区分,可以结合 HarmonyOS 架构图一起从整体要认识 HarmonyOS 目录结构。

  

 HarmonyOS 架构图中表述的应用框架层和系统服务层,都可以理解为 Farmwork 层,是 Harmony 最重要,也是最核心的部分。

 接着谈谈我们对每个目录的简单认识:

 applications
 从字面上解读,主要存放用户的应用程序,或是是 HarmonyOS 预置的系统应用程序。

applications
    |
    |——sample                  // 提供 Hi3516/Hi3518/Hi3861 基础应用,这些应用应用预置设备中
        |
        |——camera              // 主要说明 Hi35xx AI Camera 的基础应用
        |   |
        |   |——app             // 此目录为用户自己开发的目录,可以通过该目录下的 BUILD.gn 文件适配是否要预置到系统中
        |   |——communication   // 通话模块(hostapd wpa_cli wpa_supplicant)
        |   |——example         // 示例模块
        |   |——hap             // 预置的 app,HarmonyOS 中的 hap 对应 Android 中的 app
        |   |——media           // 视频模块实例
        |——wifi-iot
            |
             ——app             // 此目录为用户自己开发的目录,可以通过该目录下的 BUILD.gn 文件适配是否
                                  要预置到系统中 (建议 IoT 开发预置 led_example, 便于开箱检查产品)

 

对应的代码仓包含有:

applications/sample/camera: https://gitee.com/openharmony/applications_sample_camera

applications/sample/wifi-iot:https://gitee.com/openharmony/applications_sample_wifi_iot/ 

 

 base
  HarmonyOS Framework 基础能力集合,定位于大多数设备开发都需要能力模块,目前提供了全球化、DFX、安全、系统启动等模块

base
   |
   |——global                   // 全球化模块,作为设备的基础能力模块,当然也可裁剪掉
    |   |
    |   |——frameworks          // 全球化资源调度模块
    |   |——interfaces          // 全球化资源调度系统间开放 APIs
    |——hiviewdfx                // DFX 模块
    |   |
    |   |——frameworks
    |   |   |
    |   |   |——ddrdump_lite    // 轻量级设备 Dump 信息存储模块,目前暂时没有内容
    |   |   |——hievent_lite    // 轻量级设备 DFX-MCU/CPU 事件记录模块
    |   |   |——hilog_lite      // 轻量级设备 DFX-MCU/CPU 日志模块
    |   |——interfaces
    |   |   |
    |   |   |——innerkits       // DFX 模块(日志、事件)内部接口
    |   |   |——kits            // DFX 模块(日志、事件)APIs
    |   |——services            // DFX-MUC 框架 / 日志服务功能模块 Services
    |   |——utils               // DFX-MCU 基础组件
    |——iot_hardware             // IoT 外设能力模块(GPIO/I2C/SPI/AD/DA 等)
    |   |
    |   |——frameworks
    |   |   |
    |   |    ——wifiiot_lite    // IoT 外设模块实现 (包含.c 文件)
    |   |——hals
    |   |   |
    |   |    ——wifiiot_lite    // HAL adapter 接口(为 frameworks 与驱动层提供适配)
    |   |——interfaces
    |       |
    |        ——kits            // IoT 外设控制模块接口,与 frameworks/wifiiot_lite 配合
    |——security
    |   |
    |   |——frameworks
    |   |   |
    |   |   |——app_verify      //hap 包签名校验模块
    |   |   |——crypto_lite     // 加解密模块
    |   |   |——hichainsdk_lite // 设备认证模块
    |   |   |——huks_lite       // 秘钥与证书管理模块
    |   |   |——secure_os       //libteec 库函数实现,提供 TEE Client APIs
    |   |——interfaces
    |   |   |
    |   |   |——innerkits       // 内部接口目录,与 frameworks 对应
    |   |   |——kits            // 模块 APIs (应用权限管理)   
    |   |——services
    |       |
    |       |——iam_lite        // 应用权限管理及 IPC 通信鉴权服务
    |       |——secure_os       //secure_os TEE 代理服务
    |——startup
        |
        |——frameworks
        |   |
        |    ——syspara_lite    // 系统属性模块源文件 (param_impl_hal-Cortex-M,param_impl_posix-Cortex-A)
        |——hals
        |   |
        |    ——syspara_lite    // 系统属性模块文文件
        |——interfaces
        |   |
        |    ——kits            // 系统属性模块对外 APIs
        |——services
            |
            |——appspawn_lite   // 应用孵化模块
            |——bootstrap_lite  // 启动服务模块
            |——init_lite       // 启动引导模块 
interfaces 提供内外部 APIs

frameworks 提供接口实现的源代码;

hals:HAL adapter 接口(为 frameworks 与驱动层提供适配)

services: 通过服务管理模块

查看更多章节 >>>

想了解更多内容,请访问: 51CTO 和华为官方战略合作共建的鸿蒙技术社区 https://harmonyos.51cto.com/

linux 源码目录结构 文件系统目录结构

linux 源码目录结构 文件系统目录结构

学习Linux也有一段时间了,具体来整理一下Linux源码的目录结构和文件系统的目录结构,以便加深记忆。

一、Linux源码的目录结构

首先上一张截图,如下所示:

再看各个文件的介绍,借用一下其他资源。

arch:这个为目录是架构相关,里面存放了许多cpu架构,比如arm,x86,MIPS,PPC等,

处理器原厂提供一套Linux内核的源码,那么在这个目录下都有一套针对具体处理器cpu的子目录。每个cpu的子目录,又进一步分解为boot,mm,kernel等子目录,分别控制系统引导,内存管理,系统调用,动态调频,主频率设置部分等。
在arch目录中有关键的平台文件。任何一款支持Linux的处理器,都有一部分内核代码是针对特定的处理器来提供的,具体的实现就是通过平台文件。
迅为4412的平台文件,是arch→arm→mach-exynos→mach-itop4412.c。
arch→arm→boot目录,默认编译生成的内核镜像是在这个目录下。
在arch→arm→kernel目录中,有针对具体cpu处理器的代码,有相关内核特性实现方式,如信号处理等。这一部分当然是芯片厂商做好了,4412的这部分就是三星已经做好的部分。
在arch→arm→lib目录中,有一些和硬件相关库函数,后面学习驱动的时候会使用到。

在arch→arm→tools目录中,包含了生成镜像的工具。

block:在linux中block表示块设备(以块(多个字节组成的整体,类似于扇区)为单位来整体访问),譬如说SD卡、iNand、Nand、硬盘等都是块设备。你几乎可以认为块设备就是存储设备。block目录下放的是一些linux存储体系中关于块设备管理的代码。

crypto:英文意思是加密。这个目录下放了一些各种常见的加密算法的C语言代码实现。譬如crc32、md5、sha1等。

Documentation:里面放了一些文档。

drivers:驱动目录,里面分门别类的列出了linux内核支持的所有硬件设备的驱动源代码。就是需要重点学习的部分。

firmware:固件。什么是固件?固件其实是软件,不过这个软件是固话到IC里面运行的叫固件:就像S5PV210里的iROM代码。

fs:fs就是file system,文件系统,里面列出了linux支持的各种文件系统的实现。

include:头文件目录,公共的(各种cpu架构共用的)头文件都在这里。每种cpu架构特有的一些头文件在arch/arm/include目录及其子目录下。

init:init是初始化的意思,这个目录下的代码就是linux内核启动时初始化内核的代码。

如下图所示,部分目录如下。下面的这些目录,几乎不需要我们去动其中任何一个文件。

ipc:ipc就是inter process commuication,进程间通信,里面都是linux支持的IPC的代码实现。

kernel:kernel就是内核,就是linux内核,所以这个文件夹下放的就是内核本身需要的一些代码文件。

lib:lib是库的意思,这里面都是一些公用的有用的库函数,注意这里的库函数和C语言的库函数不一样的。在内核编程中是不能用C语言标准库函数,这里的lib目录下的库函数就是用来替代那些标准库函数的。譬如在内核中要把字符串转成数字用atoi,但是内核编程中只能用lib目录下的atoi函数,不能用标准C语言库中的atoi。譬如在内核中要打印信息时不能用printf,而要用printk,这个printk就是我们这个lib目录下的。
mm:mm是memory management,内存管理,linux的内存管理代码都在这里。
net:该目录下是网络相关的代码,譬如TCP/IP协议栈等都在这里。

scripts:脚本,这个目录下全部是脚本文件,这些脚本文件不是linux内核工作时使用的,而是用来辅助对linux内核进行配置编译生产的。我们并不会详细进入分析这个目录下的脚本,而是通过外围来重点学会配置和编译linux内核即可。
security:安全相关的代码。不用去管。
sound:音频处理相关的。
tools:linux中用到的一些有用工具
usr:目录下是initramfs相关的,和linux内核的启动有关,暂时不用去管。

virt:内核虚拟机相关的,暂时不用管。
Kbuild:Kbuild是kernel build的意思,就是内核编译的意思。这个文件就是linux内核特有的内核编译体系需要用到的文件。
Makefile:这个是linux内核的总makefile,整个内核工程用这个Makefile来管理的。

 

二、文件系统目录结构

先上图,如下图所示:

1、/- 根
每一个文件和目录从根目录开始。

只有root用户具有该目录下的写权限。请注意,/root是root用户的主目录,这与/.不一样

2、/bin中 - 用户二进制文件

包含二进制可执行文件。
在单用户模式下,你需要使用的常见Linux命令都位于此目录下。系统的所有用户使用的命令都设在这里。

例如:ps、ls、ping、grep、cp

3、/sbin目录 - 系统二进制文件

就像/bin,/sbin同样也包含二进制可执行文件。

但是,在这个目录下的linux命令通常由系统管理员使用,对系统进行维护。例如:iptables、reboot、fdisk、ifconfig、swapon命令

4、/etc - 配置文件

包含所有程序所需的配置文件。
也包含了用于启动/停止单个程序的启动和关闭shell脚本。例如:/etc/resolv.conf、/etc/logrotate.conf

hosts:设备名称(或域名)到ip地址的解析,相当于本地存在的dns功能。

5、/dev - 设备文件

包含设备文件。

这些包括终端设备、USB或连接到系统的任何设备。例如:/dev/tty1、/dev/usbmon0

6、/proc - 进程信息

包含系统进程的相关信息。
这是一个虚拟的文件系统,包含有关正在运行的进程的信息。例如:/proc/{pid}目录中包含的与特定pid相关的信息。

这是一个虚拟的文件系统,系统资源以文本信息形式存在。例如:/proc/uptime

7、/var - 变量文件

var代表变量文件。
这个目录下可以找到内容可能增长的文件。

这包括 - 系统日志文件(/var/log);包和数据库文件(/var/lib);电子邮件(/var/mail);打印队列(/var/spool);锁文件(/var/lock);多次重新启动需要的临时文件(/var/tmp);

8、/tmp - 临时文件

包含系统和用户创建的临时文件。

当系统重新启动时,这个目录下的文件都将被删除。

9、/usr - 用户程序

包含二进制文件、库文件、文档和二级程序的源代码。
/usr/bin中包含用户程序的二进制文件。如果你在/bin中找不到用户二进制文件,到/usr/bin目录看看。例如:at、awk、cc、less、scp。
/usr/sbin中包含系统管理员的二进制文件。如果你在/sbin中找不到系统二进制文件,到/usr/sbin目录看看。例如:atd、cron、sshd、useradd、userdel。
/usr/lib中包含了/usr/bin和/usr/sbin用到的库。

/usr/local中包含了从源安装的用户程序。例如,当你从源安装Apache,它会在/usr/local/apache2中

10、/home - HOME目录

所有用户用home目录来存储他们的个人档案。

例如:/home/john、/home/nikita

11、/boot - 引导加载程序文件

包含引导加载程序相关的文件。
内核的initrd、vmlinux、grub文件位于/boot下。

例如:initrd.img-2.6.32-24-generic、vmlinuz-2.6.32-24-generic

12、/lib - 系统库

包含支持位于/bin和/sbin下的二进制文件的库文件.
库文件名为 ld*或lib*.so.*

例如:ld-2.11.1.so,libncurses.so.5.7

13、/opt - 可选的附加应用程序

opt代表可选的。
包含从个别厂商的附加应用程序。

附加应用程序应该安装在/opt/或者/opt/的子目录下。

14、/mnt - 挂载目录

临时安装目录,系统管理员可以挂载文件系统。15、/media - 可移动媒体设备
用于挂载可移动设备的临时目录。
举例来说,挂载CD-ROM的/media/cdrom,挂载软盘驱动器的/media/floppy;16、/srv - 服务数据
srv代表服务。
包含服务器特定服务相关的数据。
例如,/srv/cvs包含cvs相关的数据。

 

PHP7内核(三):源码目录结构

PHP7内核(三):源码目录结构

上篇文章我们已经介绍了源码分析工具的安装、配置以及调试方法,本文我们来讲述一下PHP源码的目录结构。

一、目录概览

php-7.0.12为例,看过源码的同学们应该发现源码目录多达十多个,下面是每个目录的说明。

目录 说明
TSRM 线程相关安全的实现
Zend PHP解析器的核心实现
build linux下编译相关的目录
ext PHP的扩展
main PHP的主要代码
netware 网络目录,socket的定义与实现
pear PHP扩展及应用的代码仓库
sapi PHP的应用层接口
scripts Linux下的脚本目录
tests 测试脚本目录
travis 用于构建,非PHP特有目录
win32 Windows下编译PHP的相关脚本

二、核心目录

虽然源码目录众多,但是核心目录却只有sapi、main、zend、ext、TSRM

2.1、SAPI

还记得PHP的应用场景吗?我们可以在命令行中访问PHP,也可以通过浏览器访问PHP脚本,甚至可以嵌入到单片机供C、C++程序调用。它们分别对应cli模式、fpm/cgi模式、embed模式,除了这些还有apache2handler、litespeed模式。 image

SAPI全称Server API,负责PHP对外提供服务规范,它定义了结构体sapi_module_struct,该结构体定义了模式启动、关闭、激活、失效等多个钩子函数指针,每个模式将这些函数指针指向自己的函数,就可以轻松扩展PHP对外服务的方式。以上几种模式也正是实现了sapi_module_strcut才完成了PHP的多场景应用。

2.2、main

main目录的作用是承接SAPI的请求,分析出要执行的脚本文件和参数,并对环境和配置进行初始化,比如初始化变量和常量、注册函数、解析配置文件、加载扩展等等。 image

2.3、Zend

Zend目录就是大家所熟知的Zend引擎,是PHP最核心的部分,主要负责PHP的语法实现、内存管理及脚本的编译运行环境等,它由编译器、执行器两部分组成。

编译器负责将PHP代码进行词法、语法分析,并生成抽象语法树,然后进一步编译为opcode,opcode是Zend虚拟机可识别的指令,php7一共有173个opcode,所有的语法都是由这些opcode组成的。执行器负责执行编译器输出的opcode。

image

2.4、ext

ext是extension的缩写,它是扩展PHP内核功能的一种方式,分为PHP扩展与zend扩展,都支持用户自定义开发,这两种都比较常见,PHP扩展有gd、json、date、array等,而我们熟知的opcache就是Zend扩展。

image

2.5、TSRM

TSRM全称叫做Thread Safe Resource Manager,也就是线程安全资源管理器。

我们知道,全局变量就是定义在函数外的变量,它属于公共资源,在多线程的环境下,访问公共资源就可能会引起冲突,TSRM就是为解决该问题而诞生的。它为每个线程分配一个独立的自增ID,该ID作为当前线程的全局变量内存区的索引,从而实现线程的完全独立。

其实PHP大部分SAPI都是单线程的,所以并不需要过多关注线程安全,但是在Apache或者用户自己实现的PHP环境下,就需要考虑线程安全问题了。

PHP之源码目录结构

PHP之源码目录结构

 

PHP之所以能在web开发语言中排名靠前,不仅仅是因为语法简单,上手容易。我个人认为更多是因为其语言本身的:模块的易扩展性,可维护性以及内存安全管理等特点。写过PHP的程序员不一定都知道:PHP是如何执行的?其组织结构目录的作用?如果对其有所了解,对PHP的认识会更深入,写出的代码也会更高效,更健壮......
1. build 和编译有关的目录。
2. ext 扩展库代码,例如 mysql、zlib、iconv 等我们熟悉的扩展库。其中/ext/standard/ 目录下是常用的标准函数集。
3. main 主目录包含主要的 PHP 宏和定义。
4. sapi 和各种服务器的接口调用,例如apache、IIS等,也包含一般的fastcgi、cgi等。
5. win32 和 Windows 下编译 PHP 有关的脚本。
6. Zend 文件夹核心的引擎,所有的 Zend API 定义与宏等。
7. scripts Linux 下的脚本目录。
8. tests 测试脚本目录
9. sapi 各类 Web 服务器的接口。
10.TSRM Zend 和 PHP 的 “线程安全资源管理器” (TSRM) 目录。
11.pear 这个目录就是“PHP 扩展与应用仓库”的目录。包含了PEAR 的核心文件。

其中几个重要的文件绝对值得你共时间去了解:
php-src/main/php.h, 位于PHP 主目录。这个文件包含了绝大部分 PHP 宏及 API 定义。
php-src/Zend/zend.h, 位于 Zend 主目录。这个文件包含了绝大部分 Zend 宏及 API 定义。
php-src/Zend/zend_API.h, 也位于 Zend 主目录,包含了Zend API 的定义
原文链接: http://blog.csdn.net/21aspnet/article/details/6558211

今天关于深入理解PHP之源码目录结构与功能说明php文件目录源码的介绍到此结束,谢谢您的阅读,有关HarmonyOS 源码目录结构的理解、linux 源码目录结构 文件系统目录结构、PHP7内核(三):源码目录结构、PHP之源码目录结构等更多相关知识的信息可以在本站进行查询。

本文标签: