php thinkphp 执行ffmpeg指令的路径问题

例子:

$command = 'ffmpeg -y  -i  ../runtime/cache/'.$TEMP_Gif_path.' -vf "ass=../runtime/cache/'. $CACHE_ASS_PATH.'" ../runtime/cache/'.$timeStr.'.gif';

                system($command, $error);
                var_dump($error);

tp框架里运行这个指令 不能使用绝对路径,只能使用public下的相对路径,退出一层后 找到cache路径

发表在 php | 留下评论

怎么在VS Code编辑器玩转PHP开发 支持类跳转

https://zhuanlan.zhihu.com/p/359984466

这是一份VS Code轻量级PHP开发环境

配置方案,通过在VS Code中安装PHP开发相关插件,实现代码格式化、自动补全代码、类方法定位、php调试、预览与历史版本找回扥功能以满足良好的php开发环境。

在使用该方案前,提前配置好PHP运行环境,php版本至少7以上,当前方案版本8。

  1. 预先配置php.exe可执行文件
    在软件左下角 齿轮-> setting 搜索 php,edit in setting
    输入php的俩路径

    {
    "php.validate.executablePath": "E:/php/env/php-8.0.3/php.exe",
    "php.executablePath": "E:/php/env/php-8.0.3/php.exe"
    }
  2. 实现代码格式化、提示、补全、类方法定位等

