今天看了四章内容(Testing, Profiling, HHVM-Hack, Community),其他都不提了,今天就提一下 HHVM 和 Hack。

HHVM

php 是一种解释型语言这我们都知道,在将 php 语言转换成机器码时需要解释引擎,在以前,只有一个引擎,Zend Engine,后来呢,Facebook的扎克伯格在大学的时候开发了个网站,因为 php 开发快,所以他一开始就选了这个语言,后来大家也知道,这网站越来越大,公司在已有大量服务器的基础上,决定不再继续采购服务器了,而是改进这门语言的解释器,所以有了我们看见的 HHVM ( Hip Hop Virtual Machine ),据说是快了好几倍。

官方介绍👇

HHVM is an open-source virtual machine designed for executing programs written in Hack and PHP. HHVM uses a just-in-time (JIT) compilation approach to achieve superior performance while maintaining the development flexibility that PHP provides.

HHVM supports Hack, PHP 5 and the major features of PHP 7. We are aware of minor incompatibilities, so please open issues when you find them. HHVM also supports many extensions as well.

Read more »

虽说今天有看四章内容(Hosting,Provisioning,Tuning,Deployment),😂但好像都是以前看到过的,要说有帮助的,大概就是那个自动部署了,但现在还没尝试过,等我尝试了自动部署,就再写一篇。

服务器

服务器,我一般买 Vultr 和 阿里云 的。阿里云有学生套餐,Vultr 的话可以绑定域名(阿里绑域名要备案比较麻烦),买好服务器,拿到的就是一个纯净的系统。

配置

把服务器配置成生产环境。
(一般买的都是 ubuntu 14.04 64位)
我就把我的祖传脚本贡献出来了

Read more »

说实话,今天的数据库这章不是很满意,感觉讲的还不是很具体,有时间我还要单独看下数据库。还有两块字符流和异常的处理写的还行,不过异常处理以前有看过一点。

数据库

  • 这里建议直接使用 PDO 了,而且不要过多的写某些其他数据库特有的特性,这样如果以后从这个数据库变更到其他数据库时可能要改很多代码。
  • 还有就是数据库的配置文件单独放一块,不要和核心代码放在一起,要不然上传仓库或者被别人攻击的时候很容易将密码泄漏出去。
  • 千万!千万!不要忘了将字符集设置为 UTF-8 ,要不然会出现乱码和很多不兼容问题。
  • 要进行 SQL 语句的预处理,防止 SQL 注入。这里用预处理防 SQL 注入的原理是 PDO 会先将预处理语句解析成 SQL 模板,然后再接受你的值,这时候如果你的值里有 SQL 语句了也没用了,因为语句已经解析出来了,你已经改不了了,只能填值。

简单配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
require(dirname(__FILE__).'/../settings.php');
// var_dump('../settings.php');
$pdo = new PDO(
sprintf(
'mysql:host=%s;dbname=%s;port=%s;charset=%s',
$settings['host'],
$settings['name'],
$settings['port'],
$settings['charset']
),
$settings['username'],
$settings['password']
);
?>
Read more »

今天看了三块内容,字符的过滤,密码的 hash,还有就是 PHP 内的日期类。本来今天还打算把数据库这块看掉,但这块实在太重要了,以后面试的时候也肯定会问到,所以明天重点看一下数据库。(😂主要今天下午还去了图书馆,就没有完整的一块时间了)。

字符的过滤

字符过滤有三个基本要求:

  1. 过滤 (Sanitize)
  2. 验证 (Validate)
  3. 跳脱 (Escape) (是这样翻译吗??)

过滤

首先是过滤,这个还蛮重要的,要不然一不小心别人就把sql执行语句或者 html 插入进来了。
php 自带有一个 html 过滤函数和 sql 语句过滤函数。

1
2
3
4
5
<?php
$input = '<p>123234</p>';
// echo $input;
echo htmlentities($input, ENT_QUOTES, 'UTF-8');
?>

使用 htmlentities 这个 php 内置函数之后输出就没有了<p>这些 html 代码了。

过滤 sql 语句的话,使用 PDO 的前置检查就行(PDO 的话还是很安全的,mysql_query()这种不要用了,php7都废弃了,而且很不安全)

Read more »

昨天费了好大劲投了百度的站长平台,又是 npm 装百度特有的baidusitemap.xml,又是自动推送sitemap,我还手动把sitemap送来送去,就是想他的小蜘蛛早点爬到我的站点来。结果他的小蜘蛛就是没来我这,哼。

放完百度的,我想 Google 的也放一下把,百度是用 CNAME 到他的站点来验证我的所有权,Google 是在我的网站上放个他提供的网页就行。然后我把 sitemap 甩上去就没去管了。

Read more »

今天看的是 PHP Components ,算是 PHP 较为核心和关键的一块内容。主要讲述了为什么使用,如何使用,和怎样去发布一个组件。

