類別: <span>ThinkPHP</span>

抓取gzip响应的内容

方法一:
crul一切外部请求的关键,请求head添加gzip:curl_setopt($ch, CURLOPT_ENCODING, “gzip”);

方法二:
简易方法get,需zlib库扩展
file_get_contents(“compress.zlib://”.$url);


日常魔改ThinkPHP5.0跨模块调用控制器

/**
 * 建议部署在入口中间层
 */
public function _initialize($con = '') {
    parent::_initialize(); // TODO: Change the autogenerated stub
    $action = explode('.', $this->request->action());

    $con        = 'app\practice\controller\\' . $action[0];
    $controller = new $con();

    $action = $action[1] ?? 'index';
    $controller->$action();
    return die;
}

关于Thinkphp5优化,字符串变量批量加载模板文件

tp官方使用的批量加载需要固定常量,或者固定的某个或多个变量,例:

{include file="$html_a,$html_b" /}
{include file="/view/book/a.html,/view/book/a.html" /}

tp官方代码中,标签解析函数(\thinkphp\library\think\Template.php):

/**
 * 分析加载的模板文件并读取内容 支持多个模板文件读取
 * @access private
 * @param  string $templateName 模板文件名
 * @return string
 */
private function parseTemplateName($templateName)
{
    $array    = explode(',', $templateName);
    $parseStr = '';
    foreach ($array as $templateName) {
        if (empty($templateName)) {
            continue;
        }
        if (0 === strpos($templateName, '$')) {
            //支持加载变量文件名
            $templateName = $this->get(substr($templateName, 1));
        }
        $template = $this->parseTemplateFile($templateName);
        if ($template) {
            // 获取模板文件内容
            $parseStr .= file_get_contents($template);
        }
    }
    return $parseStr;
}

我们可以看到,官方函数中,先把多个参数解释成数组再进行下一步加载。即使加入了变量参数,仍导致我们要事先确立好需要加载的文件数量。

优化:

/**
 * 分析加载的模板文件并读取内容 支持多个模板文件读取
 * @access private
 * @param  string $templateName 模板文件名
 * @return string
 */
private function parseTemplateName($templateName)
{
    if (0 === strpos($templateName, '$')) {
        //支持加载变量文件名
        $templateName = $this->get(substr($templateName, 1));
    }

    $array    = explode(',', $templateName);
    $parseStr = '';
    foreach ($array as $templateName) {
        if (empty($templateName)) {
            continue;
        }
        $template = $this->parseTemplateFile($templateName);
        if ($template) {
            // 获取模板文件内容
            $parseStr .= file_get_contents($template);
        }
    }
    return $parseStr;
}

把官方的自带变量识辨解析函数提前到循环外解析,这样你可在控制器中自定义你所需要加载的文件数量以及各自的文件路径。

最后,官方的模板解析函数传递的变量无法太过复杂,控制器事先把数组转换成排列字符串即可。


Thinkphp框架插件,composer:require(更新)

"topthink/think-captcha": "^1.0",
"mpdf/mpdf":"v6.1.2",
"phpexcel/phpexcel": "1.7.6"

TP二维码插件

mpdf生成插件

phpExcel生成与解析插件