(1. 装PHP Intelephense智能感知插件

在软件左侧的图标里找到第5个:插件 。
搜索:PHP Intelephense
点击安装。
(2. 配置PHP Intelephense

还是软件左下角的 齿轮 设置:搜索 PHP Intelephense
把需要的 edit in setting 都点一遍。保存即可。

重新打开项目的代码,发现可以使用鼠标点击函数 类的方法跳转了。

发表在 软件 | 留下评论

提取DVD的软件还是推荐:HandBrake

之前下载的两个
Setup_MakeMKV_v1.17.7.exe
VidCoder-7.15-Portable.exe
提取出来的视频都带有波浪波纹,转mp4之后就表现出来了。
格式工厂也提取不了。
还是推荐:HandBrake
全名:HandBrake-1.3.2-x86_64-Win_GUI.exe

发表在 软件 | 留下评论

js 文字无缝滚动 滚屏特效分析

https://blog.csdn.net/qq_39232387/article/details/107337189


需要手动创建一个一样的内容

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            .scrollCon {
                width: 500px;
                height: 150px;
                overflow: hidden;
            }
            ul,li {
                margin: 0;
                list-style: none;
            }
            li {
                height: 40px;
            }
        </style>
    </head>
    <body>
        <div class="scrollCon" id="scrollCon">
            <ul id="scrollCon1">
                <li>1</li>
                <li>2</li>
                <li>3</li>
                <li>4</li>
                <li>5</li>
                <li>6</li>
            </ul>
            <ul id="scrollCon2">

            </ul>
        </div>
        <script type="text/javascript">
            var conScroll = function(){
                var scrollCon = document.getElementById("scrollCon");
                var li = scrollCon.getElementsByTagName("li");
                var scrollCon1 = document.getElementById("scrollCon1");
                var scrollCon2 = document.getElementById("scrollCon2");
                if(li.length > 3){
                    scrollCon2.innerHTML = scrollCon1.innerHTML;
                    scrollCon.scrollTop = 0;
                    function rollStart(){
                        if(scrollCon.scrollTop >= scrollCon1.scrollHeight){
                            scrollCon.scrollTop = 0;
                        }else{
                            scrollCon.scrollTop++;
                        }
                    }
                    var timer = setInterval(rollStart, 50);
                    scrollCon.onmouseover = function(){
                        clearInterval(timer);
                    }
                    scrollCon.onmouseout = function(){
                        timer = setInterval(rollStart, 50);
                    }
                }
            };
            conScroll();
        </script>
    </body>
</html>

以上demo其实并不完美,调试发现:
两个滚动的容器必须设置高度,而且最终结果发现滚动到一半就无法继续移动。
在纯demo里是没问题,但在使用场景里却不兼容。
故改成以下demo,用css的transform实现移动更加流畅

var conScroll = function(){
                    var mouseObj = parentBoxNode;
                    var moveObj = moveBox1Node;
                    var secondObj = moveBox2Node;
                    moveObj.style.transform = 'translateY(0px)';
                    var currentTop = 0;
                    function rollStart(){
                        if(Math.abs(currentTop) >= 262){
                            currentTop = 0;
                            moveObj.style.transform = 'translateY(0px)';
                            secondObj.style.transform = 'translateY(0px)';
                        } else {
                            currentTop --;
                            moveObj.style.transform = 'translateY(' + currentTop + 'px)';
                            secondObj.style.transform = 'translateY(' + currentTop + 'px)';
                        }
                    }
                    var timer = setInterval(rollStart, 50);
                    mouseObj.onmouseover = function(){
                        clearInterval(timer);
                    }
                    mouseObj.onmouseout = function(){
                        timer = setInterval(rollStart, 50);
                    }
                };
                conScroll();
发表在 js | 留下评论

phpstorm 2024.2新版本的文件路径面板屑位置跑到底部了,教你如何修改

吐槽一下 今天的破解版本又被和谐了,于是找了一个新的破解版本,升级到2024.2版发现文件的面包屑跑到底部了,自己研究一下发现了方法:

在底部右键: navigation bar -> top
即可。

发表在 php | 留下评论

autocomplete=”off” edge浏览器失效的原因:定义了placeholder

在给input标签添加了属性 autocomplete="off"后,仍然显示历史记录,于是把属性一一移除进行排除,发现是 placeholder属性在搞的鬼。

发表在 html | 留下评论

tp5 query封装like查询语句

错误写法
$sql="select company_id from tplay_line where start like '%:start%' and end like '%:end%'";
$result =Db::query($sql,['start'=>$post['start'],'end'=>$post['end']]);

正确写法
$sql="select company_id from tplay_line where start like :start and end like :end";
$result =Db::query($sql,
[   'start'=>'%'.$post['start'].'%',
     'end'=>'%'.$post['end'].'%'     ]);
发表在 php | 留下评论

js随机取数组里的一个元素

JavaScript - 随机获取数组元素

var myArray = ['one', 'two', 'three', 'four', 'five'];
var rand = Math.floor(Math.random() * myArray.length);
var rValue = myArray[rand];
console.log(rValue)
发表在 js | 留下评论

fastadmin-citypicker 设置监听,自定义样式

查看了它的监听,并不是在初始化的时候定义句柄的
反而是需要用户在对象后面加个on事件


$("#city-picker1").citypicker({
}).on('cp:updated', function () {
console.log('updated', $(this).val());

}); 

citypicker里面的参数 只有省市区{
province: '江苏省',
city: '常州市',
district: '溧阳市'
},没有别的参数。
源码了设置了触发cp:updated事件,所以就在后面监听好了。

切换省份之后回调的值也是在html里通过data-render定义的,很奇怪的设定。

<span style="position: relative;display: inline-block;width: 160px;">
            <input readonly id="city-picker1" type="text" style="padding-left: 10px;" data-render="code" data-spancss='{"height": "33px","line-height": "30px","border-radius":"4px"}' data-toggle="city-picker"  placeholder="查找省份寺庙" data-level="province">
        </span>

data-level设置的是支持几个层级 ,province是只显示省份,city,district
因为span的样式和placeholder不对齐,所以我加了个自定义的spancss
源码里加个设置即可:
public/assets/libs/fastadmin-citypicker/dist/js/city-picker.js
95行
var $select = this.$dropdown.find('.city-select');
下面加
var spanCss = this.$element.data('spancss') || '';
if(spanCss) {
this.$textspan.css(spanCss);
}

发表在 js, 未分类 | 留下评论

php安装扩展:php-ext-brotli

使用场景,我们在curl采集第三方站点时,会看到header返回的格式如下:

 content-encoding:br

什么是br(Brotli)算法

Google 认为互联网用户的时间是宝贵的,他们的时间不应该消耗在漫长的网页加载中,因此在 2015 年 9 月 Google 推出了无损压缩算法 Brotli。Brotli 通过变种的 LZ77 算法、Huffman 编码以及二阶文本建模等方式进行数据压缩,与其他压缩算法相比,它有着更高的压塑压缩效率。启用 Brotli 压缩算法,对比 Gzip 压缩 CDN 流量再减少 20%。

来自科普:
https://www.cnblogs.com/wcrBlog/p/11805506.html

要解密,需要给宝塔环境安装php扩展
https://github.com/kjdev/php-ext-brotli
安装好后,php重启一下就可以运行以下代码解密curl获取到的内容了。

 $compressed = \Brotli\compress('test');
 echo $compressed;
 echo '
'; $uncompressed = \Brotli\uncompress($compressed);
发表在 未分类 | 留下评论