如何让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);

备忘

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);

最容易理解的CSS的position教程——十步图解CSS的position

CSS的positon,我想做为一个Web制作者来说都有碰到过,但至于对其是否真正的了解呢?那我就不也说了,至少我自己并不非常的了解其内核的运行。今天在Learn CSS Positioning in Ten Steps一文中分十步介绍了CSS的“position”中的“static、relative、absolute、float”使用,觉得蛮有意思的。整理了一下贴上来与大家一起分享。希望大家能喜欢。

继续阅读“最容易理解的CSS的position教程——十步图解CSS的position”

Http request header坑记录

在开发公共API时,在请求头中(http request header)加入key secret来认证用户。
类似阿里云AccessKey AccessSecret。
header的key为MERCHANT_KEY MERCHANT_SECRET,PHP后端接收不到这些key的header。
查阅nginx资料发现,nginx默认设置会把含有下划线的key给忽略掉。
修改这些设置有两个方法:

1、修改nginx设置,underscores_in_headers 设置为 on

2、使用减号代替下划线,推荐这个方法

php 处理高精度计算函数

PHP 为任意精度数学计算提供了二进制计算器(Binary Calculator),它支持任意大小和精度的数字,以字符串形式描述

bcadd — 加法
bccomp — 比较
bcdiv — 相除
bcmod — 求余数
bcmul — 乘法
bcpow — 次方
bcpowmod — 先次方然后求余数
bcscale — 给所有函数设置小数位精度
bcsqrt — 求平方根
bcsub — 减法

涉及到钱的计算,还是以int存储,不容易出问题

PHPStorm激活码

1ZXL0K0S40-eyJsaWNlbnNlSWQiOiIxWlhMMEswUzQwIiwibGljZW5zZWVOYW1lIjoi5q2j54mI5o6I5p2DIC4iLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiRm9yIGVkdWNhdGlvbmFsIHVzZSBvbmx5IiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJJSSIsInBhaWRVcFRvIjoiMjAxOS0xMS0xNSJ9LHsiY29kZSI6IkFDIiwicGFpZFVwVG8iOiIyMDE5LTExLTE1In0seyJjb2RlIjoiRFBOIiwicGFpZFVwVG8iOiIyMDE5LTExLTE1In0seyJjb2RlIjoiUFMiLCJwYWlkVXBUbyI6IjIwMTktMTEtMTUifSx7ImNvZGUiOiJHTyIsInBhaWRVcFRvIjoiMjAxOS0xMS0xNSJ9LHsiY29kZSI6IkRNIiwicGFpZFVwVG8iOiIyMDE5LTExLTE1In0seyJjb2RlIjoiQ0wiLCJwYWlkVXBUbyI6IjIwMTktMTEtMTUifSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMTktMTEtMTUifSx7ImNvZGUiOiJSQyIsInBhaWRVcFRvIjoiMjAxOS0xMS0xNSJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDE5LTExLTE1In0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMTktMTEtMTUifSx7ImNvZGUiOiJSTSIsInBhaWRVcFRvIjoiMjAxOS0xMS0xNSJ9LHsiY29kZSI6IldTIiwicGFpZFVwVG8iOiIyMDE5LTExLTE1In0seyJjb2RlIjoiREIiLCJwYWlkVXBUbyI6IjIwMTktMTEtMTUifSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjAxOS0xMS0xNSJ9LHsiY29kZSI6IlJTVSIsInBhaWRVcFRvIjoiMjAxOS0xMS0xNSJ9XSwiaGFzaCI6IjEwOTM3ODQ5LzAiLCJncmFjZVBlcmlvZERheXMiOjAsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-SPTntL/IaWAVAEy9+t33a7M+7vL4om/tTegGFbyBciAcxBNjzd/GUbJdDh3iyrzLUbVfNFRkmbfJtBdt4srDnIbro8TQKTbh6h4wFTpXXtsfAi5N+QKqjCAviH+pLrMVQBlZlncWzRHqTvZB9Fl9Q7IKtGYo02F02PRkG1ewXFCkke6zoE5gy6bIGBGI93Tu/c7EFHrzgvgU+GHY4OzEvw0GxQ/8OAQe0jVdJxz2OKKkpzi+FbTHsW3Mcs+CVwvVjRPDCjrCUvaWu7YlAnsreuYT4KFMar6JkdxnvNSRgQvqrthjRWJnuaw/PV73YM7C+YUqdttUPYAF16XbvfUS2Q==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQAF8uc+YJOHHwOFcPzmbjcxNDuGoOUIP+2h1R75Lecswb7ru2LWWSUMtXVKQzChLNPn/72W0k+oI056tgiwuG7M49LXp4zQVlQnFmWU1wwGvVhq5R63Rpjx1zjGUhcXgayu7+9zMUW596Lbomsg8qVve6euqsrFicYkIIuUu4zYPndJwfe0YkS5nY72SHnNdbPhEnN8wcB2Kz+OIG0lih3yz5EqFhld03bGp222ZQCIghCTVL6QBNadGsiN/lWLl4JdR3lJkZzlpFdiHijoVRdWeSWqM4y0t23c92HXKrgppoSV18XMxrWVdoSM3nuMHwxGhFyde05OdDtLpCv+jlWf5REAHHA201pAU6bJSZINyHDUTB+Beo28rRXSwSh3OUIvYwKNVeoBY+KwOJ7WnuTCUq1meE6GkKc4D/cXmgpOyW/1SmBz3XjVIi/zprZ0zf3qH5mkphtg6ksjKgKjmx1cXfZAAX6wcDBNaCL+Ortep1Dh8xDUbqbBVNBL4jbiL3i3xsfNiyJgaZ5sX7i8tmStEpLbPwvHcByuf59qJhV/bZOl8KqJBETCDJcY6O2aqhTUy+9x93ThKs1GKrRPePrWPluud7ttlgtRveit/pcBrnQcXOl1rHq7ByB8CFAxNotRUYL9IF5n3wJOgkPojMy6jetQA5Ogc8Sm7RG6vg1yow==

 

有效期至 2019-11-16