如何使用组件

首先呢,是去 Packagist 这个网站去找合适的包,包一般命名是 vendor/packagist ,记住这个名称,然后就要使用强大的 composer (我一直觉得是composer拯救了php的生态,有一个好的包管理器真的很重要。)
安装时,在根目录 使用命令 composer require vendor/packagist 然后composer就会自动去寻找包,安装,此时会在根目录生成composer.json,composer.lock(锁定你使用的版本,防止团队开发是成员使用了更高的或其他版本导致bug)。
还会生成vendor目录。因为使用了psr-4 加载标准,所以能够很简单的就使用别人的包。

如何发布自己的组件

这个是今天新学到的,以前有想过自己开发几个组件发布一下,今天终于有机会了(虽然发的是测试包),是一个简单的SayHello
感觉发测试包的时候,重要的是comopser.json怎么写(以后当然是你的核心代码啦)
下面是我的composer.json

Read more »

今天将 PHP 特性剩余的一些小节看完了(Zend OPcache 和 Built-in Server),然后把第三章 PHP 标准(PSR-1,2,3,4)也看了下。这书比我以前看到的基础详细,现在终于知道一些东西的作用了。

Zend OPcache

php 是一种解释型语言,我现在才知道当我们访问 php 后端时,我们的代码会通过 Zend Opcodes 转化成机器语言(二进制代码),然后执行。Java 就是已经编译好了放上去,而 PHP 因为编译非常快,所以不用放二进制包放上去,用 Zend 引擎实时编译即可。但是在一些要高性能需求的环境下就要使用预先编译好的二进制包了。所以,在 PHP 5.5 之后就内置了自动缓存的 OPcache,使用了这个后在开发者模式下,你每次更新 php 代码,他都会自动编译成二进制代码并缓存起来,这时候我们去访问的时候就是直接访问编译好的包了。

具体的配置的话,实在 php.ini 下

1
2
3
4
5
6
opcache.validate_timestamps = 1 // "0" 生产环境下
opcache.revalidate_freq = 0
opcache.memory_consumption = 64
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 4000
opcache.fast_shutdown = 1
Read more »

今天看了两块内容,一个是 Generator 还有一个是 Closures。这里面的话第一个比较简单,应该算是迭代器的变种,第二个闭包就比较麻烦了,以前就不是很懂,所以今天就仔细查了一些资料,争取对闭包能有更深入的了解。

Generator

首先讲下今天看的 Generator,以前学基础的时候确实没听过这个(看来确实学的太水了😂),了解了一下,听作者将,这个的优点就是耗资源少。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
function myGenerator()
{
yield 'asdfas';
yield '1111';
yield 'cccc';
}

foreach (myGenerator() as $yieldedValue) {
echo $yieldedValue, PHP_EOL;
}
//Result:
//asdfas
//1111
//cccc
?>

上面就是这个 Generator 的用法,它的特性是,一开始不会将 yield 后面的值储存进内存中,只有当调用这个函数的时候,才会像 return 那样一个个取出来。这里就会有一个好处,所以作者提出这样一个问题。

Read more »

计划第一天

今天是计划的第一天,主要在看《Moder PHP》,看了三块内容,一个是 Namespace,一个是 Interface,另一个是 Trait。都是 php 的面向对象特性里面比较突出的一些。Namespace 以前在 Laracast 上看过教程所以还算熟悉。Trait 今天是好好了解了一下,以前开发的时候都不常用这东西。今天在实现代码的时候又发现了一个好用的 php 插件在 atom 上,能给我自动补全 Namespace 还能跳转定义的地方。

Namespace

为什么要用 Namespace

就跟Java里的那些包名类似,是为了防止各个不同的类之间发生冲突,一个人的时候还好,自己知道写过哪些类,当团队开发的时候或者引入了其他人的一个扩展包的话,如果没有命名空间就极易发生冲突。所以使用 Namespace 还是很必须的,可以说是php面向对象的基础。

Read more »

回到家了

目前是回到家了,明天就要开始正式暑假了。昨天在缓冲暑假和随便逛逛论坛的时候发现两本非常不错的书,我大致看了下目录和他们的评论,似乎是将php讲的很透彻。不过有一个缺点,这两本书是英文的(😅),还好我的pdf阅读器有带翻译,虽然其中有一本是有中文版的,但是糊了点,还不能标注。所以最后选择英文版,感觉词汇应该不会很多,而且专业词汇我也确实需要去掌握一点。

暑假计划增加

所以暑假又多了两个计划,第一本《Modern PHP》应该是明天开始看,看的时候记录一下体会。另一本《Laravel - Up and Running》打算是八月份开始看,这样分开的话我中间还能实践一下。而且七月份还有其他计划要完成。

两本书

1. Modern PHP

Read more »