获取本机公网IP地址接口

自从新浪通用接口

http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.4.255.255

凉了之后,要找个靠谱的接口非常重要,下面提供一个免费的接口,这个接口是由www.pubyun.com提供的,老牌DDNS服务商(原名:希网 3322)公云

http://members.3322.org/dyndns/getip

phpStudy更新MySQL

博主这两天在windows上开发,需要MySQL5.7版本。

phpStudy内置的是MySQL5.5,又不想使用原生MySQL安装包或者Docker

于是乎,把phpStudy内置的MySQL升级一下

到官网上下载自己所需的MySQL压缩包,不是exe,msi安装包那种

64位系统尽量下载 64-bit的,更高效率

先用phpStudy管理器把MySQL给停了

以管理员权限打开cmd,运行sc delete MySQLa 删除当前的MySQL服务

重命名一下自带的MySQL文件夹为 MySQL5.5

把下载MySQL包解压放到当前目录的MySQL文件夹中

新建data文件夹和my.ini文件

my.ini文件内容参考如下:

[client]
port=3306
[mysql]
default-character-set=utf8

[mysqld]
port=3306
skip-grant-tables
basedir="D:/development/phpStudy/PHPTutorial/MySQL/"
datadir="D:/development/phpStudy/PHPTutorial/MySQL/data/"
character-set-server=utf8
default-storage-engine=INNODB

保存好了之后,注册系统服务

以管理员身份打开cmd,进入到这个目录

输入 mysqld –initialize 初始化data内的数据,其中包含了mysql这个数据库的初始数据

输入 mysqld install MySQLa回车,这样子就注册好MySQL服务(phpStudy注册的服务名称就是MySQLa)

打开phpStudy管理器,就能操作MySQL的启动、停止了

输入命令mysql -uroot -p回车后提示输入密码继续回车,因为没有密码。

输入use mysql;update user set authentication_string=password('你要的密码') where user='root'; flush privileges;

这样子设置好root密码了

参考资料:

http://phpstudy.php.cn/jishu-php-2967.html

https://blog.csdn.net/qq_37540398/article/details/81510488

一种PHP的nginx伪静态写法

众所周知,thinkphp5的Nginx写法是这样子的:

location / {
   if (!-e $request_filename) {
      rewrite  ^(.*)$  /index.php?s=/$1  last;
   }
}

现在网站根目录下面有一个admin.php文件

请求http://abc.com/admin.php/login时候,请求会被nginx转发到index.php

按照开发需求,则需要转发至admin.php

nginx单host完整配置代码如下

server {
     listen 80;
     server_name abc.com;
     root /xxxx/xxxx;
     index index.html index.htm index.php;
     charset utf-8;
	location ~ [^/]\.php(/|$)
	{
		try_files $uri =404;
		fastcgi_pass  127.0.0.1:9000;
		fastcgi_index index.php;
		include fastcgi.conf;
		set $real_script_name $fastcgi_script_name;
		if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
			set $real_script_name $1;
			set $path_info $2;
		}
		fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
		fastcgi_param SCRIPT_NAME $real_script_name;
		fastcgi_param PATH_INFO $path_info;
	}

	location / {
		if (!-e $request_filename) {
			rewrite  ^/(.*)$  /index.php?s=/$1 last;
			break;
		}
	}
}

如何让laravel永远返回json串,包含报错内容

在使用laravel做API服务端的时候,想让laravel永远返回json串,方便App端或者ajax查看调试信息.

思路:让Illuminate/Http/Request类的expectsJson、wantsJson这两个方法永远返回true

这个Request类是composer提供的,我们不能直接修改,先extends这个类,然后我们覆盖这两个方法。

<?php

namespace App\Http\Requests;

use Illuminate\Http\Request;

class BaseRequest extends Request {

public function wantsJson() {return true;}

public function expectsJson() {return true;}

}

在框架的index.php修改一下 注入的Request类

$response = $kernel->handle(
    $request = \App\Http\Requests\BaseRequest::capture()
);

之后,laravel返回的默认类型都是json了,包括了错误日志

参考:https://laravel-china.org/wikis/16069

跨域问题,当mode为include时,Access-Control-Allow-Origin不能为*,

The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.


