php
JasonRD
做一名IT界的扫地僧
展开
-
php内核探索笔记-初窥
一、概括编程语言分为两类:编译型,解释型。编译型语言主要包括,C/C++、C#等。编译型语言有一个专门的编译过程,通过编译器编译成机器语言,只需要一次编译过程,每次执行不需要重新编译。解释型语言主要包括,PHP,PYTHON等。编译型语言在执行前并不需要编译过程,可以直接执行,每次执行需要解释器将代码解释成机器语言(也即编译)。为了执行效率,并不是所有的语言每次执行都需要编译,例如:P原创 2015-12-11 16:36:03 · 426 阅读 · 0 评论 -
php+nginx+mysql+ubuntu环境搭建
一、安装1.更新和安装 sudo apt-get update sudo apt-get install nginx2.安装结束后,启动nginx sudo /etc/init.d/nginx start3.配置php和mysql sudo apt-get install php5-cli php5-cgi mysql-server php5-mysqlCGI:“公共网关接口”(Com原创 2015-12-17 16:43:06 · 407 阅读 · 0 评论 -
php读mysql中文乱码问题解决方法
涉及到的编码一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,其次是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312编码的,却以UTF-8编码打开再保存。要解决上述乱码问题,首先需要知道开发中哪些环节涉及到了编码:1、文件编码:指的是页面文件(.html,.php等)本身是以何种编码来保存的。转载 2016-01-05 12:29:25 · 582 阅读 · 0 评论 -
phpstorm安装
phpstorm是用JAVA开发的,所以在安装之前需要先安装jdk sudo apt-get install default-jdk或者 在网上下载java源码安装 去官网下载tar.gz格式的即可(ubuntu使用浏览器下载网速比较慢,所以推荐到window上下载好)。创建JDK存放路径。我的JDK存放在“/usr/jdk”,所以使用命令”sudo mkdir -p /usr/jdk”,你可原创 2015-12-21 14:15:49 · 1575 阅读 · 0 评论 -
PHP总结
简介PHP作为一种优秀的脚本语言,从简单的“hello word”到各种框架的开发、架构的设计、性能优化,以及PHP模块的开发,涉及较广知识结构和跨度。PHP通过不断淬炼,PHP内核中涉及从脚本的编译解析到执行以及和Web服务器等的配合,内存管理,语法实现等。SAPI执行PHP是一种基于C语言高级语言,作为一种解释型编程语言,能够好的进行跨平台开发。而C/C++在进行跨平台开发时需要重新编译、链接。原创 2015-12-23 16:09:37 · 378 阅读 · 0 评论 -
session释放函数
今天在释放$_SESSION时,使用session_destroy()函数释放定义的变量时,在之后检查该变量发现仍然存在。<?phpsession_destroy($_SESSION);echo $_SESSION['name'];查了一下:session_unset() 释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id s原创 2016-01-11 19:26:28 · 698 阅读 · 0 评论 -
php 反射机制
介绍PHP5添加了一项新的功能:Reflection。这个功能使得phper可以reverse-engineer class, interface,function,method and extension。通过PHP代码,就可以得到某object的所有信息,并且可以和它交互。 反射是什么? 它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释转载 2016-01-12 17:11:17 · 346 阅读 · 0 评论 -
Thrift使用-php
简介 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和原创 2016-04-12 18:19:14 · 939 阅读 · 0 评论 -
MYSQL忘记root密码重置方法
1. vi /etc/my.cnf(我的在/etc/mysql/my.cnf中) #编辑文件,找到[mysqld],在下面添加一行skip-grant-tables,已安全模式进入 31 [mysqld] 32 # 33 # * Basic Settings 34 # 35 user = mysql 36 pid-file = /var/run/my原创 2015-12-17 16:19:24 · 331 阅读 · 0 评论 -
PHP拾遗(类型)
语法凡是在一对开始和结束标记之外的内容都会被 PHP 解析器忽略.整数Example #2 八进制数的怪事<?phpvar_dump(01090); // 八进制 010 = 十进制 8?>决不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。<?phpecho (int) ( (0.1+0.7) * 10 ); // 显示 7!?>浮点数要测试浮点数是否相等,要使原创 2015-12-17 16:11:15 · 350 阅读 · 0 评论 -
php内核探索笔记-内存的申请与释放
内存申请 PHP底层对内存的管理, 围绕着小块内存列表(free_buckets)、 大块内存列表(large_free_buckets)和 剩余内存列表(rest_buckets)三个列表来分层进行的。 ZendMM向系统进行的内存申请,并不是有需要时向系统即时申请, 而是由ZendMM的最底层(heap层)先向系统申请一大块的内存,通过对上面三种列表的填充, 建立一个类似于内存池的管理机制。这原创 2015-12-16 19:01:57 · 672 阅读 · 0 评论 -
php内核探索-常量
在PHP中常量的结构只是在变量的基础上添加了一些额外的元素:typedef struct _zend_constant { zval value; /* zval结构,PHP内部变量的存储结构,在前面有说明 */ int flags; /* 常量的标记如 CONST_PERSISTENT | CONST_CS */ char *name; /* 常量原创 2015-12-14 18:25:27 · 298 阅读 · 0 评论 -
php内核探索笔记-解释器的执行过程
以CLI SAPI为例来对php执行核心部分进行解析。CLI是php命令行模式,此SAPI是默认安装的,在服务器端安装过PHP后,生成以一个可执行文件,可以在shell中调用PHP命令来执行。PHP -f XX.php执行流程:解析命令行参数; 初始化环境; 编译执行PHP代码; 清理环境,退出;在第3个阶段中,如何执行PHP脚本的: 通过调用php_execute_script( ha原创 2015-12-14 10:49:16 · 345 阅读 · 0 评论 -
php内核探索=opcode
在前面php内核探索笔记-初窥,了解到php代码执行需要进行编译->执行。在编译阶段首先进行词法分析,然后再进行语法分析,才生成用于Zend 引擎执行的opcode。究竟opcode是什么东西呢?opcode是计算机执行指令的一部分,用于指定要执行的操作,也被称作字节码。opcode不需要显示的操作数,操作数可以是堆栈、寄存器、某块内存或I/O端口中的值。PHP构建与Zend虚拟机之上,p原创 2015-12-12 16:51:28 · 460 阅读 · 0 评论 -
PHP内核探索笔记-变量
php变量组成部分:变量名:php语言的变量名以$开头+英文/下划线,可以包含数字、下划线、字母,区分大小写。同时PHP也支持复合变量,形如$$A,增加了php的动态性。类型:php属于弱类型语言,可以赋值任意类型的值。内容:在同一时刻只能有一种值。php语言中存在8中数据类型,分为三大类: 1. 标量类型:Boolean,integer,float,string; 2. 复合类型:原创 2015-12-14 15:40:06 · 327 阅读 · 0 评论 -
PHP内核探索笔记-函数
函数定义:函数的定义是一个将函数名注册到函数列表的过程 1. 词法分析: function将会生成T_FUNCTION标记 2. 语法分析: 3. 生成中间代码: 生成的中间代码为 ZEND_DECLARE_FUNCTION ,根据这个中间代码及操作数对应的op_type。 我们可以找到中间代码的执行函数为 ZEND_DECLARE_FUNCTION_SPEC_HANDLER原创 2015-12-15 18:31:36 · 319 阅读 · 0 评论 -
PHP拾遗-类
如果在 new 之后跟着的是一个包含有类名的字符串,则该类的一个实例被创建。如果该类属于一个名字空间,则必须使用其完整名称。 <?php$instance = new SimpleClass();// 也可以这样做:$className = 'Foo';$instance = new $className(); // Foo()?>当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一原创 2015-12-25 10:27:17 · 284 阅读 · 0 评论 -
变量赋值、销毁与作用域
变量赋值、销毁与作用域标签(空格分隔): 未分类获取左右值在PHP内没有对于变量的声明操作,在赋值的时候同时完成声明。 例:$a = 10; 通过VLD查看其生成中间代码为ASSIGN.执行函数为ZEND_ASSIGN_SPEC_CV_CONST.在这个函数中获取左值和右值的代码为:val *value = &opline->op2.u.constant;zval **variable_ptr原创 2015-12-15 13:09:31 · 645 阅读 · 0 评论 -
composer使用
Composer 不是一个包管理器。是的,它涉及 “packages” 和 “libraries”,但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。在项目中如果需要依赖其他包,可以使用composer来进行管理。需要在你的项目根目录下定义一个composer.json的文件,然后使用composer原创 2016-04-14 17:19:50 · 459 阅读 · 0 评论