php的分享

微信PC端登录和手机端登录逻辑分享

PC端登录需要在微信开放平台申请,而移动端授权登录只需要有已经认证的服务号即可。然后同一个网站平台,用同一个微信用户去登录,会发现PC端获取的微信用户openid和移动端不同,这个问题如何解决?

一、官方做法

我们需要在微信开放平台绑定微信服务号,这个时候就有一个奇葩的事情出现,如果该微信服务号没有申请微信小程序,那么微信开放平台提示必须先开通小程序。

那么在微信开放平台绑定微信服务号后,我们就可以获取到统一的一个UnionID,这个UnionID无论是Pc端微信登录还是移动端微信登录,都是统一的。

我们看下官方的解释:

UnionID机制的作用说明:如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。

二、另辟蹊径的做法

场景1、

1、手机号注册-》成功。

2、该用户第一次使用PC端微信登陆,则到达绑定手机号页面,如果该手机号已经注册,则更新数据表字段weixin_open_id。

3、该用户第二次使用PC端微信登陆,更新最后一次登录时间。

场景2、

1、手机号注册-》成功。

2、该用户第一次使用移动端微信登陆,则到达绑定手机号页面,如果该手机号已经注册,则更新数据表字段weixin_open_id_m。

3、该用户第二次使用移动端微信登陆,更新最后一次登录时间。

场景3、

1、该用户第一次使用PC端微信登陆,则到达绑定手机号页面,绑定手机号,插入记录。

2、该用户第二次使用PC端微信登陆,更新最后一次登录时间。

场景4、

1、该用户第一次使用移动端微信登陆,则到达绑定手机号页面,绑定手机号,插入记录。

2、该用户第二次使用移动端微信登陆,更新最后一次登录时间。

总之,无论用户第一次是手机号注册还是PC端微信登陆、移动端微信登陆,只要是第一次登陆,我们都会拿到用户的手机号,那么手机号作为该用户凭证。

三、需要注意

我们可以用如下代码判断是PC微信登录还是移动端微信登录:

if(request()->isMobile()){//移动端}else{ //PC端}

PC微信登录和移动端微信登录需要分别处理。

最后

我们还是建议大家用官方做法,如果遇到某些情况可以使用第二种。另外对于大型网站来说,PC端和移动端单独分开,不适合自适应网站开发。

展开
收起

互联网基础知识学习:php语言浅析

01为什么说PHP 是一门弱类型语言

1、php在声明变量时不必向 PHP 声明该变量的数据类型。

2、PHP 的变量在使用时,会根据变量的值,自动把变量转换为正确的数据类型。

而在在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称,否则编译器会报错。

02PHP变量声明的独有方式

php的变量声明和其他语言的不同的地方在于:变量名称前要加“$"符号,而其他语言诸如C/C++以及python等不需要加任何特殊的符号。如下图:

php语言简单示例

在上图中:变量 txt将保存值 Hello world!,且变量 x 将保存值 5。这里的变量txt、x、y变量前都增加了"$"这个符号。

另外需要注意的是:当您赋一个文本值给变量时,请在文本值两侧加上引号。

php的变量定义规则如下:

变量以 $ 符号开始,后面跟着变量的名称变量名必须以字母或者下划线字符开始变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )变量名不能包含空格变量名是区分大小写的($y 和 $Y 是两个不同的变量)

03php究竟是什么?

通过上面的示例,大家可能心中有个疑问——说了这么多,PHP究竟是什么呢?

和目前流行的python、shell等语言一样,其实php也是一种脚本语言。PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。php文件:PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器PHP 文件的默认文件扩展名是 ".php"

04php能做什么?

PHP 可以生成动态页面内容。PHP 可以创建、打开、读取、写入、关闭服务器上的文件。PHP 可以收集表单数据。PHP 可以发送和接收 cookies。PHP 可以添加、删除、修改您的数据库中的数据。PHP 可以限制用户访问您的网站上的一些页面。PHP 可以加密数据。通过 PHP,您不再限于输出 HTML。您可以输出图像、PDF 文件,甚至 Flash 电影。您还可以输出任意的文本,比如 XHTML 和 XML。总的来说,如果我们要开发一个便于大家浏览的网页,基本上都会用到php的相关知识。

05为什么在网页类开发都会用到php知识呢?

PHP 可在不同的平台上运行(Windows、Linux、Unix、Mac OS X 等)。PHP 与目前几乎所有的正在被使用的服务器相兼容(Apache、IIS 等)。PHP 提供了广泛的数据库支持。PHP 是免费的,可从官方的 PHP 资源下载它。PHP 易于学习,并可高效地运行在服务器端。也就是说,正是由于php兼容性高,跨平台运行方便、有种广大的数据库支持(开源的数据库)并且是免费的且易于学习,是的php在互联网开发方面具有重大的作用。

