分类 PHP 下的文章

php 给文章添加内链

假定后台已经保存了内链关键词,在输出时保存到了数组$keywords中,文章内容保存在$content中,如下:

$content = '<p>这是我下面对内链关键词的举例哈。我们喜欢有abc情调的生活。<div style="height:100px;">abcd</div>,现在我们就来测试1一下,如果测试结果很好,就说明测试结果有效</p>'
$keywords = array (
    array('abc', 'http://www.baidu.com'),
    array('abcd', 'http://www.baidu.com'),
    array('测试', 'http://baidu.com', 1),
    array('测试1', 'http://www.baidu.com')
    
);

那么,如何给文章中指定的关键词添加链接呢?而且,要考虑到,有的关键词本身就包含了另外的关键词。这里我们采用对关键词排序的做法,长度更长的关键词优先替换,已经包含<a>标签的不再替换,于是得到如下函数:

function keyLink($content, $keywords) {
    if(!$keywords) return $content;
    
    $keywords = keywordSort($keywords);
    
    $data = $content;
    foreach($keywords as $k => $v) {
        $quote = str_replace(array("'", '-'), array("\'", '\-'), preg_quote($v[0]));
        $data = preg_replace('\'(?!((<.*?)|(<a.*?)))(' . $quote . ')(?!(([^<>]*?)>)|([^>]*?</a>))\'si', '<a href="' . $v[1] . '" target="_blank">' . $v[0] . '</a>', $data, 1); //数字1代表在正则中出现的替换频率 -1 或者留空表示不限制
        if($data == '') $data = $content;
    }
    return $data;
}

function keywordSort($keywordsArr) {
    usort($keywordsArr, function($a, $b) {
        $al = strlen($a[0]);
        $bl = strlen($b[0]);
        if ($al == $bl)
            return 0;
        return ($al > $bl) ? -1 : 1;
    });
    return $keywordsArr;
}

$content = keyLink($content, $keywords); // 此即添加内链的内容

ThinkPHP 5.1 获取版本号,当前模块名、控制器名和方法名

ThinkPHP 5.1 获取当前模块名、控制器名和方法名有两种方式,具体如下:

// 助手函数
$module = request()->module();
$controller = request()->controller();
$action = request()->action();

// Facade方法
// use think\facade\Request;
$module = Request::module();
$controller = Request::controller();
$action = Request::action();

ThinkPHP 5.1 获取当前版本号:

// use think\facade\App;

echo App::version();

输出结果:5.1.35 LTS

百度编辑器 ueditor 增加缩略图及水印功能

Ueditor默认是不带水印功能的,但有时候网站运营需要编辑器自带水印来提高工作效率,于是我也试着摸索出了一套方法。在实现我自己的方法之前,也看了其他人的实现方法:修改 Uploader.class.php,新增水印方法,网上能找到的基本都是这类方法(参考链接),其实也挺好,只是过程稍显复杂,我希望能更简单些。

在仔细研究了ueditor关于图片上传部分的代码后,我发现,只需要在php文件返回json数据之前对原图片进行处理即可实现水印功能,代码如下:

在此要特别感谢 PicThumb.class.php 作者,这是一个开源图片处理库,包括缩放、裁剪、水印等,使用起来方便简单,我的方法里就引用了该文件
// 文件路径 ueditor/php/action_upload.php
// ...
require /path/to/PicThumb.class.php;
// ...

$fileinfo = $up->getFileInfo();

/*
 * 水印处理
 */
// 判断是图片上传(包括单图和多图),不是视频、文件
if (htmlspecialchars($_GET['action']) == 'uploadimage') {
    $abPath = $_SERVER['DOCUMENT_ROOT'];
    $abPath = rtrim($abPath, '/') . '/';
    
    // 根据后台的相关设置,配置PicThumb相关参数 
    if (class_exists('PicThumb')) {
        $params = array(
            'type' => $_COOKIE['thumbtype'],                // fit/crop 缩放、裁剪
            'width' => $_COOKIE['thumb_w'],                 // 目标图宽度
            'height' => $_COOKIE['thumb_h'],                // 目标图高度
            'watermark' => $abPath . $_COOKIE['watermark'], // 水印图片
            'gravity' => $_COOKIE['imgposition']            // 水印位置
        );
        $thumbobj = new PicThumb();
        $thumbobj->set_config($params);
    } //. end
    
    $filename_arr = explode('/', $fileinfo['url']);
    $ym = date('Ymd');
    $filename = end($filename_arr);
    
    // 判断后台设置判断是否需要生成缩略图和水印
    if ($_COOKIE['imgscale'] || $_COOKIE['imgwater']) {
        $flag = $thumbobj->create_thumb($abPath . 'uploadfile/' . $ym . '/' . $filename, $abPath . 'uploadfile/' . $ym . '/thumb' . $filename);
        if ($flag) {
            $fileinfo['url'] = '/uploadfile/' . $ym . '/thumb' . $filename;
        }
    }
}

/*
 * 水印处理完成
 */

/* 返回数据 */
return json_encode($fileinfo);

通过ueditor的配置文件可以限制上传图片大小,但由于配置文件是.json格式,不便于动态设置,所以一并通过PicThumb 库实现图片缩放也是很好的办法。

简单易用的开源web分析软件:Open Web Analytics

owa_logo_200w.png

Open Web Analytics(OWA)是一款免费的开源网站分析软件,可用于跟踪和分析人们如何使用你的网站和应用程序。OWA 基于 GPL 授权,让网站所有者或开发者以一种非常简单的方式向其网站添加分析功能,可以使用 JavaScriopt、PHP 或者基于 REST 的 API。而且,OWA 还内建支持对由 WordPress 和 MediaWiki 这类浏览内容管理网站进行跟踪。

官网链接:http://www.openwebanalytics.com
下载地址:https://github.com/padams/Open-Web-Analytics

安装完成后,添加需要统计的网站,你会获取到一段js代码,复制到网站需要统计的页面即可(类似百度统计代码)。后台界面如下:
9f145cdb-759a-4375-b6c3-e48084955be3.png