解决 Ubuntu 下 Apache 不解析 PHP 问题
这两天笔者遇到了一个很操蛋的问题 ——Apache 无法解析 PHP 代码了,之前一直用的挺好的,突然就挂了,然后在网上疯狂的找解决办法,但是大都是 php5 的版本,而我却是 7 的版本,我就先顺便把 5 版本的解决方法贴出来: 修改 apache 的配置文件 httpd.conf 在 httpd.conf 中找到: AddType application/x-gzip .gz .tgz 在该行下面添加 AddType application/x-httpd-php .php 再找继续找到: DirectoryIndex index.html, 把此行修改成 DirectoryIndex index.html index.htm index.php 再找到: #ServerName www.example.com:80 改成 ServerName localhost:80 然而 Ubuntu 下的 Apache 并没有 httpd.conf 这个配置文件,而是通过一个 apache2.conf...
一个学习 Python 的小游戏
笔者最近在自学 Python 的过程中想起曾经有人推荐过的一款学习编程的小游戏,叫做 Codecombat,通过玩游戏的方式学习编程语言的语法规则。 游戏有很多关卡,每个关卡都会有之前没有学过的语法,学习的难度是逐渐上升的,用游戏的方式将学习者带入比起看起枯燥的书本文字效果要好的多。 当然这里除了有 Python 之外还有 Javascript 等脚本语言可以学习。
SQL 进阶
我们都知道 select 的基本用法 select <字段名> from <表名> [where <限制条件>],然而 select 语句后面还可以跟很多限制条件。我们这次用 user 表来作为示范,下面是 user 表的结构: ¶Between、And、In、<=、>=、<、> 等条件查询: 通过 select * from table where id between 1 and 3 和 select * from table where id >=1 and id <= 3 的返回结果,我们可以发现 between and 和 >= and <= 是等同的。 如果我们要查询的条件不是一个连续的数值,可以用 in: select * from table where id in (2,4) ¶locate () 函数:locate(substr,str) 这个函数返回 substr 在字符串 str 中的第一个出现的位置,如果不存在则值为 0 ¶Count ()...
Dict 和 Set
¶Dict Python 内置了字典 Dict(全称 Dictionary),使用键 - 值(key-value)存储,具有极快的查找速度。Dict 的查找原理和查字典类似,key 就相当于字典的索引,Python 可以通过 key 计算出所对应的 value 存放的内存地址,直接取出,所以查找速度快。 Dict 的初始化很简单,语法如下: >>> dict = {key1' : value1, 'key2' = value2, 'key3' = value3} >>> dict['key2'] value2 一个 key 只能对应一个 value,所以当我们对一个 key 多次赋值时会将前一个 value 覆盖掉。由于需要查找的 key 不存在时,dict 会报错,为了避免 key 不存在的情况,Python 提供了两种方法: 通过 in 判断,如果 key 存在,就返回 True,反之返回 False: >>> `key` in dict 通过 get 判断,如果 key 不存在就返回 None(返回...
Python 基础
最近在自学 Python,所以一边学也一边总结一些知识点 ¶Python 的输出 Python 的输出和 C 语言类似,在 print() 函数里加上字符串(用单引号或者双引号,但是不能混用),例如: >>> print('Hello world!') print() 函数也可以接受多个字符串,用逗号隔开即可。print() 函数依次打印字符串,每遇到逗号就会输出一个空格。 print() 也可以打印整数或者计算结果,例如: >>> print('5+3=',5+3) 注:对于 5+3,python 解释器会自动计算出结果,但是'5+3=' 是字符串而非数学公式 ¶Python 的输入 Pyhton 提供了 input() 函数,可以让用户输入字符串,并且存到一个变量里,例如: >>> info = input() 输入任意字符后按下回车完成输入,输入的内容就被存放在变量 info 里面了。 input() 函数可以显示一个字符串来提示用户,如:input('please input...
SQL 语句的基本操作
¶ 数据库操作 创建数据库: CREATE DATABASE <数据库名> [其他选项] 使用数据库: USE <数据库名> 修改数据库: ALTER DATABASE <数据库名> 删除数据库: DROP DATABASE <数据库名> ¶ 数据表操作 创建表: CREATE TABLE <表名> ( <列名1><数据类型>[<列级完整性约束>], [<列名n><数据类型>[<列级完整性约束>]] ); 例: create table studets ( id int not null auto_increment primary key, name varchar(8) not null, sex varchar(5) not null, score int(5) not null ) 修改基本表 ALTER...
关于 TCP
互联网协议族(Internet Protocol Suite,缩写 IPS)是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。它常被通称为 TCP/IP 协议族(TCP/IP Protocol Suite,或 TCP/IP Protocols),简称 TCP/IP 协议集。因为该协议家族的两个核心协议:TCP(传输控制协议)和 IP(网际协议),为该家族中最早通过的标准。由于在网络通讯协议普遍采用分层的结构,当多个层次的协议共同工作时,类似计算机科学中的堆栈,因此又被称为 TCP/IP 协议栈(TCP/IP Protocol Stack) 以上来自维基百科,我们知道 TCP/IP 协议族是基于 TCP 和 IP 这两个最初的协议之上的不同的通信协议的大的集合。其中包含了 ARP、UDP、ICMP(互联网消息控制管理协议)等协议,它将软件的通信过程抽象化为四个抽象层(应用层、传输层、网络层和物理层),类似于简化的 OSI 七层。 在数据传输方面,早期研发提出两种传输方式 —— 面向连接的传输和非面向连接的传输,经过后来长期的发展,提出面向连接的 ISO...
解决配置完七牛后无法 Deploy 到 Github
将七牛的插件配置好后我写了上一篇博客试一试效果,结果发现怎么也没部署到 github,每次 hexo d 都会出现 ERROR Deployer not found: git 这样的报错,Google 了半天都没有找到解决的办法,最后在找到了 Github 上的一条 issue,终于发现了解决办法:只要将配置文件_config.yml 中 plugins 的那段给注释掉就 OK 了,即 #plugins: #- hexo-qiniu-sync 还是希望开发者能早点修改文档吧,不然还真的挺容易出事,不过说一句,我的 Hexo 是 3.2.2 的版本的,不知道 2.x 版本会不会出现类似的情况
Hexo 搭配七牛存储图片等媒体资源
今天把博客的图片存储搞了一下,利用的七牛存储,相对来说还是比较简单,但是为了测试成功与否就只好写这篇博客了。 七牛 是一个云存储服务商,注册并实名认证之后后,你将免费享有 10GB 存储空间,每月 10GB 下载流量、100 万次 GET 请求、 10 万次 PUT/DELETE 请求。如果想要注册可以点击这里,这样可以为我增加每月 5GB 的容量。 注册完成之后就可以进行创建空间了,注意我们添加的资源为对象存储,访问控制为公开空间 然后点击右上角进入密钥管理,复制当前使用的 AK 和 SK,配置的时候会用得到 下面我们会用到一个叫做的 hexo-qiniu-sync 的插件,首先在 hexo 主目录下安装: npm install hexo-qiniu-sync - -save 然后把配置信息添加到_config.yml 中 plugins: - hexo-qiniu-sync #七牛云存储设置 ##offline 是否离线. 离线状态将使用本地地址渲染 ##sync 是否同步 ##bucket ...
解决 Ubuntu 系统设置打不开
今天把 Ubuntu 从 16.04 更新到 16.10 之后卸载了些软件,之后蛋疼的发现系统设置打不开了,真是欲哭无泪。去网上搜了下发现是我之前由于卸载了 iBus 导致的,虽然我不懂为什么 iBus 和 Ubuntu 之间的关系为什么会如此紧密,但是既然发生了这种事情我也很绝望啊,只能按照网上的方法 sudo apt-get install ubuntu-desktop #这个会把Ubuntu预装的软件office还有Amazon什么的装回来,装完自己再慢慢卸载吧 或者他也提供了一次性的安装办法 sudo apt-get install ibus-pinyin unity-control-center unity-control-center-signon webaccounts-extension-common xul-ext-webaccounts 但是我眉头一皱,发现事情并不简单,我继续搜了下去,也有很多人遇到这种问题,发现还有更简单的办法 sudo apt-get install gnome-control-center ...
Hexo 的建站之旅
这几天觉得 wordpress 作为博客实在是太臃肿了,而且访问的后台以及更新都极其的慢,以至于想把博客迁到 Hexo 上去。 Hexo 是个简洁快速且高效的博客框架,是个台湾的学生写的,所以对中文还是挺友好的,我们用起来也很方便,而且 Hexo 仅依赖 node,易于安装。 首先准备的工具仅需要 node.js,git 即可,在 ubuntu 上安装这两样工具也是极其简单: sudo apt-get install nodejs sudo apt-get install npm sudo apt-get install nodejs-legacy #由于 ubuntu 仓库中本来就有一个 node,所以在 ubuntu 下 nodejs 命令不是 node 而是 nodejs,但是安装 nodejs-legacy 后就可以解决这个问题了,具体为什么我也不知道 sudo apt-get install git 下面开始安装 Hexo: sudo npm install -g hexo-cli 安装完成后就可以部署博客了,根据 Hexo 官网上的步骤: hexo...
记一次 Arch 的安装经历
最近由于听信了别人的 “谗言”,心血来潮想试一试 Arch,所以便准备在虚拟机上装一个 Arch 来看看效果,也算是一次艰难的装系统之路了吧。 那么下面打开虚拟机,进入安装界面: 首先是分区,Arch 给我们提供了一个很好的分区交互工具 cfdisk cfdisk #使用cfdisk进行分区 选择第二个 dos 类型,这是将 sda 设置成 MBR 类型的分区,之前在遇到这个选项的时候,我下意识的选了第一个 GPT,然后还去 google 了一下,说 GPT 很好,就使用这个吧,结果后面分区的时候和教程不一样,装好系统后怎么也进不去。 接下来你可以把整个硬盘设置成一个根分区或者分成一个根分区和一个 boot 分区。如果设置成一个根分区记得要把那个分区设置 bootable;如果是一个根分区和一个 boot 分区记得要把 boot 分区设置 bootable。 退出 cfdisk 后格式化新设置的分区 lsblk #查看存储设备的状态,sda1、sda2这样的就是我们刚刚分出来的 mkfs.ext4 /dev/sda1 mkfs.ext4...
SQLi-Labs 的安装
笔者前段时间安装了 sqli-labs,就想把 sqli-labs 和 lamp 环境的搭建都写出来,其实这两个东西都很简单,感觉比我折腾 hexo 要简单的得多了(手动滑稽)。 sqli 即 sql injection (sql 注入),sqli-labs 是一个印度程序员写的用来学习 sql 注入的游戏教程,Youtube 上有一套视频教程 (需要科学上网),github 上也有开源的项目。 那么接下来就可以进行安装了: 首先搭建 lamp 环境,我用的是 ubuntu 16.04 的系统 1. 安装 apache2 sudo apt-get install apache2 2. 安装 mysql sudo apt-get install mysql-server 3. 安装 php7 (ubuntu16.04 开始支持 php7.0,之前的版本可以只支持到 php5) sudo apt-get install php7.0 php7.0 -v #查看版本信息,确认安装成功 4. 整合 php 与 mysql sudo apt-get install...
关于 timestamp 自动更新
最近笔者在 “温习 TP 框架”(其实就是不会然后抓紧时间啃),从最简单 Blog 开始做起,以前学习的时候是跟着教程,用 time () 函数获取当前时间戳,然后用 int 型数据来存储。这一次我突然想用 Mysql 内置的时间类型的数据 ——timestamp。 Mysql 中常用到的除了 timestamp 之外还有 datetime,我们先来比较一下这两个的区别: timestamp 占用的存储空间为 4 个字节,所以它能表示的时间范围为 1970.1.1 08:00:01~2038.01.19 11:14:07,这个范围比较小,容易出现超出的情况。 datetime 占用的存储空间为 8 个字节,所以它能表示的时间范围为 1000.01.01 00:00:00~9999.12.31 23:59:59, 这个时间范围完全够用了。 其实 timestamp 这个时间范围目前也是够用的,而且我也只是来学习的,所以我就选择了这个数据类型。然而后来我发现我在修改表中数据的时候时间并没有自动更新,这就比较奇怪了,我当时的 sql 代码是这样的: date...