分类 php 下的文章

[typecho]批量插入的做法

前言

最近想起写推特删除的插件,就往下做了点,结果发现,批量插入推文ID的时候,速度很慢,翻了下TYPECHO 关于DB的代码,发现都是自动提交事务的模式。必须得改,涉及到底层的修改(只是返回了两个私有的对象),修改之后,速度提升了不是一点半点,基本上毫秒级就能插入完成,原先要十几秒。

调整

修改home/var/Typecho/Db/Adapter/Pdo.php,增加


 public function getObject(){
        return $this->_object;
    }

修改home/var/Typecho/Db.php,增加

public function getAdapter(){
        return $this->_adapter;
}

使用

因为是pdo,抽象了具体的数据库实现,事务直接启动,最后提交,都是一样的操作,比如下面的代码:

        $sql = "INSERT INTO ".$prefix."tabletable(id_str,stete)  VALUES(?,?)";
        //改了两个文件就为了取到这个
        $stmt = $this->db->getAdapter()->getobject()->prepare($sql);
        $stmt->bindParam(1, $id_str);
        $stmt->bindParam(2, $state);
        //开启事务
        $this->db->getAdapter()->getobject()->beginTransaction();
        for ($x=0;$x<sizeof($ids);$x++) {
            $id_str=$ids[$x];
            $state=$st[$x];
            $stmt->execute();
        }
        //提交事务
        $this->db->getAdapter()->getobject()->commit();

[typecho]做了一个书架插件

前言

之前用的插件是熊猫小A写的一个同步豆瓣的插件,但现在不能用了,提示豆瓣的api接口过期。网上搜索了很久都没有找到能用的api。于是,就参考他的插件代码,改了一份本地化版的插件。

因为换工作了,时间多起来,现在做运维方面的工作,开发倒是生疏了很多,这个插件前端大量使用了熊猫小A的代码,后端的代码,参考了一些方法。有兴趣的可以自己翻阅。

特性

  1. 采用api.jike.xyz 提供的书籍接口
  2. 目前只能单个提交ISBN编码,加入书架
  3. 书籍信息落地到数据库中存储
  4. 后台管理书籍
  5. 后台管理支持按书籍状态筛选
  6. 缓存生成cache/book.json,移除了缓存到期配置,每次添加书籍,修改书籍等操作都会自动刷新缓存。
  7. 移除了单本书节点
  8. [熊猫小A]支持单个节点的方式插入HTML代码
  9. 移除了豆瓣电影(这只是书架插件,无关电影类)
  10. [熊猫小A]使用wordpress缓存豆瓣图片
  11. 书籍分页

- 阅读剩余部分 -

[PHP]修改upload_max_filesize无效的问题

前言

PHP做插件的过程中,发现上传的zip文件,大于8M的会直接中断传输,印象中我已经改过了upload_max_filesize设置为300M了呀。

解决

修改php.ini中的upload_max_filesize为300M后,还要检查下:post_max_size,这玩意儿一般会忘记,也将这个设置为300M后解决问题。

附加配置

file_uploads = On

upload_max_filesize = 300M
post_max_size=300M

max_file_uploads = 20

附加phperror.log

[13-May-2021 09:17:02] NOTICE: fpm is running, pid 1
[13-May-2021 09:17:02] NOTICE: ready to handle connections
NOTICE: PHP message: PHP Warning:  POST Content-Length of 8630132 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
NOTICE: PHP message: PHP Warning:  POST Content-Length of 8630132 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
NOTICE: PHP message: PHP Warning:  POST Content-Length of 8630132 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
NOTICE: PHP message: PHP Warning:  POST Content-Length of 8630132 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
NOTICE: PHP message: PHP Warning:  POST Content-Length of 8630132 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
NOTICE: PHP message: PHP Warning:  POST Content-Length of 8630132 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
[13-May-2021 09:39:11] NOTICE: Finishing ...
[13-May-2021 09:39:11] NOTICE: exiting, bye-bye!
[13-May-2021 09:39:14 UTC] PHP Warning:  Module "redis" is already loaded in Unknown on line 0
[13-May-2021 09:39:14] NOTICE: fpm is running, pid 1
[13-May-2021 09:39:14] NOTICE: ready to handle connections

[docker]PHP8开启zip支持

前言

最近在整理推特的推文批量删除的功能,就是支持删除所有推文的功能,其中有用到压缩解压的类,综合考虑,打算使用linux中的libzip-dev依赖,为此搜索了好多地方,网上的介绍不尽相同,我这里将我真实能用的配置方式发出来,以供后续如果要继续操作的时候,可以用的上。

安装

因为我是在php4docker中使用的,所以我首先就是要查对应的extension怎么装,查看官方文档Installation
很简单,有个老哥已经说了要怎么操作了

首先是安装zlib1g-dev,libzip-dev,zip,其中zlib1g需要指定稍低一点的版本,我这里指定了1:1.2.8.dfsg-5,否则则会无法通过依赖。

之后是安装docker-php-ext,看下面代码
docker-php-ext-install mysqli pdo pdo_mysql zip

配置

这样镜像就整理好了,接下来修改php配置文件,如果不修改的话,还是会提示zipArchive找不到
php.ini增加extension = zip.so,之后重启php即可。

docker-compose中重新编译运行

直接使用build命令:docker-compose build;

测试

    private function unzip($filepath){
        if (empty($filepath)) {
            return false;
        }
        $zip = new ZipArchive();
        if ($zip->open($filepath) === true) {
            $zip->extractTo("/tmp/".$this->widget('Widget_User')->uid,"twitter.js");
            $zip->close();
            return true;
        }
        else{
            return false;
        }
    }

参考:

  1. install
  2. Docker image build with PHP zip extension shows “bundled libzip is deprecated” warning

[php]导入超大json文件

前言

在之前的文章《做一个twitter的插件玩玩》中,我做了一个批量删除推文(转发推文)的工具,该工具能够删除前3200条推文,但因为总数太多(4.3万条),api接口不支持获取所有的推文,所以我采用了下载的方式,直接下载了所有的推文。下载后需要导入到插件中,这样可以通过插件的功能进行对应的推文操作。

- 阅读剩余部分 -

[PHP]使用正则表达式替换所有的URL

 $preg = '/(https?|ftp|file):\/\/[-A-Za-z0-9+&@#\/\%\?=~_|!:,.;]+[-A-Za-z0-9+&@#\/\%=~_|]/';
        $translateText=preg_replace($preg,'1',$translateText);
        //$translateText= preg_replace("/(https:\/\/|http:\/\/|ftp:\/\/|www\.?|)(([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?){0,1}/","",$translateText); 
        echo $translateText;