2019年04月25号 作者: lovingyu_er 时间: 2019-04-25 21:56:37 分类: 每日发呆 评论 #复仇者联盟4上映 无论你遇见谁,他都是你生命中该出现的人,绝非偶然,他一定会教会你一些什么。” 所以我也相信,无论我走到哪里,那都是我该去的地方,经历一些我该经历的事,遇见我该遇见的人。
以编程语言:C和PHP谈汇编语言和解释型语言的差别 作者: lovingyu_er 时间: 2019-04-23 15:52:00 分类: php7底层设计和源码实现 评论 初步了解PHP7核心源码中ext、main、sapi、TSRM、Zend目录下的文件,以及各自的功能。 ###PHP7语言的执行原理 接触的高级语言有C/c++、Python、PHP、Go/Pascal等,根据其运行的原理不同,我们可以将它们归结为两种语言:编译型语言和解释型语言。 #####编译型语言: 应用程序执行之前,就将程序源代码“翻译”成汇编语言,然后进一步根据软硬件环境编译成目标文件。完成编译工作的工具叫做编译器。 下面的一段C语言代码: ```c #include int main(){ printf("hello world"); return 1; } ``` main函数是程序的入口,实现打印“hello world”的作用。经过编译和执行的过程中,其中间会经过如下的步骤: ######第一步.预处理:将依赖处理、宏替换等包括上面代码中的#include都会在此阶段被替换掉 ######第二步.编译:将C语言编译成汇编语言程序,一条C语言会通常被编译为多条汇编代码。完成对目标程序的优化。 ######第三步.汇编器再汇编,现在已经是汇编代码,通过汇编器再会变成目标程序,比如hello.o ######第四步.链接:将一些共享的目标文件,比如printf()函数(来自于静态库),通过链接器(如Unix链接器ld)进行链接。 编译型语言都会出现上述的步骤。 #####解释型语言: 在应用程序在运行的时候才被“翻译”成机械语言。但是在执行的时候才被翻译,所以相对已经“翻译”好的编译型语言相比,其执行效率会比较低。负责解释性语言的解析工作的工具叫做解释器,还是负责 下面以PHP7为例讲述解释型语言的运行过程 ######第一步.词法分析:源码通过词法分析器分析得到Token。 ######第二步.语法分析: 基于语法分析器生成抽象语法树(AST:Abstract Syntax Tree) ######第三步.转换成opcodes:将AST转换成opcodes(opcode指令集合),PHP解释执行opcode 其执行流程:[源代码]->词法分析器->[Token]->语法分析器->[AST]->抽象语法树->[(生成可执行文件:编译器执行)|(生成opcodes可以被解释器执行)]详情可参考下一章关于PHP代码在执行时候的一些详细的讲解. #######汇编语言:编译结果最终指向了针对当前CPU体系的指令; #######解释型语言:编译成中间代码,在经过该语言指定的特定虚拟机,经过虚拟机再被翻译成CPU体系的指令被执行。 两种语言的慢就慢在“**虚拟机**”的这一步骤上。
php函数--get_include_path() 作者: lovingyu_er 时间: 2019-04-19 14:39:44 分类: PHP 评论 ##get_include_path #####函数的功能:获取```include_path```的配置信息,作用大概等同于```init_get("include_path")``` include_path在php.ini的配置讲解如下: ```Specifies a list of directories where the require, include, fopen(), file(), readfile() and file_get_contents() functions look for files.``` The format is like the system's PATH environment variable: a list of directories separated with a colon in Unix or semicolon in Windows. PHP considers each entry in the include path separately when looking for files to include. It will check the first path, and if it doesn't find it, check the next path, until it either locates the included file or returns with a warning or an error. You may modify or set your include path at runtime using set_include_path().
MYSQL 由于没有公钥,无法验证下列签名:NO_PUBKEY 8C718D3B5072E1F5 作者: lovingyu_er 时间: 2019-04-17 14:52:00 分类: 编程语言 评论 ### 问题现象描述:satisfied: 在自己的Vmware Station 上安装了Ubuntu系统,不知道怎么捣鼓的,在进行 `sudo apt-get update`的时候,出现了下述的错误: `W: GPG 错误:http://repo.mysql.com trusty InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY 8C718D3B5072E1F5` ### 解决方案:innocent:: google +百度了一下,一大堆花里胡哨的操作,最终到我这里发现:没有用,只有自己想办法了,查看了Mysql的官方文档,大概的意思是可能需要修改一大堆东西,想来想去,为何我不把mysql的apt源删除再重新安装一下呢?说干就干,先将原来的mysql apt源删除: `sudo rm -rf /etc/apt/sources.list.d/mysql.list` 包括备份文件: `sudo rm -rf /etc/apt/sources.list.d/mysql.list.save` 重新下载mysql apt源包,相关文档的参考文档如下:[Mysql 官方APT源][1]mysql已经更新到了mysql8.,这个在安装的时候可以自行选择,centos系统对于安装版本选择有点麻烦,没有ubuntu系统界面更人性化.使用wget下载安装包: `wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb` 安装deb包: `sudo dpkg –i mysql-apt-config_0.8.12-1_all.deb` Tips:关于dpkg -i 解释: -i|--install <.deb file name> ... | -R|--recursive ... 更新apt源: `sudo apt-get update` 不会出现上面的问题了. [1]: https://dev.mysql.com/downloads/repo/apt/