06php语言的echo和print语句

在php语言中,echo和print语句的功能类似,都是将对应的结果输出(打印)出来。

两者的区别在于:echo能够同时输出一个或者多个字符串,但是print只能输出一个,返回值一直是1(输出结果)。如下图所示:

echo一次能够输出多个字符串print一次只能输出一个字符串

这就是本次为大家分享的内容,希望大家喜欢。同时也希望大家多多点赞关注,祝各位生活愉快。

展开
收起

php开发小技巧:分享一段对接收数据进行过滤防止XSS的代码

今天在阅读源码时,看到一段代码,主要是对接收的参数进行过滤处理,防止XSS(跨站脚本攻击),写得很简洁,有必要跟大家分享一下,具体代码如下:

上面的代码,第3行是接收用户请求的数据,返回$input数组,第5行之后是对$input进行处理过滤掉html与php代码,这里用到了数组函数array_walk_recursive,对数组$input的值利用回调函数进行递归处理,同时利用引用传值,最终改变$input数组的值。

array_walk_recursive

用法:

示例:

若该文有助于你,可以关注一下“小瑾笔记”,坚持原创,分享技术,共同进步。

展开
收起

「Wolfcode_blog」Thinkphp6.0正式版博客源码分享

搭建后demo:

代码已同步更新到 Github, 各位小伙伴可以直接git下载!Github:https://github.com/wolf-leo/Wolf-Blog-thinkphp6.0码云:https://gitee.com/wolf18/Wolf-Blog-thinkphp-6.0腾讯云开发者平台:https://dev.tencent.com/u/Wolf-Ghost/p/Wolf-Blog-thinkphp6.0/git

一个简单的博客功能,对刚接触Thinkphp6.0的人会有帮助!

配置好database.php的数据库信息,绑定访问路径到/public,访问首页即可

相关说明都在里面

支持php7.1+

如果发现有什么不足的可以在底下留言补充!

展开
收起

干货分享:PHP的错误机制总结

PHP的错误机制总结

PHP的错误机制也是非常复杂的,做了几年php,也没有仔细总结过,现在就补上这一课。

特别说明:文章的PHP版本使用5.5.32

PHP的错误级别

首先需要了解php有哪些错误。截至到php5.5,一共有16个错误级别

注意:尝试下面的代码的时候请确保打开error_log:

E_ERROR

这种错误是致命错误,会在页面显示Fatal Error,当出现这种错误的时候,程序就无法继续执行下去了

错误示例:

注意,如果有未被捕获的异常,也是会触发这个级别的。

E_WARNING

这种错误只是警告,不会终止脚本,程序还会继续进行,显示的错误信息是Warning。比如include一个不存在的文件。

E_NOTICE

这种错误程度更为轻微一些,提示你这个地方不应该这么写。这个也是运行时错误,这个错误的代码可能在其他地方没有问题,只是在当前上下文情况下出现了问题。

比如$b变量不存在,我们把它赋值给另外一个变量

E_PARSE

这个错误是编译时候发生的,在编译期发现语法错误,不能进行语法分析。

比如下面的z没有设置为变量。

E_STRICT

这个错误是PHP5之后引入的,你的代码可以运行,但是不是PHP建议的写法。

比如在函数形参传递++符号

E_RECOVERABLE_ERROR

这个级别其实是ERROR级别的,但是它是期望被捕获的,如果没有被错误处理捕获,表现和E_ERROR是一样的。

经常出现在形参定义了类型,但调用的时候传入了错误类型。它的错误提醒也比E_ERROR的fatal error前面多了一个Catachable的字样。

E_DEPRECATED

这个错误表示你用了一个旧版本的函数,而这个函数后期版本可能被禁用或者不维护了。

比如curl的CURLOPT_POSTFIELDS使用\@FILENAME来上传文件的方法

E_CORE_ERROR, E_CORE_WARNING

这两个错误是由PHP的引擎产生的,在PHP初始化过程中发生。

E_COMPILE_ERROR, E_COMPILE_WARNING

这两个错误是由PHP引擎产生的,在编译过程中发生。

E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE,

E_USER_DEPRECATED,

这些错误都是用户制造的,使用trigger_error,这里就相当于一个口子给用户触发出各种错误类型。这个是一个很好逃避try catch异常的方式。

E_ALL

E_STRICT出外的所有错误和警告信息。

错误控制

php中有很多配置和参数是可以控制错误,以及错误的日志显示的。第一步,我们需要了解的是php中的有关错误的配置有哪些?

