PSR标准解读 - PHP进阶 (2)

PSR-0 自动加载的标准结构 (虽然已不被推荐使用,但composer还在支持) 要点 结构: \<Vendor Name>\(<Namespace>\)*<Class Name> 第一层级的命名为开发人员的标识 完整的命名空间可包含多个层级 在加载文件的时候,命名空间的分隔符\会被DIRECTORY_SEPARATOR替换 类名中的_会被DIRECTORY_SEPARATOR替换,所以_无任何意义 在加载文件的时候,命名空间会补全.php后缀 命名空间及类命名可以大小写随意 示例: \Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php \namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php 需要注意的是,层级目录会重复vendor和namespace。 加载器的实现示例 <?php function autoload($className) { $className = ltrim($className, '\\'); $fileName = ''; $namespace = ''; if ($lastNsPos = strrpos($className, '\\')) { $namespace = substr($className, 0, $lastNsPos); $className = substr($className, $lastNsPos + 1); $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; } $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; require $fileName; } spl_autoload_register('autoload'); ### PSR-1 基本代码样式 * 标签 (PHP tags) 代码必须包含在<?...

October 3, 2016 · 2 min · 268 words · Eric Yang

常规用法 - PHP进阶 (1)

命名空间 Namespace (PHP 5.3+) 沙盒机制。虚拟的层级关系,更好的隔离不同的组建。PS:以下仅为推荐用法。 声明、引用、别名 (Declear, Import, Alias) 声明: <?php // 必须在首行,推荐保持每个命名空间一行 namespace Symfony\Component\HttpFoundation; 引用 & 别名 // 推荐保持每个引用一行 Class <?php // 引用 use Symfony\Component\HttpFoundation\Response; $response = new Response('Oops', 400); $response->send(); // 别名 use Symfony\Component\HttpFoundation\Response as Res; $r = new Res('Oops', 400); $r->send(); ### Function (PHP 5.6+) <?php // 引用 use function My\Full\functionName; // 别名 use function My\Full\functionName as func; ### Constant // 引用 use const My\Full\CONSTANT; ### PHP 7+ code use some\namespace\{ClassA, ClassB, ClassC as C}; use function some\namespace\{fn_a, fn_b, fn_c}; use const some\namespace\{ConstA, ConstB, ConstC}; ### 全局命名空间 * 引用时不加入命名空间,程序默认为与当前命名空间相同 * 没有命名空间的程序,默认在global下,例如Exception。使用时需要在前边加上"...

August 1, 2016 · 3 min · 430 words · Eric Yang

优化配置 Nginx 和 PHP-FPM

nginx server_tokens off; hide nginx server tokens access_log off; reduce nginx write to disk times worker_processes 1; always equals grep processor /proc/cpuinfo | wc -l worker_connections 4096; ulimit -n will echo the max connection of server. client_body_buffer_size 32K; This handles the client buffer size, meaning any POST actions sent to Nginx. client_header_buffer_size 10k; large_client_header_buffers 4 32k; client_max_body_size 50m; Gzip Compression Gzip can help reduce the amount of network transfer Nginx deals with....

September 10, 2015 · 2 min · 367 words · Eric Yang

收集一些常用的 JS 和 CSS 库

Shape of CSS Shapes includes : Circle, Rectangle, Star(5-points), etc. facebook/flux Application Architecture for Building User Interfaces hapijs/boom HTTP-friendly error objects koajs/koa Expressive middleware for node.js using generators josdejong/jsoneditor A web-based tool to view, edit, format, and validate JSON No9/harmon middleware for node-http-proxy to modify the remote website response with trumpet nodejitsu/node-http-proxy A full-featured http proxy for node.js faisalman/ua-parser-js UAParser.js - Lightweight JavaScript-based User-Agent string parser. Supports browser & node.js environment....

February 2, 2015 · 1 min · 81 words · Eric Yang

使用Supervisor来守护Laravel Queue进程

安装Supervisor sudo apt-get install supervisor 编辑Queue守护进程 sudo vi /etc/supervisor/conf.d/myqueue.conf [program:myqueue] command = php artisan queue:work --env=production --queue=queue1,queue2 user = www-data directory = /path/to/app/ process_name = %(program_name)s_%(process_num)s numprocs = 6 autostart = true autorestart = true stdout_logfile = /path/to/app/app/storage/logs/supervisor-pd-queue.log stdout_logfile_maxbytes = 10MB stderr_logfile = /path/to/app/app/storage/logs/supervisor-pd-queue.log stderr_logfile_maxbytes = 10MB 启动进程 $ sudo supervisorctl > reread # Tell supervisord to check for new items in /etc/supervisor/conf.d/ > add myqueue # Add this process to Supervisord > start myqueue # May say “already started” 查看进程是否启动 $ ps aux | grep php

January 14, 2015 · 1 min · 87 words · Eric Yang

创建GIT服务器