配合前端写Vue项目时,浏览器遇到这种错误,按道理来说http response 的 header 中 Access-Control-Allow-Origin参数 为* 时,可以满足一切域名情况。

看样子 看了半天也不行,修改nginx的配置 Access-Control-Allow-Origin 改为 http://xxx.xxx.com时候,可以了。最后查找跨域文档才发现

跨域请求发送cookie的时候,需要判断是否包含了请求源的origin,不然不发送cookie,然后,OPTIONS请求发送成功后,并没有新的请求发出。

解决方法是:
nginx配置修改一下

add_header Access-Control-Allow-Origin *;

改成

add_header Access-Control-Allow-Origin "$http_origin";


这样满足任何情况

composer版本符号

* : 最新版 


>=1.0: 大于等于1.0的最高版本 


>=1.0 <2.0:大于等于1.0且小于2.0的最高版本


1.0 – 2.0:1.0至2.0之间的最高版本 


1.0.*:>=1.0且<1.1的最高版本 


~1.2:>=1.2且<2.0的最高版本 


~1.2.3:>=1.2.3且<1.3.0最高版本 


^1.2.3:>=1.2.3且<2.0.0的最高版本

https://blog.csdn.net/hwhsong/article/details/79079197

PHP curl模拟form表单上传文件

关键代码如下:

$ch = curl_init('https://www.baidu.com/uploadImage');
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['file' => new \CURLFile($fileRealPath)]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);

备忘

Sublime Text 3破解方法

sublime_text3作为一款文本编辑软件,在加装了各种插件之后,简直码代码神器。

虽然可以免费试用,但是那个是不是跳出来的购买框简直要逼死强迫症了~-~

然而打开购买页面之后,那个80刀的价格对我这新手是极其不友好的。。。。

sublime的购买机制是只检测用户,而不限制用户所使用的终端数量,所以之前各种注册码能百度出好多,而且随便一个就能用

但是 最近 官方好像在打击这一块,很多被分享的注册码都不能用了

没办法,只有更改hosts文件。。。

具体方法如下:

1.更改hosts文件

windows系统的hosts文件在C:\Windows\System32\drivers\etc 路径下,其他系统请自行百度

在hosts文件中加入下面两行:

127.0.0.1 www.sublimetext.com
127.0.0.1 license.sublimehq.com

注意:因为hosts文件是系统文件,所以修改需要系统管理员权限,可以右键选择 使用管理员打开;如果右键菜单没有,可以点击属性修改用户的权限,只要为普通用户加上修改权限就可以了

2.添加注册码

打开sublime text ,选择help–>enter license,将下面的内容复制到输入框中

----- BEGIN LICENSE -----
sgbteam
Single User License
EA7E-1153259
8891CBB9 F1513E4F 1A3405C1 A865D53F
115F202E 7B91AB2D 0D2A40ED 352B269B
76E84F0B CD69BFC7 59F2DFEF E267328F
215652A3 E88F9D8F 4C38E3BA 5B2DAAE4
969624E7 DC9CD4D5 717FB40C 1B9738CF
20B3C4F1 E917B5B3 87C38D9C ACCE7DD8
5F7EF854 86B9743C FADC04AA FB0DA5C0
F913BE58 42FEA319 F954EFDD AE881E0B
------ END LICENSE ------

点击确定就好了,尽情享受这款编程神器吧

在Mac上面测试成功了

PHP脚本实现webhook源码

error_reporting(1);
set_time_limit(0);
// 部署目录
$target = '/www/www.baidu.com';
// 部署密钥
$token = '123456789';
// 部署分支
$branch = 'develop';

// token判断
$request_token = isset($_SERVER['HTTP_X_GITLAB_TOKEN']) ? $_SERVER['HTTP_X_GITLAB_TOKEN'] : '';
if ($token !== $request_token) {
die;
}

// 分支判断
$arr = file_get_contents('php://input', 'r');
$arr = json_decode($arr, true);
if (JSON_ERROR_NONE !== json_last_error()) {
die;
}
$ref = isset($arr['ref']) ? $arr['ref'] : die;
$ref = explode('/', $ref);
$ref = array_pop($ref);
if ($branch != $ref) {
die;
}

$cmd = "(cd $target && git pull && composer install -vvv) > /dev/null 2>&1 &";
echo shell_exec($cmd);