php
进击的递归
I just wanna cry
展开
-
wkhtmltopdf乱码解决方案
wkhtmltopdf 乱码原创 2022-06-28 16:23:47 · 4166 阅读 · 0 评论 -
解决php错误抑制符@抑制的错误仍能被自定义错误函数捕获的问题
本段摘录自php manualPHP supports one error control operator: the at sign (@). When prepended to an expression in PHP, any diagnostic error that might be >generated by that expression will be suppressed.If a custom error handler function is set with set_e.原创 2022-02-22 11:28:09 · 364 阅读 · 1 评论 -
crontab定时任务--踩坑记录
crontab 默认是使用 /bin/sh 来执行命令,然后这个导致了我的脚本程序出了问题项目中,我的一个php脚本是一直在跑的,然后每天会自动停一次,为了保证脚本的持续运行,我给该脚本加入cron定时任务,设计的是每一分钟执行一次,并在脚本中检测当前运行该脚本的进程数,如果进程数 > 1, 则停止,这样保证了系统中始终只有一个运行这个脚本的进程,进程检测命令如下:'ps ax|grep '.basename(__FILE__).' |grep -vE "grep|vim|bash" |wc -.原创 2022-02-11 16:15:39 · 786 阅读 · 0 评论 -
记一次php请求报504的错误
nginx: upstream timed out原创 2021-12-07 19:12:27 · 571 阅读 · 0 评论 -
RabbitMQ基础【php版】
RabbitMQ基础---php版特点RabbitMQ的基础结构图RabbitMQ的相关概念MessagePublisherExchangeBindingQueueConnectionChannelConsumerVirtual HostBrokerRabbitMQ六种工作模式1. Work queues(工作队列模式)流程示意图特点代码示例注意2. Publish/Subscribe (发布订阅模式)流程示意图特点代码示例3. Routing (路由模式)流程示意图特点代码示例4. Topics(通配符模原创 2021-09-22 10:42:10 · 1045 阅读 · 0 评论 -
支付宝风险推送接口接入指南【总结】
最近因公司业务,需要接入支付宝风险推送接口。文档有些零散,也踩了一些坑,在此总结一下。应用场景:基于强大的数据沉淀和精准的风险识别能力,主动向支付宝合作伙伴提供风险交易推送服务。风险类型主要包括欺诈、赌博、虚假交易,协助合作伙伴识别交易风险,助力合作伙伴业务健康发展。业务流程:风险类型:接入指南:a. 前期准备工作:登录(支付宝账号)并注册RiskGo安全合作平台, 平台地址:riskgo.alipay.com在开放平台创建一个新的应用,并申请上线,上线后在商户平台将.原创 2021-08-18 16:11:18 · 1689 阅读 · 0 评论 -
Monolog使用教程【入门案例版】
Monolog是PHP记录日志的神器,它真的很强大。在我们的日常工作中,掌握其中的几项,就大体够用了…1. 输出到文件中,并自定义格式 require_once('vendor/autoload.php'); use Monolog\Logger; use Monolog\Formatter\LineFormatter; use Monolog\Handler\StreamHandler; $log = new Logger('debug'); $dateFormat = "Y m j.原创 2021-08-16 19:49:55 · 1439 阅读 · 1 评论 -
接雨水【leetcode高级--php版】
在此提供动态规划、单调栈、双指针三种解法:动态规划:以leftMax[i]表示i及其左边的高度最大值, 以rightMax[i]表示i及其右边的高度最大值,则点i处能接的雨水为 min($leftMax[$i], $rightMax[$i]) - $height[$i]; function trap($height) { $len = count($height); $leftMax = $rightMax = []; $leftMax[0] = $height[0]; $r..原创 2021-08-11 12:37:05 · 193 阅读 · 0 评论 -
根据身高重建队列【php版】
<?phpclass Solution { /** * Q: [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]] * S: [[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]] * 解题思路:先将原队列按身高升序排列,相同身高的按前面比自己高的人数降序排列 * 然后我们再将排列好的元素放入到结果数组中,先放入的元素对后放入的元素没有影响, * 故在放元素[x,y]时,只须保证该元素前面有y个空位即可,这y个空位是留给身高比...原创 2021-08-10 19:27:12 · 108 阅读 · 0 评论 -
php8新特性全览【超详细】
题外话:PHP 8.0 是 PHP 语言的重大更新。它包含许多新功能和优化,包括命名参数、联合类型、属性、构造函数属性提升、匹配表达式、空安全运算符、JIT,以及类型系统、错误处理和一致性方面的改进。废话不多说,开车1.便利的命名参数也就是说在传参的时候可以跳过可选参数, 格式如 argName:value, 如示例中的“c:44”, 表示将44传给cfunction namedArgs($a, $b=1, $c=2, $d=3) { var_dump($a); var_dump($原创 2021-08-10 18:01:12 · 4516 阅读 · 0 评论 -
直线上最多的点数【php版】
思路:对于点A、B、C,如何确定三点共线呢?首先线段AB、AC的斜率是相同的,为了更好地比较,求出AB的横纵坐标之差dx,dy后,将其按最大公约数化简,然后我们,记一个key为"dx : dy",将其保存在一个map中,对应的value为2(表示该直线上已经有AB两个点了);同样地,我们对AC进行如上处理,如果key相同,则说明ABC在同一条直线上(它们有相同起点A),我们再将value+1;为了不重复计算,我们记同线的点的最大数目为max,我们遍历points,取位置为i的点为起点,0 &l...原创 2021-08-09 11:56:43 · 103 阅读 · 0 评论 -
【超详细】Docker 配置 nginx、php-fpm、mysql 、phpmyadmin
老是搭环境也太烦了,最近有接触到docker,在此记录一下利用docker搭建lnmp环境的步骤docker的安装很简单,网上教程很多,不赘述运行环境:centos7docker版本docker官网:https://hub.docker.com/在家目录创建两个目录,一个是 nginx/conf.d(用于nginx的配置文件),一个是nginx/www(用于网站相关文件)php-fpm安装1. 拉取php镜像docker pull php:7.4-fpm2. 创建p.原创 2021-08-06 19:30:07 · 5780 阅读 · 7 评论 -
最大数【php版】
原理: 如果xy大于yx, yz 大于 zy ,则xz一定大于zx,即具有传递性<?phpclass Solution { /** * @param Integer[] $nums * @return String */ function largestNumber($nums) { usort($nums, function($x, $y){ $baseX = $baseY = 10; while ($baseX <= $x) { $bas..原创 2021-08-06 14:51:04 · 86 阅读 · 0 评论 -
实现 Trie (前缀树)【php版】
<?phpclass Trie { private $_children; private $_isEnd; /** * Initialize your data structure here. */ function __construct() { $this->_children = []; $this->_isEnd = false; } /** * Inserts a word into the trie. * @param Strin...原创 2021-08-06 10:28:52 · 127 阅读 · 0 评论 -
LRU缓存机制【php版】
class LRUCache { private $_capacity; private $_size; private $_hashMap; private $_head; private $_tail; /** * @param Integer $capacity */ function __construct($capacity) { $this->_capacity = $capacity; $this->_size = 0; $this->...原创 2021-08-05 11:12:36 · 94 阅读 · 0 评论 -
戳气球【php版】
<?phpclass Solution { /** * 方法二: * 动态规划 * @param $nums */ function maxCoinsV2($nums) { $len = count($nums); $vals = new SplFixedArray($len+2); $dp = array_fill(0, $len+2, array_fill(0, $len+2, 0)); $i=1; foreach ($nums as $num) ...原创 2021-08-04 19:51:20 · 66 阅读 · 0 评论 -
单词拆分 II【php版】
<?phpclass Solution { private $memo = []; private $ans = []; /** * @param String $s * @param String[] $wordDict * @return String[] */ function wordBreak($s, $wordDict) { $dict = array_flip($wordDict); $this->deepSearch($s, 0, $di...原创 2021-08-04 16:50:23 · 138 阅读 · 0 评论 -
单词拆分【php版】
/** * 采用动态规划 * 记dp[i]表示s的前i个字符组成的字串是否满足题意, * 则 dp[i] = dp[j] & (s[j~i]在字典列表中) 0<=j<i * @param String $s * @param String[] $wordDict * @return Boolean */ function wordBreak($s, $wordDict) { $dictArr = array_flip($wordDict)...原创 2021-08-03 17:06:02 · 234 阅读 · 0 评论 -
完全平方数【php版】
这是一个完全背包问题,套用模板就好了 /** * 动态规划 * @param Integer $n * @return Integer */ function numSquares($n) { $dp = array_fill(0, $n+1, 0); for($i=1; $i<=$n; $i++) { $min = PHP_INT_MAX; for ($j=1; $j*$j<=$i; $j++) { $min = min($min, $...原创 2021-08-03 16:15:15 · 133 阅读 · 0 评论 -
最佳买卖股票时机含冷冻期【php版】
/** * 动态规划:记dp0表示前一天持有股票的最大收益、 * dp1表示前一天卖出股票的最大收益 * dp2表示前一天不持有股票的最大收益(不持有股票包括处于前天不持有股票和前天持有但卖出) * * @param Integer[] $prices * @return Integer */ function maxProfit($prices) { // 初始化,对于第一天而言 $dp0 = -$prices[0]; $dp1 = 0; $dp2 =...原创 2021-08-03 11:35:27 · 75 阅读 · 0 评论 -
乘积最大子数组【php版】
/** * 动态规划:因为乘积的特性,需要维护一个最大值与最小值,记max表示以上一个元素结尾的 * 子数组乘积的最大值, min表示以上一个元素结尾的子数组乘积的最小值。 * 当前元素为负值时,其乘以最小值min后的结果反而比较大,所以在乘之前先交换max与min的值 * @param Integer[] $nums * @return Integer */ function maxProduct($nums) { $max = 1; $min = 1; $a...原创 2021-08-03 10:38:26 · 118 阅读 · 0 评论 -
寻找两个正序数组的中位数【php版】
<?phpclass Solution { /** * @param Integer[] $nums1 * @param Integer[] $nums2 * @return Float */ function findMedianSortedArrays($nums1, $nums2) { $l1 = count($nums1); $l2 = count($nums2); $l = $l1 + $l2; if ($l % 2 == 1) { $a...原创 2021-08-02 15:51:49 · 141 阅读 · 0 评论 -
有序矩阵中第K小的元素【php版】
思路:利用小顶堆+ 排序n个有序列表的方法, 先将n个有序列表的第一项加入小顶堆,每次弹出堆顶元素,再将该元素所属列表的下一个元素放入小顶堆中。 function kthSmallest($matrix, $k) { $minHeap = new class() extends SplHeap { protected function compare($value1, $value2) { return $value2[0] - $value1[0]; } }; ...原创 2021-08-02 11:03:42 · 63 阅读 · 0 评论 -
摆动排序 II【php版】
class Solution { /** * 使用桶排序 * @param Integer[] $nums * @return NULL */ function wiggleSort(&$nums) { // nums中的元素 0<=n<=5000,所以造一个容量为5001的桶 $bucket = array_fill(0, 5001, 0); foreach ($nums as $num) { $bucket[$num]++; } ...原创 2021-08-02 10:17:16 · 63 阅读 · 0 评论 -
正则表达式匹配【php版】
function isMatch($s, $p) { $sLen = strlen($s); $pLen = strlen($p); $dp = array_fill(0, $sLen+1, array_fill(0, $pLen+1, false)); $isMatch = function ($s, $p, $i, $j) { if ($i==0) { return false; } return $p[$j-1] == '.' || $p[$j-1]...原创 2021-07-30 15:31:28 · 138 阅读 · 0 评论 -
通配符匹配【php版】
方法1:动态规划 /** * 方法1: 动态规划,令dp[i][j]表示,s[0~i-1] 与 p[0~j-1]是否匹配,对s、p而言,下标从0开始,而dp而言,下标表示第几个字符 * 状态转移方程为: * 1. 当p[j-1]不为"*"时 :当s[i-1] 与 p[j-1]相等 或 p[j-1]是 "?"时, dp[i][j] = dp[i-1][j-1]; * 2. 当p[j-1]为"*"时 : dp[i][j] = dp[i-1][j] || dp[i][j-1] 解析...原创 2021-07-30 10:27:57 · 556 阅读 · 0 评论 -
删除无效的括号【php版】
代码如下,注释已经很详尽,思路就是,先计算左右括号应该至少删除的数量,然后对于每一个位置的括号而言,可删可不删就有两种情况,递归回溯class Solution { private $ans = []; /** * @param String $s * @return String[] */ function removeInvalidParentheses($s) { $len = strlen($s); // 计算左右括号应该至少删除的数量 $leftRem...原创 2021-07-29 10:47:51 · 83 阅读 · 0 评论 -
单词搜索 II【php版】
前记: trie数据结构trie数据结构是基于各个序列前缀构造出来的查找树如这样的字符序列[‘oath’、‘dog’、‘dig’、‘dogs’];其构造的trie如下:构造代码如下:class TrieNode { public $children = []; public $word = null; public function __construct() {}}function buildTrie($words) { // root node $root = new .原创 2021-07-28 11:17:17 · 88 阅读 · 0 评论 -
分割回文串【php版】
class Solution { private $rlt = []; private $ans = []; private $dp = null; /** * 递归回溯+动态规划预处理 * @param String $s * @return String[][] */ function partition($s) { $len = strlen($s); // 使用动态规划预处理$s, 获得所有从i到j字串是否是回文字串的结果数组 $this->dp ...原创 2021-07-27 15:35:54 · 96 阅读 · 0 评论 -
计算右侧小于当前元素的个数【php版】
方法1: 树状数组动态维护前缀和 (关于什么是树状数组,网上介绍的有很多,这儿不作赘述) /** * 使用树状数组 * @param Integer[] $nums * @return Integer[] */ function countSmaller($nums) { $len = count($nums); if ($len == 0) { return []; } // 将nums中的元素去重再排序 $uniqueArr = []; fo...原创 2021-07-27 11:40:33 · 109 阅读 · 0 评论 -
矩阵中的最长递增路径【php版】
使用记忆化深度优先搜索<?phpclass Solution { private $dir = [ [0,1], [0,-1], [1,0], [-1,0], ]; // 用于记录已经搜索过的点的最大路径值 private $path = []; private $rCnt; private $cCnt; /** * @param Integer[][] $matrix * @return Integer */ function lo...原创 2021-07-26 17:03:07 · 69 阅读 · 0 评论 -
课程表【php版】
private $visited = null; private $edge = []; private $hasLoop = false; /** * 使用DFS+拓扑排序, 对于有向图的一个顶点而言,在搜索过程中有三种状态: * 1.未搜索 2.搜索中 3.已完成 * 当搜索到某个顶点时,其邻接顶点如果处于未搜索,则搜索邻接顶点,如果处于搜索中,则 * 说明图中存在回路,无法拓扑排序。如果所有邻接顶点处于已完成状态,则该顶点可自然加入拓扑 * 排序的上层,该顶点可标记为...原创 2021-07-26 13:12:45 · 794 阅读 · 0 评论 -
朋友圈——计算省份数量【php版】
三种方法:BFS 、 DFS 、并查集<?phpclass Solution { private $visited = []; private $parent = null; private $provCnt = null; /** * DFS * @param Integer[][] $isConnected * @return Integer */ function findCircleNum($isConnected) { $provCnt = c...原创 2021-07-26 12:30:40 · 91 阅读 · 0 评论 -
二叉树中的最大路径和【php版】
<?php/** * Definition for a binary tree node. * class TreeNode { * public $val = null; * public $left = null; * public $right = null; * function __construct($val = 0, $left = null, $right = null) { * $this->val = $v...原创 2021-07-26 11:44:36 · 112 阅读 · 0 评论 -
二叉树的最近公共祖先【php版】
使用递归法,公共祖先必然满足1.左子树包含p或q,且右子树包含p或q 或者 2. 本身是p, 左右子树中有一个包含q 3. 本身是q, 左右子树中有一个包含p ; 使用递归能保证,这个求出的祖先结点是最近的。<?php/** * Definition for a binary tree node. * class TreeNode { * public $val = null; * public $left = null; * public $rig...原创 2021-07-26 11:09:54 · 73 阅读 · 0 评论 -
被围绕的区域【php版】
此问题没什么难度,采用BFS和DFS都可以,从边界的’O’开始,将与之相连的’O’标记成另一种如’S’,最后再遍历整个矩阵,将’S’改为’O’,将’O’改为‘X’,即可。class Solution { private $dirs = [ [0, 1], [0, -1], [1, 0], [-1, 0], ]; /** * @param String[][] $board * @return NULL */ function solve(&...原创 2021-07-26 10:45:37 · 53 阅读 · 0 评论 -
单词接龙【php版】
方法1 ,BFS法(单向),通过添加虚拟结点建图class Solution { private $mpWord2inx = []; private $mpIdx2Edge = []; private $cntWords = -1; /** * BFS法(单向),通过添加虚拟结点建图,将每个单词看作一个点,如果两个单词间可以通过一个字符的变换来互换,则它们 * 之间存在一条边 * @param String $beginWord * @param String $endW..原创 2021-07-23 18:26:47 · 90 阅读 · 0 评论 -
复制带随机指针的链表【php版】
以下提供三种方法方法1 :先将所有结点copy一份,再遍历原链表,将next,random之类的指向还原方法2 :dfs法,有点类似方法1,但只遍历原链表一遍方法3 :迭代 + 节点拆分/** * Definition for a Node. * class Node { * public $val = null; * public $next = null; * public $random = null; * function __constru..原创 2021-07-23 15:48:37 · 59 阅读 · 0 评论 -
排序链表【php版】
/** * Definition for a singly-linked list. * class ListNode { * public $val = 0; * public $next = null; * function __construct($val = 0, $next = null) { * $this->val = $val; * $this->next = $next; * } * } ...原创 2021-07-23 12:01:08 · 111 阅读 · 0 评论 -
合并K个排序链表【php版】
链表的结构定义如下/** * Definition for a singly-linked list. * class ListNode { * public $val = 0; * public $next = null; * function __construct($val = 0, $next = null) { * $this->val = $val; * $this->next = $next; * ..原创 2021-07-23 10:42:07 · 81 阅读 · 0 评论