首页
关于
Search
1
Fastadmin 美化后台样式
310,894 阅读
2
关于破解移动宽带光猫 型号: GS3101 超级管理员密码
26,920 阅读
3
给Thinkphp3用上composer
19,965 阅读
4
Wallpaper完美壁纸修复天气bug(无需申请API)
19,751 阅读
5
PECL无法安装时手动编译安装PHP扩展
19,608 阅读
Linux
Mysql
PHP
Nginx
归档
Android
Python
IOS
浴室沉思
C++
CCF CSP认证
Windows
C#
前端
登录
Search
标签搜索
php
git
Windows
wkhtmltopdf
短信
defense
API
Google Photos
python
wkhtmltoimage
网页快照
linux
ssr
https
mail
sms
小程序
封装
ComoBox
拼多多
Guooo
累计撰写
126
篇文章
累计收到
81
条评论
首页
栏目
Linux
Mysql
PHP
Nginx
归档
Android
Python
IOS
浴室沉思
C++
CCF CSP认证
Windows
C#
前端
页面
关于
搜索到
28
篇与
的结果
2017-10-24
国内镜像安装Composer
已经有无数次看到Composer这个东西了。一直以来,我所看到的各大框架和一些开源项目的部署都提到了Composer这个东西,但是往往我都是(由于懒)直接使用git或者直接下载等方式获取源码,今天特地试着安装下Composer这个东西。官网简介Composer 是一个新的安装包管理工具,服务于 PHP 生态系统。它实际上包含了两个部分:Composer 和 Packagist。我就不详细解释它们的具体作用了,因为百度Google都有(而且我也不懂)。总的来说就提取出一句话,它可以自动帮你为项目安装所依赖的开发包。对了,运行Composer需要PHP5.3.2+Windows & Linux安装说实话安装这个东西我是搞了很久的,因为蓝某灯被和谐的原因,很多人没有不锈钢梯子,官网都打不开,很难下载 Composer。然后我找到了Composer中国镜像网如果你一定要选择官方的话,可以查看官网教程那么就用它安装吧if 你已经配置好了PHP环境变量什么是配置好了环境变量,就是你在CMD或者命令行执行php -v会有反应,那么就是已经配置好了。then打开CMD分别执行以下命令php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"php composer-setup.phpphp -r "unlink('composer-setup.php');"上述 3 条命令的作用依次是:下载安装脚本 - composer-setup.php - 到当前目录。执行安装过程。删除安装脚本。其实官网还有一句是用来检测Composer.phar的完整性,但是这里由于使用的是国内镜像,可能会出错,所以不推荐执行,不过也贴出来放到这里:php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"局部安装上述下载 Composer 的过程正确执行完毕后,可以将 composer.phar 文件复制到任意目录(比如项目根目录下),然后通过 php composer.phar 指令即可使用 Composer 了!全局安装(推荐)Mac或者Linux系统打开命令行窗口并执行如下命令将前面下载的 composer.phar 文件移动到 /usr/local/bin/ 目录下面:sudo mv composer.phar /usr/local/bin/composerWindows系统1、找到并进入PHP的安装目录(和你在命令行中执行的 php -v 指令应该是同一套 PHP)。2、将 composer.phar 复制到PHP 的安装目录下面,也就是和php.exe在同一级目录。3、在PHP 安装目录下新建一个 composer.bat 文件,把这一串代码保存到此文件中。@php "%~dp0composer.phar" %*4、双击执行创建的这个 composer.bat 文件5、最后重新打开一个命令行窗口试一试执行 composer --version 看看是否正确输出版本号即可。修改 composer 的全局配置文件在你准备使用Composer安装依赖之前,不如先把它切换到国内的镜像源吧,速度应该会快不少。打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/更新Composer如果需要更新composer,执行 composer selfupdate 即可
2017年10月24日
3,287 阅读
0 评论
0 点赞
2017-07-18
让浏览器直接输出HTML代码而不解析
我打算把带样式的浏览器标签保存到数据库里,有一点地方报错,于是我想先把插入语句打印出来,直接在mysql插入看看有没有问题,但是在浏览器打印出来时发现变成了这样于是我在想怎么让浏览器直接输出HTML代码而不解析,网上搜集了一下,大概有以下几种方式方法一:将HTML代码嵌入到<script type='text/html' style='display:block'></scipt>中<script type='text/html' style='display:block'> <带标签的内容/> </scipt>方法二:空格 把标签的< 替换成 <把标签的> 替换成> 这样就不会被解析了" "(双引号“”)这里附加几个特殊符号:→(右箭头→) ←(左箭头←)方法三:放到<pre></pre>或者<xmp></xmp>标签中pre元素可定义预格式化的文本。被包围在pre元素中的文本通常会保留换行符和空格。而文本也会呈现等宽字体。不过我只试了第三种,发现没有成功。。。如有更好的答案,请指教
2017年07月18日
2,454 阅读
0 评论
1 点赞
2017-06-29
关于原生PHP实现功能的示例
ThinkPHP 用多了,原生PHP都快不会了,不行,不行不行跨域头 header('Access-Control-Allow-Origin:*');PHP跳转页面header("Location: https://note.coccoo.cc"); //确保重定向后,后续代码不会被执行 exit; ``` ### PHP获取html中img标签的src值(正则表达式) > 实现功能主要是在`富文本编辑器`提交过来的数据,包含了所有的html样式,但是我要根据富文本提交过来的数据判断有没有图片,如果有的话就把图片提取出来当`封面`,如果没有就给它一个`默认的封面` //content 富文本内容 //matches 提取出来的包含src的数组 //pic 最终的src值 if (preg_match('/<img.+src=\"?(.+\.(jpg|gif|bmp|bnp|png))\"?.+>/i',$content,$matches)){ //得到图片地址结尾的位置 if ($num = strpos($matches[1],'"')){ //截取字符串,得到真正图片地址 $pic = substr($matches[1],0,$num); }else{ $pic = $matches[1]; } } ### mysqli连接数据库(可能)常用功能 > 现在貌似`mysql_`函数都慢慢被废弃了,开始转用`mysqli_`函数,比如`mysqli_connect` 设置编码$con = mysqli_connect($host,$username,$password,$db) or die("Unable to connect to the MySQL!"); mysqli_query($con,"set names 'utf8'");//设置编码开启事务$con->autocommit(false);//开启事务 $res1 = mysqli_query($con,$sql1);//第一条操作 $res2 = mysqli_query($con,$sql2);//第二条操作 if ($res1 && $res2){ //提交事务 $con->commit(); //关闭连接 mysqli_close($con); }else{ //回滚 $con->rollback(); } ### 判断某时间戳是否在今年 > 判断某个时间戳是不是在今年,如果是,就不显示带年份,如果不是,就显示年份时间 //$dis_time 要展示出来的时间 //date('Y',time()) == date('Y',$dis_time) 判断时间戳是否是今年 $dis_time = (date('Y',time()) == date('Y',$dis_time)) ? date('m-d H:i',$dis_time) : date('y-m-d H:i',$dis_time);这样展示出来的数据就有两种形式,`06-29 12:28` 或者 `2008-07-22 12:28` ### 时间戳转换成微信朋友圈形式 > 把时间戳转换成类似朋友圈的形式,比如`一分钟前`,`两天前`之类的 //@param $addTime 传进去的时间戳 //return $timeStr 转换后的时间public function getTime($addTime){ $nowTime = time();//当前时间 if($addTime > $nowTime) { return ""; } $dTime = $nowTime-$addTime;//时间差 $year = intval($dTime/2592000/12);//年数 $month = intval($dTime/2592000);//月数 $day = intval($dTime/86400);//天数 $hour = intval($dTime/3600);//小时 $min = intval($dTime/60);//分钟 if ($min<1){ $timeStr = '刚刚'; }else if ($hour < 1){ //分钟处理 $timeStr = $min.'分钟前'; }else if ($day<1){ //小时处理 $timeStr = $hour.'小时前'; }else if ($month<1){ //天数处理 $timeStr = $day.'天前'; }else if ($year<1){ //月数处理 $timeStr = $month.'月前'; }else{ //年数处理 $timeStr = $year.'年前'; } return $timeStr; }
2017年06月29日
1,582 阅读
0 评论
0 点赞
2017-06-22
Session会话和浏览器的关系
今天想和大家分享一个关于Session的话题: 当浏览器关闭时,Session就被销毁了?我们知道Session的作用是可以保存当前用户的状态信息,初学它的时候,认为Session的生命周期是从打开一个浏览器窗口发送请求到关闭浏览器窗口,但其实这种说法是不正确的!下面就具体的去解释:当用户第一次访问Web应用中支持Session的某个网页时,就会开始一个新的Session,那么接下来当用户浏览这个Web应用的不同网页时,始终处于一个Session中再详细些:当一个Session开始时,Servlet容器会创建一个HttpSession对象,那么在HttpSession对象中,可以存放用户状态的信息Servlet容器为HttpSession对象分配一个唯一标识符即Sessionid,Servlet容器把Sessionid作为一种Cookie保存在客户端的 浏览器 中用户每次发出Http请求时,Servlet容器会从HttpServletRequest对象中取出Sessionid,然后根据这个Sessionid找到相应的HttpSession对象,从而获取用户的状态信息以上就是Session的运行机制,但是还没有提到Session的生命周期,再往下了解!其实让Session结束生命周期,有以下两种办法:一个是Session.invalidate()方法,不过这个方法在实际的开发中,并不推荐,可能在强制注销用户的时候会使用;一个是当前用户和服务器的交互时间超过默认时间后,Session会失效我们知道Session是存在于服务器端的,当把浏览器关闭时,浏览器并没有向服务器发送任何请求来关闭Session,自然Session也不会被销毁,但是可以做一点努力,在所有的客户端页面里使用js的window.onclose来监视浏览器的关闭动作,然后向服务器发送一个请求来关闭Session,但是这种做法在实际的开发中也是不推荐使用的,最正常的办法就是不去管它,让它等到默认的时间后,自动销毁那么为什么当我们关闭浏览器后,就再也访问不到之前的session了呢?其实之前的Session一直都在服务器端,而当我们关闭浏览器时,此时的Cookie(应该是会话Cookie)是存在于浏览器的进程中的,当浏览器关闭时,Cookie也就不存在了。其实Cookie有两种:一种是存在于浏览器的进程中;一种是存在于硬盘上而session的Cookie是存在于浏览器的进程中,那么这种Cookie我们称为会话Cookie,当我们重新打开浏览器窗口时,之前的Cookie中存放的Sessionid已经不存在了,此时服务器从HttpServletRequest对象中没有检查到sessionid,服务器会再发送一个新的存有Sessionid的Cookie到客户端的浏览器中,此时对应的是一个新的会话,而服务器上原先的session等到它的默认时间到之后,便会自动销毁。ps:当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;当不在同一个窗口中打开相同的浏览器时,发送请求,仍是同一个session;当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,就是本文所阐述的,是不同的session,但是它和session的生命周期是没有关系的.
2017年06月22日
1,583 阅读
0 评论
0 点赞
2017-06-14
PHP发送邮件
我当时使用的是PHPMailer-5.2版本,在更新到6.x版本以后使用方式不同了,请自行根据文档测试或者直接使用 5.2 版本的分支最近突然想在Centos服务器上弄一些定时任务,但是又不想一直监视,所以打算在服务器上弄一个邮件功能,这样当任务完成的时候就可以直接通过邮件给我及时发送通知。先在github上找了一下,发现了一个开源的邮件发送模块,很欣慰地址:https://github.com/PHPMailer/PHPMailer目前为止该项目已经有了8884个star,据文档说明,该项目使用范围很广,包括WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla!等,更多信息你还是自己去github上看吧,不介绍了。粗略看了一下使用起来比较简单,所以就用这个吧!你需要一点点东西一台能用的电脑/服务器安装了php有至少两个邮箱(一个也可以,自己给自己发:))0.5克 脑子好,开始了以网易邮箱举例,首先你要知道如何开启SMTP (其实每个邮箱官网都会有介绍,自己去看看就好啦,这里给你几个示例)首先,先从github上下载或者使用git方式克隆下来git clone https://github.com/PHPMailer/PHPMailer.git下载下来应该就是一个文件夹了,然后你在文件夹外面新建一个index.php文件,目录应该如下了mail (文件夹)PHPMail (文件夹)index.php然后你就在这个index.php文件里写点东西就可以了,PHPMail这个文件夹我们不需要动,因为我们需求又不高,如果只是简单发送邮件的话(笑按照这个代码复制进去改一下就行了<?PHP //邮件发送 require './PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer; // $mail->SMTPDebug = 3; // 调试输出 $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtp.163.com'; // 这个是网易邮箱的 $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'gty0211@163.com'; // 邮箱帐号 $mail->Password = 'password'; // SMTP 密码(这个密码一般和邮箱登陆密码不一样) $mail->SMTPSecure = 'ssl'; // 加密方式,可以设置 TLS , ssl 也可以 $mail->Port = 465; // 协议端口号,跟加密方式关联,一般是465,不行的话就一个个试试吧 $mail->setFrom('gty0211@163.com', 'TianYu'); //发信地址,后一个是昵称 $mail->addAddress('xxxxxxxxx@qq.com','demo'); // 收信地址,后一个是昵称 // $mail->addAddress('xxxxxxxxx@qq.com'); // 也可以这样写,昵称不填 // $mail->addReplyTo('info@example.com', 'Information'); // // $mail->addCC('cc@example.com'); //抄送 // $mail->addBCC('bcc@example.com'); //抄送有关,反正我不用 // $mail->addAttachment('/var/tmp/file.tar.gz'); // 添加附件地址 // $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // 添加附件,修改附件名称 $mail->isHTML(true); // 是否发送HTML格式邮件 $mail->Subject = '这是个主题'; //主题 $mail->Body = '这是一个 HTML 形式的 <b> bold!</b>'; //html类型正文 $mail->AltBody = '这是个纯文本形式的body!'; //普通形式正文 if(!$mail->send()) { echo 'Message 发送失败. '; echo '错误信息: ' . $mail->ErrorInfo; } else { echo 'Message 已发送'; }然后让php执行就可以了php index.php或者直接访问到这个index.php项目地址,也会自动发送邮件。好了,邮件发送到这里就已经成功了。你也可以作死地把这个邮件发送功能嵌入到其他项目,shell,python脚本里面。The END
2017年06月14日
2,487 阅读
2 评论
0 点赞
2017-06-05
PHP微信网页授权获取openid和获取用户信息
头一次接触微信认证和curl,摸了两三天才找到点门路,先把代码贴上来,以备不时之需入口函数是getOpenid先新建一个index.php,代码如下<?php include('./wechat.php'); $wechat = new Wechat(); //获取openid和accessToken $wechat->getOpenid(); //获取用户信息 //$wechat->getUserInfo();然后在和index.php同级的目录新建一个wechat.php在这个文件里你要改一个地址,看仔细!<?php /** * 微信公众号获取openid */ class Wechat { private $redirect_url = "https://note.coccoo.cc/PHP/61.html";//这里填你自己的地址!!要能访问到这个类下的getOpenid方法!! //用户同意授权,获取openid //应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid), snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。) public function getOpenid($scope = 'snsapi_base'){ if (!isset($_GET['code'])){ $url = $this->get_authorize_url($scope); Header("Location: $url"); exit(); }else{ //获取code码用以获取openid $code = $_GET['code']; $res = $this->get_token($code); return $res;//完整数据 //return $res['openid']; } } /** * 拼接url */ public function get_authorize_url($scope){ $appid='xxxxxxxxxxx';//微信公众号appid $state='123';//状态码 //处理回调域名 $redirect_url = $this->redirect_url; $redirect_url = urlencode($redirect_url); //对中文转码 //拼接url $url = "https://open.weixin.qq.com/connect/oauth2/authorize?"; $url = $url . 'appid='.$appid; $url = $url . '&redirect_uri='.$redirect_url; $url = $url . '&response_type=code'; $url = $url . "&scope=" . $scope; //应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。 $url = $url . "&state=" . $state; return $url; } /** * 通过code换取openid/token */ public function get_token($code = ''){ $appid='xxxxxxxxxxxxxx';//微信公众号appid $secret='xxxxxxxxx';//应用密钥 $wx_access_url= 'https://api.weixin.qq.com/sns/oauth2/access_token?'; $wx_access_url = $wx_access_url . 'appid='.$appid; $wx_access_url = $wx_access_url . '&secret='.$secret; $wx_access_url = $wx_access_url . '&code='.$code; $wx_access_url = $wx_access_url . '&grant_type=authorization_code'; $res = $this->http($wx_access_url); //发送网络请求 if ($res[0] == 200){ $arr = json_decode($res[1],true); //返回数组 return $arr; } return $res[1]; } /** * 微信获取用户信息 */ public function getUserInfo(){ $data = $this->getOpenid('snsapi_userinfo');//获取用户信息 $access_token = $data['access_token']; $openId = $data['openid']; $infourl = 'https://api.weixin.qq.com/sns/userinfo?'; $infourl = $infourl . 'access_token='.$access_token; $infourl = $infourl . '&openid='.$openId; $infourl = $infourl . '&lang=zh_CN'; $info = $this->http($infourl); //用户信息数据 if($info[0] == 200){ return json_decode($info[1],true);//返回包含信息的数组 } return $info[1]; } //发送网络请求 public function http($url, $method='', $postfields = null, $headers = array(), $debug = false) { $ci = curl_init(); /* Curl settings */ curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ci, CURLOPT_TIMEOUT, 30); curl_setopt($ci, CURLOPT_RETURNTRANSFER, true); //没有这下面一句,可能报错“SSL certificate problem: unable to get local issuer certificate” //但是这一句是跳过验证,所以安全敏感度不高的可以用这个方法 curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, 0); switch ($method) { case 'POST': curl_setopt($ci, CURLOPT_POST, true); if (!empty($postfields)) { curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); $this->postdata = $postfields; } break; } curl_setopt($ci, CURLOPT_URL, $url); curl_setopt($ci, CURLOPT_HTTPHEADER, $headers); curl_setopt($ci, CURLINFO_HEADER_OUT, true); $response = curl_exec($ci); $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); if ($debug) { echo "=====post data======\r\n"; var_dump($postfields); echo '=====info=====' . "\r\n"; print_r(curl_getinfo($ci)); echo '=====$response=====' . "\r\n"; print_r($response); } curl_close($ci); return array($http_code, $response); } }然后在微信浏览器访问你的index.php就可以了。
2017年06月05日
3,445 阅读
2 评论
0 点赞
2017-06-04
Centos7 升级PHP版本到5.6
据说Centos是比较追求稳定的版本,它上面所有yum源的软件版本都是比较靠后的。所以当有些项目需要新版软件的时候,就需要手动更新了。这是一个项目的报错This version of ownCloud requires at least PHP 5.6.0 You are currently running 5.4.16. Please update your PHP version.我是打算从5.4的版本升级到5.6,其实升级其他版本也一样,可以执行yum list | grep php查看所有可安装的版本。下面来讲一下如何升级进入终端后查看php版本php -v 输出可能如下: PHP 5.4.35 (cli) (built: Nov 14 2014 07:04:10) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2015, by Zend Technologies 执行下面的命令升级软件仓库 rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 执行下面的命令删除phpyum remove php-common 然后像安装那样问你是否继续的,输入yes即可 清除一下缓存yum clean all安装php 5.6版本(php56w-devel这个不是必需的)yum install -y php56w php56w-fpm php56w-opcache php56w-xml php56w-mcrypt php56w-gd php56w-devel php56w-mysql php56w-intl php56w-mbstring php56w-cli php56w-common php56w-pdo重启httpdservice httpd restart #查看最新的版本 php -v #现在应该是5.6了!
2017年06月04日
4,698 阅读
5 评论
0 点赞
2017-06-01
微信公众号开发保持用户登录状态思路
先看个流程图微信开发离不开openid(为了识别用户,每个用户针对每个公众号会产生一个安全的openid).而通常我们获取openid,以及获取用户的基本信息是通过用户授权的方式进行获取。那么ok,怎样通过授权方式获取呢,看上面的流程图中的code(此code是由微信为我们提供,只能使用一次),并且该code只有当我们点配置的菜单时(配置菜单要使用用户授权的方式配置),才能获取到。所以当用户点击菜单时:我们先判断该code,如果不为null,通过该code获取openid。拿到openid后,我们去数据库通过openid查询用户信息,如果返回有结果说明该用户已经登录过,将用户信息放置session中,跳转到登录后的页面拿到openid后,如果我们去数据库没有查询到用户信息,说明该用户没有登录过,跳转到登录页面,让用户登录,登录完将openid与用户信息插入到数据库,并放置session中,跳转到登录后的页面。如果code为null,我们从session中直接取用户信息(注意session过期的处理),如果取到用户信息,进入到登录后的页面如果code为null,并且session过期,或者没有获取到用户的信息,跳转到微信授权的地址,重新走流程,形成循环。这样,我们就能保证用户一次登录,永久不用登录的效果了,其实最主要还是要搞清openid,每个用户针对同一个公众号,此openid是永远不会变的,哪怕是你取消了重新关注。注意事项今天使用测试号测试的时候,服务器验证通过,但是无论怎么获取code都是Scope参数错误或没有Scope权限(redirect_url错误也可能是这个原因)。看了下参数不可能错误,只有权限问题。最终发现问题:测试号权限列表里面有个网页授权用户基本信息,在那里填入域名或者ip,不带www和http://,不需要详细地址,然后在获取code就没问题了。
2017年06月01日
2,254 阅读
0 评论
0 点赞
1
2
3
4