我们按照php+php-fpm的模型来说,会影响php错误显示的其实是有两个配置文件,一个是php本身的配置文件php.ini,另外一个是php-fpm的配置文件,php-fpm.conf。

php.ini中的配置

我们经常会被问到,error_reporting和display_errors有什么区别呢?这两个函数是完全不一样的。

PHP默认是会在日志和标准输出(如果是fpm模式标准输出就是页面)

error_reporting的参数是错误级别。表示什么样子的级别才应该触发错误。如果我们告诉PHP,所有错误级别都不需要触发错误,那么,不管是日志,还是页面,都不会显示这个错误,就相当于什么都没有发生。

display_errors是控制是否要在标准输出展示错误信息

log_errors则是控制是否要在日志中记录错误信息。

error_log是显示错误日志的位置,这个在php-fpm中往往会被重写,于是往往会发现的是cli和fpm的错误日志竟然不是在同一个文件中。

ignore_repeated_errors这个标记控制的是如果有重复的日志,那么就只会记录一条,比如下面的程序:

本来会出现两次NOTICE的,但是现在,只会出现一次了...

track_errors开启会把最后一个错误信息存储到变量里面去,这个可能在对记日志的时候会有一些用处吧。不过我觉得真是没啥用...

html_errors和docref_root两个是个挺有人性化的配置,配置了这两个参数以后,我们返回的错误信息中如果有一些在文档中有的信息,就会变成链接形式。

能让你快速定位到我们出现错误的地方。是不是很人性~

php-fpm中的配置

php-fpm的配置中也有一个error_log配置,这个很经常会和php.ini中的error_log配置弄混。但他们记录的东西是不一样的,php-fpm的error_log只记录php-fpm本身的日志,比如fpm启动,关闭。

而php.ini中的error_log是记录php程序本身的错误日志。

那么在php-fpm中要覆盖php.ini中的error_log配置,就需要使用到下面几个函数:

php_flag

php_value

php_admin_flag

php_admin_value

这四个函数admin的两个函数说明这个变量设置完之后,不能在代码中使用ini_set把这个变量重新赋值了。而php_flag/value就仍然以php代码中的ini_set为准。

slowlog是fpm记录的,可以使用request_slowlog_timeout设置判断慢日志的时长。

总结

我们经常弄混的就是日志问题,以及某些级别的日志为何没有记录到日志中。最主要的是要看error_log,display_errors, log_errors这三个配置,只是在看配置的时候,我们还要注意区分php.ini里面的配置是什么,php-fpm.ini里面的配置是什么。

好吧,我觉得弄懂这些配置,基本就没有php日志记录不了的WTF的问题了。

展开
收起

利用php开源源码搭建步骤

web网站是我们上网的窗口,而网站是如何搭建的呢?今天我们来做一个介绍,以php代码为例来进行介绍(后续会介绍一下java代码搭建,如果想要我这里涉及的工具或源码请私信我)。

1、首先你需要去网上下载你想搭建的源码。

2、安装phpstudy或者其他apache和mysql集成性工具。(我这里用的是phpstudy)

3、把你下载的源码拷贝到phpstudy目录下的www目录里,如下图(这里用iwebshop为例):

拷贝完后直接在你的电脑访问就行了(用你电脑的ip,如果不知道是多少用ipconfig看一下)打开访问就是下图这个样,然后选择同意,点击“下一步”

点击“下一步”

这时候需要提前去mysql数据库中创建数据库iwebshop(名字随便取,只要在下一步填写一样就行)

按照上图“下一步”显示的把数据库配置的文件填写进去

记得记住自己创建的后台用户名密码。点击“下一步”

到这一步,就算安装完成了,记得按照提示把install目录删除掉把,不然会干扰使用

点击“到前台”如下图:

点击到后台如下图:

到此一个开源的php网站安装完成。

总结:

注意事项:在安装过程中注意提前创建数据库,记住数据库的配置信息,方便再安装源码过程中填写。

展开
收起

hostloc大佬分享的phpcaiji小偷镜像授权源码

仅供交流使用,正式使用请购买正版!!!

官网地址:http://www.phpcaiji.com/

程序名称:单域名PHP镜像克隆程序程序版本:v4.0演示地址:http://demo301.phpcaiji.com/(输入网址一键克隆)本地下载: A5下载站长下载

程序名称:泛域名PHP镜像克隆程序程序版本:v4.0

演示地址:http://demo302.phpcaiji.com/ (输入网址一键克隆)

本地下载: A5下载站长下载

把代码保存PHP文件

Domain=输入你的域名

然后浏览器打开 就会获取到授权

然后在后台输入授权就可以使用了

源码隐藏了 给有需要的人

[ReplyVisible]

单域名授权:

