PHP 简单的进位换算

1/** 2 * @author MRASONG 3 * @param int $number The number being formatted 4 * @param int $decimals Sets the number of decimal points. 5 * @param string $format The format string [sprintf] 6 * @return string 7 */ 8public static function fsize($number=0, $decimals=2, $format='%s %s'){ 9 $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB'); 10 $i = 0; 11 $base = pow(2, 10); 12 $size = $number; 13 while ($number >= pow($base, $i+1)) { 14 $size = $number / pow($base, ++$i); 15 } 16 return sprintf($format, number_format($size, $decimals, '.', ''), $units[$i]); 17}

三月 16, 2017

PHP判断是否为SSL链接(https)

1function is_ssl(){ 2 return isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 1 || strtolower($_SERVER['HTTPS'])=='on') 3 || isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT']==443 4 || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO']=='https' 5 || isset($_SERVER['HTTP_X_CLIENT_PROTO']) && $_SERVER['HTTP_X_CLIENT_PROTO']=='https'; 6}

十二月 23, 2016

Nginx 日志自动切割

1cd /etc/logrotate.d 2vi /etc/logrotate.d/nginx 1/home/wwwlogs/*.log { 2 missingok 3 dateext 4 notifempty 5 daily 6 rotate 7 7 sharedscripts 8 postrotate 9 if [ -f /usr/local/nginx/logs/nginx.pid ]; then 10 kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` 11 fi 12 endscript 13} :wq! 保存退出 ...

十二月 23, 2016

nginx 实现自定义反向代理错误页面

我们经常在处理 nginx 反向代理时,会遇到这样的问题 怎样重新定义上游服务器的错误页面 举个栗子: 我们有一台后台 server 是 windows 服务器。 架构时我们用前端 linux 服务器来做转发,windows 服务器只做后端业务处理。 这时,我们会发现,若后端应用没有定义一个漂亮的 404 页面,用户收到的将是一个 IIS 的默认错误页面。 怎样在不配置 IIS 的情况下实现 nginx 自定义反向代理错误页面呢? ...

十月 11, 2016

Phalcon 框架如何实现主从读写分离

假设你已经在 DI 容器里注册了俩 db services,如下: 1<?php 2// 主库 3$di->setShared('dbWrite', function() use ($config) { 4 return new \Phalcon\Db\Adapter\Pdo\Mysql(array( 5 "host" => $config->w_database->host, 6 "username" => $config->w_database->username, 7 "password" => $config->w_database->password, 8 "dbname" => $config->w_database->name 9 )); 10}); 11// 从库 12$di->setShared('dbRead', function() use ($config) { 13 return new \Phalcon\Db\Adapter\Pdo\Mysql(array( 14 "host" => $config->r_database->host, 15 "username" => $config->r_database->username, 16 "password" => $config->r_database->password, 17 "dbname" => $config->r_database->name 18 )); 19}); 然后创建一个父 Model : ...

八月 26, 2016

不用第三个参数 ,交换a, b变量值

1$a = 'a'; 2$b = 'b'; 3list($b, $a) = array($a, $b);

四月 25, 2016

git 出现 Your account has been blocked 的解决方法

1$ git push origin master 2GitLab: Your account has been blocked. 3fatal: Could not read from remote repository. git 提交时出现以上问题,只用重新设置下远程 url 即可 1$ git remote set-url origin git@yourhost.com:org/project.git

一月 13, 2016

不得不吐槽下 WIC 的官网了。。。

http://webpublisher.enorth.com.cn/ 这么个东西 好吧 我已经无语了

十二月 18, 2015

API文档聚合浏览器 dash / zeal

Dash 是一个 API 文档浏览器( API Documentation Browser),以及代码片段管理工具(Code Snippet Manager)。 它就只有这两个功能,但确实是程序员最为关心的特性,可以毫不夸张地说,Dash 是它们之中做的最好的一个!非常实用。从它第一版发布用到现在,绝对是一个你值得拥有的文档管理工具. ...

十一月 12, 2015

BaiduLinkSubmit for typecho 百度链接主动提交工具

写了个百度链接主动提交工具,要的拿走吧,不谢 下载地址:BaiduLinkSubmit.v1.0.0.zip 附:使用主动推送功能会达到怎样效果 1<?php 2/** 3 * 百度站长工具 链接提交 4 * 发布、更新文章后,自动提交百度链接更新 5 * 详情请查看 http://dwz.cn/265Rcs 6 * 7 * @package BaiduLinkSubmit 8 * @author mrasong 9 * @version 1.0.0 10 * @link http://mrasong.com/a/baidu-link-submit-for-typecho 11 */ 12class BaiduLinkSubmit implements Typecho_Plugin_Interface { 13 /* 激活插件方法 */ 14 public static function activate(){ 15 Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array(__CLASS__, 'render'); 16 Typecho_Plugin::factory('Widget_Contents_Page_Edit')->finishPublish = array(__CLASS__, 'render'); 17 return _t('请设置 <b>站点域名</b> 和 <b>密钥</b>'); 18 } 19 20 /* 禁用插件方法 */ 21 public static function deactivate(){} 22 23 /* 插件配置方法 */ 24 public static function config(Typecho_Widget_Helper_Form $form){ 25 preg_match("/^(http(s)?:\/\/)?([^\/]+)/i", Helper::options()->siteUrl, $matches); 26 $domain = $matches[2] ? $matches[2] : ''; 27 $site = new Typecho_Widget_Helper_Form_Element_Text('site', NULL, $domain, _t('站点域名'), _t('站长工具中添加的域名')); 28 $form->addInput($site->addRule('required', _t('请填写站点域名'))); 29 30 $token = new Typecho_Widget_Helper_Form_Element_Text('token', NULL, '', _t('准入密钥'), _t('更新密钥后,请同步修改此处密钥,否则身份校验不通过将导致数据发送失败。')); 31 $form->addInput($token->addRule('required', _t('请填写准入密钥'))); 32 } 33 34 /* 个人用户的配置方法 */ 35 public static function personalConfig(Typecho_Widget_Helper_Form $form){} 36 37 /* 插件实现方法 */ 38 public static function render($contents, $widget){ 39 $options = Helper::options(); 40 $site = $options->plugin(__CLASS__)->site; 41 $token = $options->plugin(__CLASS__)->token; 42 43 $urls = array( $widget->permalink ); 44 $api = sprintf('http://data.zz.baidu.com/urls?site=%s&token=%s', $site, $token); 45 46 $client = Typecho_Http_Client::get(); 47 if ($client) { 48 $client->setData( implode(PHP_EOL, $urls ) ) 49 ->setHeader('Content-Type', 'text/plain') 50 ->setTimeout(30) 51 ->send($api); 52 53 $status = $client->getResponseStatus(); 54 $rs = $client->getResponseBody(); 55 return true; 56 } 57 return false; 58 } 59}

十月 27, 2015