微软的必应搜索的每日图片不得不说,都是经典,美得一塌糊涂。看到很多把必应壁纸做电脑壁纸的软件,今天闲的蛋疼,就折腾了一下。
接口
我们用到的接口是
https://cn.bing.com/HPImageArchive.aspx?idx=0&n=1
这里的
idx=0
表示是显示当天的时间,如果要显示昨天的就将
idx=0
改为
idx=1
,以此类推。注意:bing支持查看历史图片15天以内的,数字就有范围限制了(0-15)。
获取当日图片
我们有了接口就可以直接利用正则表达式去匹配相关字符串了。下面给出一个获取并输出当日美图的php代码
<?php $str=file_get_contents('https://cn.bing.com/HPImageArchive.aspx?idx=0&n=1');if (preg_match("/<url>(.+?)<\/url>/ies", $str, $matches)) { $imgurl='https://cn.bing.com'.$matches[1];}if ($imgurl) { header('Content-Type: image/JPEG'); @ob_end_clean(); @readfile($imgurl); @flush(); @ob_flush(); exit();} else { exit('error');}?>
保存为bingpic.php,上传到服务器直接访问即可。
获取图片版权介绍
有了图片,没有文字怎么能满足饥渴的我,还是利用正则提取出图片版权信息
<?php$url=file_get_contents('https://cn.bing.com/HPImageArchive.aspx?idx=0&n=1'); if (preg_match("/<copyright>(.+?)<\/copyright>/ies", $url, $matches)) { $imgcopyright=$matches[1];}if ($imgcopyright) { header("Content-type: text/html; charset=utf-8"); echo $imgcopyright;} else { exit('error');}?>
tip:修改相关参数即可实现对应的文字说明
自动保存bing图片
自动在php文件同级目录下创建一个当前年月的文件夹,保存每天的bing美图并输出
<?phperror_reporting(0);$path=date('Ym');if (!file_exists($path)) { mkdir($path, 0777);}$pathurl = $path.'/'.date('d').'.jpg';if (!is_file($pathurl)) { $str=file_get_contents('https://cn.bing.com/HPImageArchive.aspx?idx=0&n=1'); if (preg_match("/<urlBase>(.+?)<\/urlBase>/ies", $str, $matches)) { $imgurl='https://s.cn.bing.com'.$matches[1].'_1920x1080.jpg'; copy($imgurl, $pathurl); }} header('Content-Type: image/JPEG'); @ob_end_clean(); @readfile($pathurl); @flush();@ob_flush();exit();?>
公司网站主要是靠百度流量来赚钱,主要是做移民签证,品牌名称:移民内参。有运营部同时负责产品运营,每周汇报收录情况、收录率、收录文章链接等情况。闲暇之余写了一个小功能,就是统计每个编辑本周发文链接,并查询百度收录情况计算收录率。最后生成图标,进行数据汇总。
一、实现代码
实际代码请参考博客二、原理
通过长时间的seo经验,发现在百度收录网址链接时会出现收录链接的索引,当无收录时会出现提交网址字样,我们利用此规则进行判断。其他搜索引擎同理。
seo三、开发平台已更新
上一篇文章讲解“路由 - 路由到模块/控制器/操作/操作方法”,本篇文章讲解“路由 - 路由到类的方法/重定向地址”。
路由到类的方法
路由到类的方法:
这种方式更进一步,可以支持执行任何类的方法,而不仅仅是执行控制器的操作方法。
1)动态方法
①在Index控制器中,新建classFun方法
②设置classFun方法的路由
预览:
注意:1. Index控制器的命名空间为\app\index\controller,加上类名Index与方法名classFun,形成路由到类的方法的路由。
2)静态方法
①修改Index控制器下的classFun方法的类型,改为静态方法
②修改classFun方法的路由,改为静态方法
预览:
注意:1. 支持传入额外的参数作为方法的参数调用(用于参数绑定),但经测试无效,接收不到额外的参数(V5.1.12)传入额外参数格式:Route::get('class/:id','\app\index\controller\Index::classFun?flg=7')
路由到重定向地址
重定向的外部地址必须以“/”或者http开头的地址。
如果路由地址以“/”或者“http”开头则会认为是一个重定向地址或者外部地址。
例如:
虽然都是路由到同一个地址,但是前者采用的是301重定向的方式路由跳转,这种方式的好处是URL可以比较随意(包括可以在URL里面传入更多的非标准格式的参数),而后者只是支持模块和操作地址。
1)重定向路由(“/”方式)
①在Index控制器中,新建rectFun方法
②设置rectFun方法的路由
非重定向路由设置:
预览:
重定向路由:
预览:
访问路由时,自动跳转到后边的路由地址。
注意:1. 以上的重定向路由使用的是“/”,跳转时,会直接使用域名+跳转地址访问,由于此时没设置虚拟域名,因此需要加上项目目录等路径。2. 在非重定向路由中,传参不需要在路由地址中体现,但在重定向路由中,需要将参数体现,并且需要加上参数名,即不设置路由时怎么访问,就怎么设置:Route::rule('rect2/:id','/tp5_1/public/index/index/rectFun/id/:id');3. 路由地址采用重定向地址的话,如果要引用动态变量,直接使用动态变量即可。
2)重定向路由(“http”方式)
采用重定向到外部地址通常对网站改版后的URL迁移过程非常有用,例如:
访问路由“baidu”直接跳转到百度页面。
3)重定向状态码
路由重定向默认使用301状态码,可以使用status方法单独设置。
4)redirect方法重定向
V5.1.3+版本开始,可以直接使用redirect方法注册一个重定向路由
ThinkPHP5连载为卓象程序员原创,转载请联系卓象程序员
关注卓象程序员,定期发布技术文章
下一篇讲解“路由 - 闭包支持”
在php中有很多的过滤,可以对输入的字符串进行过滤,同时也可以对邮件地址进行过滤,接下来我要讲的是php中的3种高级过滤,在开发中很实用。
第一种:过滤数值范围
在php经常要接收各种数据,其中数值是非常普遍的一种,我们接收到的数值并不是多大都行的,无用的数据对于我们的数据库来说就是浪费资源,所以在接收数据的时候,有必要对数字的范围进行过滤。
对数字的范围进行过滤这里需要用到的是FILTER_VALIDATE_INT这个关键字以及它的附加条件,步骤如下:
1、新建一个变量。
2、通过filter_var函数对这个变量进行过滤,过滤的根据是FILTER_VALIDATE_INT,附加条件是数字的最大值和最小值。例如:filter_var($shuzi,FILTER_VALIDATE_INT,array("options"=>array("min_range"=>$min,"max_range"=>$max))。
3、最后就是根据过滤的结果给出相应的提示信息。
第二种:对ipv6地址进行过滤。
如今ipv4地址已经用完了,逐渐开始使用ipv6地址,在接收这类IP地址的时候,我们很可能就会遇到ipv6这样的地址,针对这样的地址,我们借用FILTER_VALIDATE_IP,FILTER_FLAG_IPV6这两个条件来进行过滤。实例代码如下:
$ipv6="2004:0db9:89a3";
$panduan=filter_var($ipv6,FILTER_VALIDATE_IP,FILTER_FLAG_IPV6);
if($panduan){
echo "这是合法的ipv6地址";
}
else{
echo "这个ipv6地址不合法";
}
第三种:对查询语句的过滤。
在接收数据的时候,我们不能防止用户输入什么内容,有些用户就故意在输入信息的时候,搞sql注入,在网址上添加查询语句,这样的语句我们是要拒绝接收的,所以,在接收网址的时候,对它进行过滤是非常有必要的,判断地址中是否包含了查询语句。
判断是否包含查询语句,我们可以通过FILTER_VALIDATE_URL和FILTER_FLAG_QUERY_REQUIRED这两个关键字来实现,具体代码如下:
$chaxun="http://www.nihao select * from b hello";
$panduan=filter_var($chaxun,FILTER_VALIDATE_URL,FILTER_FLAG_QUERY_REQUIRED);
if($panduan){
echo "url地址是不合法的";
}
else{
echo "url地址是合法的";
}
以上就是关于3种php高级过滤,有兴趣的朋友可以了解一下,同时欢迎提出宝贵的意见和建议。
Lumen为速度而生的 Laravel 框架,是Laravel框架的精简版,我们也可以通过需求再做扩展,我们平常制作API接口服务器首先。
首先,搭建API服务器
我们用的是OneinStack,所以新增虚拟主机比较方便。
cd /root/oneinstack./vhost.sh
然后根据提示操作下即可。
下载Lumen,新建一个项目
先cd到前面创建的站点目录下,然后执行下载命令
composer globalrequire"laravel/lumen-installer"下载Lumen的安装包
这个下载比较耗时,请耐心等待~
新建项目 api
composer create-project --prefer-dist laravel/lumen api
配置.env
主要配置APP_KEY、APP_URL
APP_KEY= ******* //随机32位字符APP_URL= ****** //你的主域名
这边还需要配置下数据库,然后执行下命令
php artisan cache:clear
写个测试路由
$router->get('/test', function (){return response()->json(["msg"=>"API URL TEST.","code"=>"000000"]);});
访问对应网址,获得如下参数
{"msg":"API URL TEST.","code":"000000"}
补充
接下你可以根据项目需要,自己补充路由和控制器,以及自定义中间件。
安装过程相对简单,如果遇到Linux安装超时报错的。
可以在自己的Win系统里面下载好,并创建好项目,然后再上传到服务器,并且设置入口到public,重启服务器就可以访问了~
1、首先,我们需要先下载一份PHP类—getid3 https://codeload.github.com/JamesHeinrich/getID3/zip/master
2、解压刚才下载好的文件,拿出两个文件夹 getid3 及 helperapps
3、加载音频类文件 require_once('getid3/getid3.php');
4、获取你数据库中的文件的URL 如 : $url = "../uploadfile/file/20180608/20180608061015_74942.m4a"
5、$arr = explode("/", $url); 用"/"拆开这个字符串
5、$file_url = realpath(dirname(__FILE__).'/../../').DIRECTORY_SEPARATOR.$arr[1].DIRECTORY_SEPARATOR.$arr[2].DIRECTORY_SEPARATOR.$arr[3].DIRECTORY_SEPARATOR.$arr[4] ;
拿到文件的真实地址,这里只能用绝对路径 ,DIRECTORY_SEPARATOR是自动判断"/还是\".
这里可以打印下结果 D:\phpStudy2\WWW\uploadfile\file\20180608\20180608061317_79304.m4a
6、拿到了文件的真实路径后
$getID3 = new getID3(); //实例化类
$ThisFileInfo = $getID3->analyze($file_url); //分析文件,$file_url为音频文件的地址
$fileduration=$ThisFileInfo['playtime_seconds'];//这里拿的是音频时长,你可以拿其他参数
好了,是不是非常简单的就实现了呢,有任何问题可以给我留言哦!
最近我一直帮助我朋友对一个项目网站进行二次开发和防护,为了简单抵挡一下竞争对手的 DDoS 攻击,他给网站开启了腾讯云CDN加速服务。
开启 CDN 之后,我之前给他写的 Shell 防护脚本也就宣告无效了,因为不管是正常访问还是攻击访问,脚本拿到的 IP 都是 CDN 节点的,而我不可能把 CDN 的节点 IP 也给禁用了,那就都不能访问了。
目前国内已经争相出现了百度云加速、腾讯云、阿里云、加速乐、360 网站卫士以及安全宝等CDN加速服务。不仅能够有效的隐藏自己的服务器IP地址,还能很好的防御DDos攻击和加快网站的访问速度,cdn加速对于网站来说是很有必要的。
于是,网站的访问模式就变为:
用户浏览器 → CDN 节点 → 网站源服务器
甚至是更复杂的模式:
用户浏览器 → CDN 节点(CDN 入口、CC\DDoS 攻击流量清洗等) → 腾讯云盾 → 源服务器
可以看到,我们的网站中间经历了好几层的透明加速和安全过滤, 这种情况下,我们就不能用上面的“普通配置”。因为普通配置中基于【源 IP 的限制】的结果就是,我们把【CDN 节点】或者【阿里云盾】给限制了,因为这里“源 IP”地址不再是真实用户的 IP,而是中间 CDN 节点的 IP 地址。
我们需要限制的是最前面的真实用户,而不是中间为我们做加速的加速服务器。
其实,当一个 CDN 或者透明代理服务器把用户的请求转到后面服务器的时候,这个 CDN 服务器会在 Http 的头中加入一个记录
X-Forwarded-For : 用户 IP, 代理服务器 IP
如果中间经历了不止一个代理服务器,这个记录会是这样
X-Forwarded-For : 用户 IP, 代理服务器 1-IP, 代理服务器 2-IP, 代理服务器 3-IP, ….
可以看到经过好多层代理之后, 用户的真实 IP 在第一个位置, 后面会跟一串中间代理服务器的 IP 地址,从这里取到用户真实的 IP 地址,针对这个 IP 地址做限制就可以了。
我们如何通过PHP获取访问用户的真实IP呢?
今天我就讲自己编写的代码发给大家,支持cdn加速获取用户IP,也支持不加速获取IP。IsCDN默认flase为不启动cdn加速获取用户IP,true则相反。
张新全博客
修改论坛后台登录地址,是为了防止黑客入侵爆破管理员密码,
其实修改后台地址,就是修改根目录中的admin.php,把admin替换成其他字,就可以修改了.
修改后有什么坏处?
网上的教程说改了文件名后还要到header_userstatus.htm里修改前台管理中心链接地址,其实不仅需要改这个文件,需要修改很多的文件,比如前台帖子浏览页面左侧信息栏下面的ip和禁止什么的管理都是指向的原来的admin.php,还要修改viewthread_node.htm文件修改指向地址,而且管理员在登录前台控制面板进行一些禁止操作是,因为是管理员进行操作,所以会自动访问后台地址进行禁止操作,而这里的指向地址也需要修改,还有就是前台用户个人资料页的禁止等超链接也是默认的后台地址,总之,需要修改很多文件的,而且就算你全改过来了,如果知道你网站的模板文件夹地址,直接访问template/模板文件夹/common/header_userstatus.htm也能看到你修改后的后台地址.
不修改后台地址,怎样可以加强安全?
admin.php是discuz默认的后台地址,正常情况下可以直接访问,为了防止某些恶意访问的情况,可以修改以下内容进行安全性能的提升。
打开admin.php文件,
查找
$discuz->init();
在下面添加下面的代码,就可以了
if(!$_G['uid'] || !getstatus($_G['member']['allowadmincp'], 1)) {header('Location: /');
}
这段代码的作用:如果不是管理员,是访问不了论坛后台页面,大大增强了后台的保护.
总结:管理员密码要改得复杂点,别改那么简单.
在做某某介绍网的时候如何才能实现当地点开是当地的名字加网站。
<?php
$getIp=$_SERVER["REMOTE_ADDR"];
echo 'IP:',$getIp;
echo '<br/>';
$content = file_get_contents("http://api.map.baidu.com/location/ip?ak=7IZ6fgGEGohCrRKUE9Rj4TSQ&ip={$getIp}&coor=bd09ll");
$json = json_decode($content);
echo 'log:',$json->{'content'}->{'point'}->{'x'}; //按层级关系提取经度数据
echo '<br/>';
echo 'lat:',$json->{'content'}->{'point'}->{'y'}; //按层级关系提取纬度数据
echo '<br/>';
print $json->{'content'}->{'address'}; //按层级关系提取address数据
?>
function test($url = ''){
$ex = explode('/',$url);
return $ex[2];
}
$url = "http://hongji.zg02.com/l/psj/";
echo test($url);