2017年9月

ThinkPHP 资源路由的两种定义方式

ThinkPHP 5 支持设置 RESTFul 请求的资源路由,在路由配置文件 route.php 中即可使用 Route::resource 方法进行动态注册:

use think\Route;

Route::resource('blog', 'index/blog');

也可在路由配置文件 route.php 最后的返回数组中通过 __rest__ 键添加资源路由定义:

return [
    // 定义资源路由
    '__rest__' => [
        // 指向 index 模块的 blog 控制器
        'blog' => 'index/blog',
    ],
    // 定义普通路由
    'hello/:id' => 'index/hello',
]

如果是多级控制器,其定义方式如下:

use think\Route;

Route::resource('api/v1/feedback', 'api/v1.Feedback');

return [
    '__rest__' => [
        'api/v1/feedback' => 'api/v1.Feedback',
    ],
]

在线查看 Office 文件

如果你想让访客能够在未安装 Office 的情况下也能查看网站上的 Office 文档,可以使用微软提供的 View Office documents online 服务,只需提供文档的 URL,即可在浏览器中在线查看各类 Office 文档(Word、 Excel、PowerPoint)。

访问 View Office documents online 服务。

实际上,你只需把文档的网址(必须以 http://https:// 开头)通过 src 参数指定给以下网址就可以了:

`
https://view.officeapps.live.com/op/view.aspx?src=文档网址
`

PHP 简单异步 HTTP 请求实现

某些情况下,我们只需要发出 HTTP 请求,并不需对其响应进行处理,以实现某种通知机制,那么使用异步方式发起该 HTTP 请求无疑更合适。在 PHP 中,我们可通过 fsockopen 函数来实现此需求,下面是代码:

function async_http_get($url, $host = '') {
    $host = empty($host) ? parse_url($url, PHP_URL_HOST) : $host;
    $host = empty($host) ? $_SERVER['HTTP_HOST'] : $host;

    $fp = fsockopen($host, 80, $errno, $errstr, 30);
    if (!$fp) {
        return "$errno: $errstr";
    }

    $out  = 'GET '.$url.' HTTP/1.1' . "\r\n";
    $out .= 'Host: '.$host."\r\n";
    $out .= 'Connection: close'."\r\n\r\n";

    fwrite($fp, $out);
    fclose($fp);

    return true;
}

PHP 中根据地理位置经纬度坐标计算两点距离

在涉及地理位置的应用场景中,往往需要计算两点的距离,比如根据用户所处位置,计算各门店与其距离。下面的 PHP 函数根据两点的经纬度坐标计算两点距离。

function calc_distance($lon1, $lat1, $lon2, $lat2)
{
    // 角度转换为弧度
    $ew1 = $lon1 * 0.01745329252;
    $ns1 = $lat1 * 0.01745329252;
    $ew2 = $lon2 * 0.01745329252;
    $ns2 = $lat2 * 0.01745329252;
    // 求大圆劣弧与球心所夹的角(弧度)
    $distance = sin($ns1) * sin($ns2) +
        cos($ns1) * cos($ns2) * cos($ew1 - $ew2);
    // 调整到[-1..1]范围内,避免溢出
    if ($distance > 1.0) {
         $distance = 1.0;
    } else if ($distance < -1.0) {
        $distance = -1.0;
    }
    // 求大圆劣弧长度
    $distance = 6370693.5 * acos($distance);
    return $distance;
}

微信小程序页面背景色设置

根据设计稿,需要对微信小程序的页面背景色进行设置,查看官网开发文档,可以使用 app.json 文件来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间等。其中由 window 属性对象来设置默认页面的窗口表现:

{
  "window":{
    "navigationBarBackgroundColor": "#ffffff",
    "navigationBarTextStyle": "black",
    "navigationBarTitleText": "微信接口功能演示",
    "backgroundColor": "#eeeeee",
    "backgroundTextStyle": "light"
  }
}

乍一看,会认为 backgroundColor 是我们需要的,但设置之后,发现页面背景并无变化。经过一番摸索,才搞明白 backgroundColor 设置的窗口背景色,只在页面切换跳转时能看到(一闪而过)。我们要对页面的背景色进行设置,只需在页面对应的 .wxss 文件或 app.wxss 中设置 page 标签(大致相当于 HTML 网页中的 body 标签)的样式属性即可,比如:

page {
  background-color: #fff;
}