PHP 基础回顾

include/require 如果没有提供路径,则会查找include_path,如果没有找到,则会查找当前脚本所在目录和当前工作目录。如果均失败的话,include 会产生一个 warnning,require会产生一个 fatal error. 当一个文件被 included时,被包含文件中的代码继承了include所在行的变量作用域。任何在include处可见的变量,对于被包含的代码也可见(相当于将被包含的代码复制并替换include命令。)但是,被包含文件中定义的函数和类都拥有全局作用域。 在解析被包含的文件时,解析器会切换为 HTML模式,所以任何没有包含在 php tag中的文本都会当做HTML处理,也就是会被原样 echo 给客户端。 include失败会返回FALSE,并产生一个warning。如果include成功,并且被包含文件中没有return语句,include会返回1。 如果被包含文件中有return语句,那么执行到return语句时,会停止对被包含文件的处理,并返回return提供的值,就像调用一个普通的函数一样。 如果被包含文件中定义了函数,并且被包含了两次,则会造成 fatal error,因为函数已经被声明过了。最好使用 include_once。 安装 sudo apt-add-repository ppa:ondrej/php5 php-xxx都是PHP的扩展包,比如php-gd,php-mysql,php-xdebug需要手动安装 Apache 通过 libapache2-mod-php7.1模块与PHP互动,配置文件为/etc/apache2/mod-enabled/php7.0/中 /usr/bin/php也只是一个alternative,可以使用update-alternative改变当前php命令使用的版本 安装过程中的处理: Setting up php7.1-common (7.1.0-5+deb.sury.org~xenial+1) ... Creating config file /etc/php/7.1/mods-available/calendar.ini with new version Creating config file /etc/php/7.1/mods-available/ctype.ini with new version Creating config file /etc/php/7.1/mods-available/exif.ini with new version Creating config file /etc/php/7.1/mods-available/fileinfo.ini with new version Creating config file /etc/php/7.1/mods-available/ftp.ini with new version Creating config file /etc/php/7....

January 18, 2017

Posix Thread 基础

线程概念 一个线程包含在进程中表示一个 execution context 的必要信息,包括 thread ID, a set of register values, a stack, a scheduling priority and policy, a signal mask, an errno variable, and thread-specific data. 进程中的所有东西都是线程间共享的,包括 text of the executable program, the programs’s global and heap memory, the stacks, and the file descriptors. 线程 ID 每个进程都有一个 系统内 唯一的ID,由pid_t类型表示,类似的,每个线程都一个 进程内 唯一的ID, 由pthread_t类型表示。pthread_t的具体类型由实现决定,可能是整数、指针或者结构体,所以不能之间判断两个pthread_t是否相等,需要用pthread_equal函数: int pthread_equal(pthread_t tid1, pthread_t tid2); Returns nonzeron if equal, 0 otherwise. 一个线程可以通过pthread_self函数获取自己的ID: pthread_t pthread_t_self(void); 线程创建 int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); Returns: 0 if OK, error number on failure tidp被设置为新创建的线程的ID,attr参数用来控制线程的属性,这里用NULL表示使用默认的属性。...

January 1, 2017

Python logging 基础

一个例子: import logging logger=logging.getLogger(__name__) logger.setLevel(logging.INFO) # 添加handler handler=logging.FileHandler('hello.log') handler.setLevel(logging.INFO) # handler可以有多个,所以用add logger.addHandler(handler) # 设置格式 formatter=logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', '%H:%M:%S') # formatter只能有一个 logger.setFormatter(formatter) 对于库来说,通常使用 __name__ 来获取 Logger对象,然后只添加一个NullHandler,表示默认不会输出任何log: ...

December 30, 2016

Python 协程基础

基础 定义协程(coroutine)的两种方式:async def或使用generator实现。 基于generator的协程应该使用@asyncio.coroutine修饰,但这并不是严格要求的,基于generator的协程使用yield from语法。 ...

December 25, 2016

Jupyter Notebook 初试

安装 pip3 install jupyter --user Jupyter Notebook的kernel是IPython, 这样Notebook才可以使用Python. 也可以安装kernel, 比如 R, Julia. ...

December 18, 2016

Shell 基础

source 也可以简写为 . ,这也是通用的兼容写法 在当前的shell中执行文件中命令,所以文件中的命令可以读取到当前shell中的变量(不一定是环境变量),等同于在命令行一条一条地敲入命令执行。 ...

December 3, 2016

Linux 中的 runlevel

6个典型的运行级别: 0 停机,关机 1 单用户,无网络连接,不运行守护进程,不允许非超级用户登录 2 多用户,无网络连接,不运行守护进程 3 多用户,正常启动系统 4 用户自定义 5 多用户,带图形界面 6 重启 ...

December 2, 2016

Python 中的时间模块

time time 模块比较简单, 常用的函数只有几个, 但是这个模块中的函数名都很奇怪, 估计是模仿 *inx 的时间函数风格, 也查不到到底是什么的缩写, 那就不管它好了. ...

October 2, 2016

Arrow: better dates and times for Python

Python 中时间处理的库太多, 基本的有time, 复杂的有datetime, 日历处理有Calendar, 各种时区信息的库… 各个库中函数的命名也十分让人崩溃,比如time中的ctime(), asctime(), strftime(), strptime(), localtime()你能记得住这些函数分别接受什么参数, 起什么作用吗? 我觉得挺崩溃的. ...

October 2, 2016

PlantUML: 用程序员的方式画图

PlantUML 简介 PlantUML 是一个画图脚本语言,用它可以快速地画出: 时序图 流程图 用例图 状态图 组件图 ...

October 1, 2016