
PHP
课本小明
一直行走在赴死的路上,依然乐观,依然热泪盈眶
展开
-
PHP实现部分算法
##冒泡排序$test=[5,6,11,8,10,2,3,123,5,-1];$len=count($test);while (true) { if ($len <= 1) { break; } $i = 0; while (true) { if ($i > $len - 2) { break; } if ($test[$i] > $test[$i + 1]) {原创 2020-06-05 16:28:29 · 324 阅读 · 0 评论 -
使用docker搭建lnmp环境
1. 准备 docker1. 下载安装依赖包yum install -y yum-utils device-mapper-persistent-data lvm22. 网络问题就换源咯yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo3. 更新...转载 2020-03-11 10:28:53 · 2341 阅读 · 0 评论 -
理解一下base64算法,一个PHP加解密方法
一、先通过一个PHP加密解密方法来看:function encrypt($string,$operation,$key='darling'){ $key=md5($key); $key_length=strlen($key); $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8原创 2017-04-26 16:54:52 · 3567 阅读 · 0 评论 -
apache的MultiViews的问题
问题:前提:ThinkPHP框架 今天配置服务器访问路径如下: http://**.com/index/index 发现最后得到的SERVER的[PATHINFO]的值只有/index这样其实就是默认访问了index控制器,而并没有直接访问到index方法也就是当url改为:http://∗∗.com/index/find的时候的_SERVER的[PATH_INFO]的值只有/index原创 2017-04-27 16:27:57 · 8784 阅读 · 0 评论 -
Ubuntu16.04编译PHP7.0,并开发PHP扩展
准备先下载PHP源文件使用: wget https://downloads.php.net/~ab/php-7.0.11RC1.tar.bz2下载完成后解压: tar jxf php-7.0.11RC1.tar.bz2 安装编译用的一些第三方: sudo apt-get update sudo apt-get install libxml2-dev 安装gcc sudo apt-get原创 2016-09-13 10:50:43 · 4741 阅读 · 0 评论 -
PHP源码解析笔记2-生命周期和Zend引擎
基于PHP源码分析的git仓库:深入理解PHP内核生命周期和Zend引擎一切的开始: SAPI接口SAPI(Server Application Programming Interface)指的是PHP具体应用的编程接口 脚本执行的开始都是以SAPI接口实现开始的。只是不同的SAPI接口实现会完成他们特定的工作, 例如Apache的mod_php SAPI实现需要初始化从Apache获取的一些信息转载 2017-02-15 15:46:44 · 439 阅读 · 0 评论 -
PHP源码解析笔记1-源码中的常用代码
基于PHP源码分析的git仓库:深入理解PHP内核常用代码双井号(##)在C语言的宏中,”##”被称为 连接符(concatenator),它是一种预处理运算符, 用来把两个语言符号(Token)组合成单个语言符号。 这里的语言符号不一定是宏的变量。并且双井号不能作为第一个或最后一个元素存在。示例如下:#define ZEND_FN(name) zif_##name宏ZEND_FN(name)中有一原创 2017-02-15 15:03:30 · 1355 阅读 · 0 评论 -
PHP的错误处理
php的错误处理方法可以通过以下方式重写(在代码开始的地方自定义即可): error_reporting(0);//0为不输出PHP自带的错误输出,E_ALL为所有的警告和错误都输出 set_error_handler([__CLASS__, 'appError']); set_exception_handler([__CLASS__, 'appExce原创 2016-12-08 17:31:42 · 765 阅读 · 0 评论 -
介绍一下ThinkPHP加载文件
最近在看TP的源码,简单实现了TP的MVC功能。其中就涉及TP的代码加载机制,这里做一个简单的介绍,方便理解记录。PHP自身就有autoload方法可以自动加载,TP借助这个方法重写了类的加载。具体代码如下: // 注册系统自动加载 spl_autoload_register($autoload ?: 'sunny\\Loader::autoload', true, t原创 2016-12-08 17:20:19 · 634 阅读 · 0 评论 -
owncloud源码分析5--CAS单点登录
CAS单点登录一、将CAS的包放到lib\private下面方便引用,如图二、引入到\owncloud\lib\base.php的976行中的handleLogin()方法,将这个方法的内容改成下面的内容:if(!$_REQUEST['logout']) { OC_App::loadApps(array('prelogin'));}//引入cas类库re原创 2015-08-12 08:49:54 · 2767 阅读 · 0 评论 -
微信PC二维码登陆的一种思路
一、思路:思路关键在于如何与微信端交互起来,毕竟目前微信登录只能是在微信端。 但是微信有一个特殊的方法用于生成自定义的二维码,这就让我们能够在PC上显示二维码,而二维码的值可以是我们定义的。另外看微信开发文档中存在一个scan事件,可以检测用户使用微信扫描二维码并获取值。其实问题的关键就在于这个值,这个值算是一个联通PC和微信的通信ID了。二、具体实现流程(下面代码使用了TP5的框架,有个大前提是原创 2017-07-05 17:09:05 · 3397 阅读 · 8 评论 -
天猫和淘宝商品数据爬取
一、思路最近做了一个网站用到了从网址爬取天猫和淘宝的商品信息,首先看了下手机端的网页发现用的react,不太了解没法搞,所以就考虑从PC入口爬取数据,但是当爬取URL获取数据时并没有获取价格,库存等的信息,仔细研究了下发现是异步请求了另一个接口,但是接口要使用refer才能获取数据,于是就通过以下方式写了一个简单的爬虫,用于爬取商品预览图和商品的第一个分类的价格、库存等。二、实现代码如下:funct原创 2017-07-28 13:58:57 · 11910 阅读 · 9 评论 -
laravel使用swoole的websocket
使用laravel的command来创建swoole进程使用laravel的artisan命令生成swoole.php类php artisan make:command swoole修改swoole.php类的内容如下:&lt;?phpnamespace App\Console\Commands;use Illuminate\Console\Command;u...原创 2018-08-28 16:36:00 · 8543 阅读 · 0 评论 -
商城 商品模块 数据库 表设计
什么是SPU、SKU、ARPU这是一篇存档性笔记,我自己存档一下对这3个词的理解。如果你已经明了了这3个词的意思,请直接忽略之首先,搞清楚商品与单品的区别。例如,iphone是一个单品,但是在淘宝上当很多商家同时出售这个产品的时候,iphone就是一个商品了。商品:淘宝叫item,京东叫product,商品特指与商家有关的商品,每个商品有一个商家编码,每个商品下面有多个颜色,款式,可以...转载 2018-05-31 11:49:48 · 6198 阅读 · 2 评论 -
PHP实现数字范围的合并
介绍本文是为了实现类似 8<x≤10 和 9<y 这种范围(当然包括各种范围,等于,大于等于,大于,小于,小于等于)合并,比如结果是:9<z≤10实现实现方式是先考虑范围的表示,因为毕竟无法用代码直接写这些范围。这里使用字母和数组代表对应的范围,比如:1、8<x<=10 使用:array('gt'=>8,'elt'=>10,)2、x=10使...原创 2018-04-28 14:01:36 · 970 阅读 · 0 评论 -
TP5.1的核心代码解析之容器
最近看了看ThinkPHP5.1的核心代码,使用了容器的思想,简单解析一下具体实现:首先看到\thinkphp\base.php文件中的初始化绑定类到容器的方法:// 注册核心类到容器Container::getInstance()->bind([ 'app' => App::class, 'build' ...原创 2018-03-14 16:28:54 · 4433 阅读 · 0 评论 -
TP5.1的核心代码解析之Facade
Facade是什么呢,目前看是一个用来方便实现原有类(未定义静态方法)的静态方式调用对应的方法的类。 具体Facade的实现如下: 首先看核心文件:\thinkphp\base.php中的:// 注册核心类的静态代理Facade::bind([ facade\App::class => App::class, facade\Build::class...原创 2018-03-15 09:40:54 · 4863 阅读 · 0 评论 -
redis队列一些问题
插入队列1、lpush将所有指定的值插入到存于 key 的列表的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。 如果 key 对应的值不是一个 list 的话,那么会返回一个错误。PHP代码示例public function push($k,$value){ $value = (is_object($value) || is_array($value)原创 2017-12-21 15:09:57 · 1818 阅读 · 0 评论 -
如何设置一个严格30分钟过期的Session
作者: Laruence 本文地址: http://www.laruence.com/2012/01/10/2469.html第一种回答那么, 最常见的一种回答是: 设置Session的过期时间, 也就是session.gc_maxlifetime, 这种回答是不正确的, 原因如下:首先, 这个PHP是用一定的概率来运行session的gc的, 也就是session.gc_probability转载 2017-11-22 09:02:01 · 854 阅读 · 0 评论 -
PHP导出成PDF
准备工作首先查询了相关的类库,有FPDF,zendPDF,TcPDF等等。首先看了下先选择了FPDF,可以说除了中文字符以外没有什么问题,中文乱码而且看了下最新版本没有很好的解决方案,所以只能放弃。后来就专门找支持中文的发现了TcPDF,开始也是中文字体支持不是很好,但是发现了有人做了中文的语言包才得救了使用示例 vendor('Pdf'); $pdf = new \T原创 2017-08-30 11:04:34 · 2206 阅读 · 0 评论 -
TP5与TP3.2的可以通用的方法
模型实例化TP5取消了自动实例化模型的M方法,转而使用了新的实例化模型方法。没有自动实例化则必须自己新建模型类,然后自己实例化,这就有点类似D方法。这里与D方法的功能类似的有一个model的方法,功能上完全可以替换使用U方法U方法是TP中的生成路由的内置方法,现在这个方法可以完全使用url方法替换TP5中取消了IS_GET和IS_POST方法如果想继续使用可以在项目中自定义一下,如下: define原创 2016-10-18 17:22:10 · 18252 阅读 · 0 评论 -
下载过程中修改文件名
在用ThinkPHP框架的过程中,我使用了下面的方式来存储文件,当然就导致了真实文件名的变化,如下: 这样的话真实的文件名就变成了savename中的名字,所以下载的时候如果直接用该名字的url下载的话就会出现下载的文件名为这个的情况,因此为了使得名字编程name的名字,我使用了如下的方法:namespace Home\Controller;class DownloadController e原创 2016-08-19 16:50:49 · 3322 阅读 · 0 评论 -
linux创建PHP定时任务
linux创建PHP定时任务下面所有的前提是服务器存在PHP环境首先创建一个PHP文件:示例内容如下:<?php$ch=curl_init();//设置请求curl_setopt($ch,CURLOPT_URL,"写上要请求的URL");curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_HEADER,0)原创 2016-07-05 15:53:17 · 3816 阅读 · 0 评论 -
owncloud源码分析9--零散的内容
1、根目录加入路由位置在:\lib\private\route\router.php的145行,例如:先在上面文件的145行加入一行://测试require_once 'test/routes.php';然后加入一个test的根目录,然后再在根目录下加入路由文件routes.php,内容如下:<?php/** * Copyright (c) 201原创 2015-09-18 16:28:55 · 1248 阅读 · 0 评论 -
owncloud源码分析8--修改json文件存储
目前owncloud的外接存储信息存放在data文件夹下的mount.json文件中,在这里我修改了这种存储方式使之成为了数据库存储方式:一、建表:DROP TABLE IF EXISTS `oc_mount`;CREATE TABLE `oc_mount` ( `id` int(64) NOT NULL AUTO_INCREMENT COMMENT '主键', `cate原创 2015-09-17 16:30:48 · 1594 阅读 · 2 评论 -
PHP实现redis存储session
一、首先实现SessionHandlerInterface(此接口PHP>5.4.0),如下<?php/** * 以db的方式存储session */namespace OC\Session;class redisSession implements \SessionHandlerInterface{ /** * 保存session的数据库表的信息 */原创 2015-09-16 08:45:59 · 3626 阅读 · 0 评论 -
owncloud源码分析3--第三方类库
关于第三方类库的介绍1、composer第三方依赖管理类库,官网:http://www.phpcomposer.com/2、doctrineDoctrine是基于数据库抽像层上的ORM,它可以通过PHP对象轻松访问所有的数据库,例如MYSQL官网:http://www.doctrine-project.org/3、guzzlehttp客户端和框架官网:http:原创 2015-08-10 17:56:05 · 2014 阅读 · 0 评论 -
owncloud源码分析4--上传代码分析
owncloud云盘系统上传文件分析第一步:关于文件首先只关注文件本身内容走向,如下:其中$tempFile上传后的临时文件名字,存在服务器本地,在这里$source用来读取这个文件的数据,然后传入file_put_contents($path,$source)中,下面再看file_put_contents方法,如下:在这个方法中打开了传入的原创 2015-08-11 09:08:47 · 3562 阅读 · 5 评论 -
owncloud源码分析7--客户端上传2
之前已经介绍了客户端上传文件的位置,但是后来实践发现只有小文件走owncloud\lib\private\connector\sabre\file.php中的put方法,大文件并没有走,进一步探讨发现对于客户端上传大文件,owncloud会进行拆分上传再整合的方式,为什么这样,我做了个测试:首先可以确定在大文件上传时,走的方法是:owncloud\lib\private\connector\s原创 2015-08-19 11:22:58 · 2399 阅读 · 0 评论 -
owncloud源码分析2--数据库增删改查
数据库增删改查方法把到目前位置整理的一起放在这里以下都是在这个中进行的操作:E:\wamp\www\owncloud\lib\private\files\cache\cache.php1、增加put方法中的如下图位置插入数据插入正确返回最新一条的id即插入的数据的id。(实现在E:\wamp\www\owncloud\lib\private\db\adapter.p原创 2015-08-10 11:39:44 · 4533 阅读 · 0 评论 -
owncloud源码分析6--客户端单点实现
客户端单点实现(需求是存在验证,不存在插入)一、首先找到客户端登录的位置,如下:owncloud\lib\private\connector\sabre\auth.php中的53行,validateUserPass方法,修改为protected function validateUserPass($username, $password) { if (原创 2015-08-13 08:45:33 · 1701 阅读 · 0 评论 -
owncloud配置swift外接存储
最近使用了owncloud的swift外接存储,这里简单记录一下。首先owncloud使用了php-opencloud的外接存储第三方包(地址:https://github.com/rackspace/php-opencloud),其官方文档地址:官方文档。其次配置openstack的swift环境,这里必须使用keystone验证方式。在配置完swift之后,填写外接存储的后原创 2015-10-29 10:31:18 · 2950 阅读 · 2 评论 -
ORM doctrine的使用
一、首先先写一个composer.json文件,内容如下:{ "require": { "doctrine/dbal": "2.5.1" } "repositories": [ {"type": "composer", "url": "http://packagist.phpcomposer.com"}, {"packagis原创 2015-10-09 11:21:11 · 2578 阅读 · 0 评论 -
owncloud创建app
首先,搭建开发环境。方式如下面地址中介绍:https://github.com/owncloud/ocdev我用的Ubantu系统搭建的环境。按照步骤走到:ocdev startapp MyApp这一步就可以创建成功。初始化的app文件在下面地址中:http://pan.baidu.com/s/1mgAN7OO其次,就是按照需求更改内容了。做了个按照类型原创 2015-11-17 15:58:51 · 2777 阅读 · 0 评论 -
从数据库导出到.csv文件方法
public function export(){ // 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可 // 输出Excel文件头,可把user.csv换成你要的文件名 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;fi原创 2016-05-10 14:31:43 · 1686 阅读 · 0 评论 -
owncloud源码分析1--部分修改Demo
最近做了修改owncloud云盘的项目。owncloud本身是一个私有云盘,用到本地目录,项目要求是存储到FTP后转存到FAST,所以需要修改很多相关的东西。一、首先是进入文件列表时的选择根目录,可以在如下文件中修改即可:\owncloud\apps\files\js\filelist.js中的_setCurrentDir: function(targetDir, changeUr原创 2015-08-10 11:23:02 · 6716 阅读 · 27 评论 -
php解决下单、抽奖并发导致的库存负数的问题
转载地址:点击打开链接我们知道数据库处理sql是一条条处理的,假设购买商品的流程是这样的:sql1:查询商品库存if(库存数量 > 0){ //生成订单... sql2:库存-1}当没有并发时,上面的流程看起来是如此完美,假设同时两个人下单,而库存只有1个了,在sql1阶段两个人查询到的库存都是>0的,于是最终都执行了sql2,库存最后变转载 2016-02-20 09:59:04 · 2243 阅读 · 0 评论 -
记一下支付宝移动端支付的坑
最近调试了移动端app支付的PHP服务端这里使用RSA加密的方式,首先根据文档,在ubuntu系统下生成了一个公钥和私钥(地址:https://doc.open.alipay.com/doc2/detail.htm?treeId=58&articleId=103242&docType=1):使用命令行:$ openssl 进入OpenSSL程序OpenSSL>原创 2016-03-17 16:36:20 · 1257 阅读 · 0 评论 -
Windows下安装redis以及PHP redis扩展
一、首先安装Redis地址:https://github.com/MSOpenTech/redis/releases找一个版本,下载完成后,解压到某个盘下的文件夹里,这里起名叫redis。然后打开cmd命令行,执行解压的文件夹下的redis-server.exe,即可开启本地redis,端口6379二、安装PHP的redis扩展dll下载地址:https://pecl.php.原创 2015-12-03 22:27:05 · 790 阅读 · 0 评论 -
如何使用PHP或者js判断当前是微信浏览器访问
转载自:http://blog.wpjam.com/m/is_weixin/一、js判断:function isWeiXin(){ var ua = window.navigator.userAgent.toLowerCase(); if(ua.match(/MicroMessenger/i) == 'micromessenger'){ return true; }else转载 2015-12-03 16:51:11 · 168 阅读 · 0 评论