php

ThinkPHP3.1迁移到PHP7

一、在PHP7中,preg_replace不能用/e修饰符,所以用preg_replace_callback代替preg_replace, 需要修改的文件包括 ThinkPHP\Lib\Template\ThinkTemplate.class.php ThinkPHP\Lib\Core\Dispatcher.class.php ThinkPHP\Lib\Core\Db.class.php ThinkPHP\Lib\Behavior\CheckRouteBehavior.class.php ThinkPHP\Extend\Mode\Lite\Dispatcher.class.php ThinkPHP\Lib\Behavior\ReadHtmlCacheBehavior.class.php ThinkPHP\Common\common.php 1)ThinkPHP\Lib\Template\ThinkTemplate.class.php 这个文件大约需要修改8处地方 NO1. 大约在137行,将 [php] view plain copy $tmplC...

重建(替换)一些被 PHP7 废弃的函数

  重建(替换)一些被 PHP7 废弃的函数 <?php if(!function_exists('ereg')) { function ereg($pattern, $subject, &$matches = []) { return preg_match('/'.$pattern.'/', $subject, $matches); } } if(!function_exists('eregi')) { function eregi($pattern, $subject, &$matches = []) { return preg_match('/'.$pattern.'/i', $subject, $matches); } } if(!function_exists('ereg_replace')) { function ereg_replace($pattern, $replacement, $string) { return preg_replace('/'.$pattern.'/', $...

PHP js 左移 << 操作

主要因为 PHP 运行在 64位, js 是 32位,造成的. 问题表现: In Javascript: document.write((1732584193 << 5)+"<br />"); document.write((125 << 5)+"<br />"); output: -391880672 4000 In PHP: echo (1732584193 << 5)."<br />"; echo (125 << 5)."<br />"; output: 55442694176 4000 解决办法: $a = 1732584193; $b = $a << 5; $c = (($a << 5) << 32) >> 32; echo $a, "\n"; # 1732584193 echo $b, "...

linux下 安装php的gettext模块

 linux下 安装php的gettext模块 安装php的模块有两种方式: 一、重新编译php,加上--with-gettext 二、动态安装 现在说下第二个动态安装 wget https://ftp.gnu.org/pub/gnu/gettext/gettext-0.20.1.tar.gz tar zxf gettext-0.20.1.tar.gz cd gettext-0.20.1 ./configure make && make install   1、下载同版本的php原包,解压后进入ext目录,目录下便是模块 2、进入gettext目录下执行: /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config (以上两个命令的路径根据自己系统情况而定) make make install 3、在php.ini里添加上gettext.so extension = "gettext...

ThinkPHP5 修改器不生效

  ThinkPHP5 修改器不生效,感觉越来越难用了,文档写的也不清楚,很多莫名其妙的问题. 修改器是个好东西,可以自动处理一些值,这次我遇到的问题是 我字段中间有下划线 比如  new_name 这样的话 修改器函数名需要定义为 setNewnameAttr 否则会不执行.   public function setNewnameAttr($value) { 这里写你处理值的算法 return $value; }

linux php gettext 多国文字翻译失效问题

 最近下载了一套程序,其中多国文字翻译用的是 php gettext 扩展, 本地调试是windows upupw 一切正常,上传到vps 里就无效了,插件设置都正常. 最后找到了解决办法, 使用locale -a可以看到os支持的语言文字国家地区码, 比如我的机器 执行 locale -a 提示: C C.UTF-8 POSIX 我将原本的 ZH-cn.UTF-8 修改为 C.UTF-8 并且将语言文件目录也修改为这个. 然后刷新 就 可以正常翻译了.

thinkphp5 buildHtml 静态文件生成

 利用\think\template\driver\File.php文件整合buildHtml 1.在controller.php创建方法如下 /** * 创建静态页面 * @access protected * @htmlfile 生成的静态文件名称 * @htmlpath 生成的静态文件路径 * @param string $templateFile 指定要调用的模板文件 * 默认为空 由系统自动定位模板文件 * @return string * */ protected function buildHtml($htmlfile = '', $htmlpath = '', $templateFile = '') { $content = $this->fetch($templateFile); $htmlpath = !empty($htmlpath) ? $htmlpath : './appTemplate/'; $htmlfile = $htmlpath . $htmlfile . '.'.config('url_html_su...

PHP 读取配置文件(.ini文件)

 parse_ini_file (PHP 4, PHP 5, PHP 7) parse_ini_file — 解析一个配置文件 说明 ¶ array parse_ini_file ( string $filename [, bool $process_sections = false [, int $scanner_mode = INI_SCANNER_NORMAL ]] ) parse_ini_file() 载入一个由 filename 指定的 ini 文件,并将其中的设置作为一个联合数组返回。 ini 文件的结构和 php.ini 的相似。 参数 ¶ filename 要解析的 ini 文件的文件名。 process_sections 如果将最后的 process_sections 参数设为 TRUE,将得到一个多维数组,包括了配置文件中每一节的名称和设置。process_sections 的默认值是 FALSE。 scanner_mode Can either be INI_SCANNER_NORMAL (def...

PHP 7.2 OpenSSL实现DES算法 代替mcrypt_encrypt支持pkcs5Pad

 <?php // php 7.2 class CryptDes { var $key; var $iv; //偏移量 function CryptDes( $key, $iv=0 ) { //key长度8例如:1234abcd $this->key = $key; if( empty($iv) ) { $this->iv = $key; //默认以$key 作为 iv } else { $this->iv = $iv; } } function encrypt($data) { $data = $this->pkcs5Pad ( $data, 8 ); return base64_encode(openssl_encrypt ($data, 'des-cbc', $this->key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $this->iv)); } function decrypt(...

Thinkphp5 海量数据查询分页(paginate)ORDER BY和LIMIT 造成查询很慢的临时解决办法

 一台数据监控后台,图省事就用Thinkphp5写了下,数据30万的时候分页就很卡了,基本上6秒才能查询执行完。 基本上是 ORDER BY 和 LIMIT 造成的查询很慢,详细的就不多说了,下面贴一下我自己的解决办法,没有深入去处理,只是个临时解决办法,仅供参考。 涉及文件:\thinkphp\library\think\db\Query.php 涉及函数:paginate 涉及代码: //$results = $this->options($options)->bind($bind)->page($page, $listRows)->select();  这是原本的查询代码,注释掉 下面两行是新增的查询代码: $sql="SELECT * FROM ".$options['table']." INNER JOIN (SELECT id FROM ".$options['table']." ORDER BY ".key($options['order'])....