<?php//仅供交流使用,正式使用请购买正版!!!//这里填写你的网站域名(不加协议)$Domain = 'www.baidu.com';echo 'Your License Code: '.$Domain.'|'.md5($Domain.'301!@#'.$Domain.'301!@#').PHP_EOL;泛域名:

<?php//仅供交流使用,正式使用请购买正版!!!//这里填写你的网站域名(不加协议)$Domain = 'www.baidu.com';echo 'Your License Code: '.$Domain.'|'.md5($Domain.'302!@#'.$Domain.'302!@#').PHP_EOL;复制代码

[/ReplyVisible]

展开
收起

利用php中双等于和三等于的区别,无需密码拿到flag

这是一道CTF中常见的题目,我们来看一下题目描述(其实ctf中题目描述很多都是没用的,甚至还会误导我们)

题目描述先让我们找密码:

打开这个页面,似乎并没用什么东西出现。根据经验我们要看一下源码有没有东西!

右键查看源码:发现有个注释掉的index.txt

我们来看一下index.txt,果真提示性代码出来了。

isset($_GET['password'])//满足passwd不为null strcmp($_GET['password'], $flag) == 0//password和flag相等

其实这么多就这两行有用(让我想到了开发最后就是再写if/else),看到上面我注释好的passwd满足的条件了把,password不为null且password和flag字符串相同?

第一个不为null很好满足,那第二个条件呢?看似strcmp函数对比两个字符串相同则返回0否侧返回正数或者负数,但是很明显我们要是知道flag我们还做它干啥,这里一定要看清和0对比是用的==而不是===,这就是php的魅力,===是要类型,内容相等,而==只要内容相等即可。

什么是内容相等呢,false和0是相等的,那这里我们想strcmp函数中什么时候会返回false呢,只有当对比的两个对象不是同一类型时会返回false。

这里我们就想flag肯定是字符串,那我们让password为数组的情况下肯定返回为false了。

构造如下:

flag就出来了!

虽然这是一个CTF题目,但是php开发的小伙伴一定要注意再strcmp和==同时使用时候的特点,避免留下漏洞被利用。

展开
收起

分享一个Php递归函数的写法

递归函数是我们常用到的一类函数,最基本的特点是函数自身调用自身,但必须在调用自身前有条件判断,否则会无限调用下去。

一般来说,递归函数可利用全局变量,引用,静态变量,但需对他们的作用范围有所理解。递归函数也是解决无限级分类的一个很好的技巧。

关于php的递归函数,网上有很多的解释说明,我就不在这里重复说明了,大家搜一下即可,我今天就是给大家分享一个我自己写的递归函数,这个函数,我是想重复累积获取字符串,这就需要递归函数的结果给依次保存下来,这里,有的朋友可使用引用变量来实现,但是这个不是特别好理解,我直接传递的是字符串,通过字符串的传参调用,非常容易理解。好了,不说了,直接上代码。

//递归调用

public static function getnew($uid,$ppathnew)

{

$newfa =self::where('uid='.$uid)->value('faid');

if($newfa==1)

{

$ppathnew=','.$newfa.','.$ppathnew;

return $ppathnew; }

else

{ $ppathnew=$newfa.','.$ppathnew;

return self::getnew($newfa,$ppathnew); }

}

这个函数是在thinkphp类中写的,我是把ppathnew 可以初始为一个空字符串,随着不断的调用,把累积的字符串传到下一次调用的参数那里,这样实现了累积。

非常的简单,明了,很好理解,在此之前我也查了很多网上的资料,有很多的朋友也再问这个事情。就是递归函数的值一直保存,无法初始化,通过这种方式,既能累积,也能初始化,希望对大家有所帮助。

展开
收起

扩散!PHP在线加密文件网站源码分享,人手一份方便加密

对于一些互联网工作者来说,很多时候都害怕自己的重要文件被别人轻易的看到,这时候对文件加密就非常有必要了!那么怎样的加密系统才是最适合自己的呢?而今天小猿君就给大家带来了一个由PHP语言所开发出来的一个文件加密网站,这一网站的功能虽然简单,但是非常实用。下面我们就先来看看这一网站的主页截图吧!

这一次小猿君所开发出来的文件加密系统,建议大家只加密核心代码就可以了,对于非核心代码可不进行加密,不然全部加密会导致网站的文件过大而不能使用正常哦!

此系统安装时我们仅需要更改一下ini.php文件中的内容即可直接上传到自己的服务器中使用的了,安装非常简单快捷,基本上懂一些服务器知识的小伙伴也可以轻松上手安装完成!

好了,如果大家感觉小猿君此次所分享的源码对大家有用的话,可以直接在评论区留言哦!若想下载的小伙伴可以直接私信小猿君哈!谢谢大家的阅读!

展开
收起