添加git 用户 sudo adduser git 创建authorized_keys,用于认证用户 su git cd mkdir .ssh && chmod 700 .ssh touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys 添加认证用户公钥 在本地执行 cat .ssh/id_rsa.pub | ssh git@git-server 'cat >> .ssh/authorized_keys' 创建git repo cd /opt/git mkdir project.git cd project.git git init --bare 输出信息: Initialized empty Git repository in /opt/git/project.git/ 远程repo地址 git@git-server:/opt/git/project.git

January 13, 2015 · 1 min · 51 words · Eric Yang

Linux服务器安全设置

翻译自Linode: Securing Your Server 以下配置环境为: 本地: Mac OS X 服务器: Ubuntu 14.04 添加用户,并将其加入sudo组 例如增加webapps用户,并将其加入webapps用户组: ssh root@<your-service-ip> // 使用root登录服务器 groupadd webapps // 创建webapps用户组 useradd -m -g webapps -s /bin/bash webapps -m 创建home根目录 -g 指定用户组 -s 指定使用的bash sudo usermod -aG sudo webapps -G 附加用户组 在本地创建并使用SSH key认证登录服务器 生成密钥 ssh-keygen -t rsa -C "your_email@example.com" 避免在每次登录的时候每次都需要输入passphrase eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa 上传至服务器 使用webapps登录服务器,并执行mkdir ~/.ssh && touch ~/.ssh/authorized_keys创建空文件authorized_keys用于存放公钥 在本地执行cat ~/.ssh/id_rsa.pub | ssh webapps@<your-server-ip> 'cat >> .ssh/authorized_keys' 禁止root用户密码登录 sudo vi /etc/ssh/sshd_config 修改 PermitRootLogin yes 为 PermitRootLogin without-password sudo service ssh restart 重启ssh服务 创建防火墙 创建文件 /etc/iptables....

December 26, 2014 · 2 min · 311 words · Eric Yang

如何使用Linux的screen命令

摘录自: http://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/ 功能 多终端共享一个SSH会话 能在网络状况不好的状况下保持可用 从多个地址断开并重新连接终端会话 在执行耗时任务时无需维持终端会话 安装 CentOS: yum install screen Ubuntu: apt-get install screen 起始命令 screen 进入screen模式 控制命令 Ctrl+a screen 使用Ctrl+a快捷键作为命令前缀来发送信号,例如Ctrl+a+?为打开screen帮助页面 创建窗口 Ctrl+a+c 使用默认视窗创建新的窗口,旧视窗能然可用 窗口之间切换 使用screen 向前或向后切换窗口 Ctrl+a+n 下一个窗口 Ctrl+a+p 上一个窗口 两次Ctrl+a 可以在最近的上一个或下一个窗口中来回切换 挂起会话 与当前的screen分离并跳出到原有的shell会话中,并可以使用screen -r重新连上 对于需要在服务器执行长时间消耗的任务是个非常不错的选择 PS: 如果当前网络连接中断,screen会自动挂起会话 Ctrl+a+d 恢复会话 如果你的会话连接由于某种原因中端,可以使用此命令恢复 screen -r 记录screen的输出 Ctrl+a+H 为当前会话创建日志进行追踪 screen 会跨多个会话进行日志追踪。对于在服务器操作较多的情况,可以有捕捉自己的操作 获取警告提醒 screen可以监听会话活动。在下载或者编译等耗时操作时,可用于提醒警告 当你在等待一个耗时进程的输出时,可使用Ctrl+a+M来监听活动。screen会等输出完成后,在页面底部闪出一条提醒。此时可切换至其他screen进行其他操作,而不需要时而切换回来查看任务是否完成 或者你在编译程序或下载文件,等待会话无内容输出的情况。可使用Ctrl+a+_来监听当前会话是否已无内容输出 锁定screen会话 当你要离开电脑一会儿,可使用Ctrl+a+x加入密码来锁定screen 停止screen 当完成任务后,推荐停止screen会话,而非挂起会话 输入exit Ctrl+a+k

December 22, 2014 · 1 min · 61 words · Eric Yang

Linux 常用命令笔记

Manage User /etc/shadow : Secure user account information /etc/passwd : User account information /etc/gshadow : Contains the shadowed information for group accounts /etc/group : Defines the groups to which users belong /etc/sudoers : List of who can run what by sudo /home/* : Home directories Add new Group groupadd [group] Add new User useradd -m -g [initial_group] -G [additional_groups] -s [login_shell] [username] -m creates the user home directory as /home/username. Within their home directory, a non-root user can write files, delete them, install programs, and so on....

December 18, 2014 · 4 min · 745 words · Eric Yang

使用mongohub在vagrant里连接mongodb

重要: 注释掉mongodb配置 # bind_ip = 127.0.0.1 forword 端口27017到宿主机 使用ssh tunnel方式连接 SSH Host = 127.0.0.1 SSH Port = 2222 Username = vagrant Password = vagrant key = ~/.vagrant.d/insecure_private_key

December 12, 2014 · 1 min · 27 words · Eric Yang