dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
解决方案
ln -s /usr/local/opt/readline/lib/libreadline.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
解决方案
ln -s /usr/local/opt/readline/lib/libreadline.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
class PublicFunc{ public static function lock($name, $ex = 60) { $val = uniqid(); if ($redis->set($name, $val, 'NX', 'EX', $ex)) { register_shutdown_function(function () use ($name, $val) { PublicFunction::unlock($name, $val); }); } else { throw new \Exception('执行中,请稍等'); } } public static function unlock($name) {//释放锁需要先判断是否是自己持有的锁,如果是则释放,否则不释放,多不操作要求原子操作,所以需要lua脚本 static $releaseLuaScript = <<<LUA if redis.call("GET",KEYS[1])==ARGV[1] then return redis.call("DEL",KEYS[1]) else return 0 end LUA; return $redis->eval($releaseLuaScript, 1, $name, $val); } }
方向代理增加超时时间
location ~ /api {
proxy_pass http://127.0.0.1:8081;
proxy_read_timeout 3600;//反向代理读取超时时间,默认60秒
}
public static function getAgeFromBirthDay($birthday) { $bday = new \DateTime($birthday); // 你的出生日 $today = new \Datetime(date('Y-m-d')); $diff = $today->diff($bday); return $diff->y; }
header('Access-Control-Allow-Origin: *');//允许跨域域名 header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, OPTIONS, DELETE');//允许跨域方式 header('Access-Control-Allow-Headers: *');//允许header header('Access-Control-Expose-Headers: *');//某些header无法传递,须要指明header白名单(content-type 就在此列)
fetch 获取的 header 内容如果是中文(多子节),则会转译成 ISO-8859-1 编码格式,需要转编码转换
var str = “ç\u0088±æ\u0088\u0091ä¸\u00ADå\u009B½”; var utfstring =decodeURI(escape(str))//先编码再解码 //或者 utfstring =decodeURIComponent(escape(str))
decodeURIComponent 和 decodeURIComponent 区别具体看这里。encodeURI 自身无法产生能适用于HTTP GET 或 POST 请求的URI,例如对于 XMLHTTPRequests, 因为 "&", "+", 和 "=" 不会被编码,然而在 GET 和 POST 请求中它们是特殊字符。然而encodeURIComponent这个方法会对这些字符编码
参考
前后端分离的项目,前端大部分使用fetch调用接口,遇到下载的时候,服务器接口一般直接返回流文件(链接本身就是一个文件)
export const getExport = async (url, postData) => { let options = null if (postData) { options = _headerOptions('POST') options.headers['content-type'] = 'application/json' options.body = JSON.stringify(postData) } else { options = _headerOptions('GET') } let response = await fetch(config.apiHost + url, options) response.blob().then((blob) => { const a = window.document.createElement('a'); const downUrl = window.URL.createObjectURL(blob);// 获取 blob 本地文件连接 (blob 为纯二进制对象,不能够直接保存到磁盘上) const m = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(response.headers.get('Content-Disposition')); const filename = m[1].replace(/['"]/g, ''); // console.log(decodeURI(escape(filename[0]))) a.href = downUrl; a.download = filename; a.click(); window.URL.revokeObjectURL(downUrl); }); return []; }
curl 'http://xxxxxx' -F "theFile=/Users/xxxx/Downloads/1.jpg;filename=xxxx"
后台接收到的信息
var_dump($_FILE); /* array(1) { ["theFile"]=> array(6) { ["name"]=> string(7) "xxxx" ["tempName"]=> string(14) "/tmp/phpnk5HXI" ["tempResource"]=> array(0) { } ["type"]=> string(0) "" ["size"]=> int(36) ["error"]=> int(0) } } */
sudo apt-get install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install certbot python-certbot-nginx certbot certonly --webroot -w /xxx -d www.ivhong.com -d ivhong.com -w /xxxx -d www.ivhui.com -d ivhui.com --agree-tos --email xxxx@163.com --------------参数解释 : * certonly 只获取证书 * --webroot 以webroot插件去获得证书 * -w 需配合--webroot参数一起使用,用来指定网站根目录 * -d 指定域名 * --agree-tos 用意ACME用户协议(如果省略此项,则在命令执行过程中会询问是否同意) * --email 指定邮箱用来接收一些通知(如果省略此项,则在命令执行过程中会要求填写) * (如果有多个域名,则按照一个 -w /var/www/example 后接一个 -d example.com 的形式继续输入。)
nginx 配置:
listen 443 ssl; listen 80; server_name ivhui.com www.ivhui.com; index index.html index.htm index.php default.html default.htm default.php; root /home/ivhong/www/ivhui/web; # ssl on;//这里如果是on的话,http访问网址将会出错 ssl_certificate /etc/letsencrypt/live/www.ivhong.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.ivhong.com/privkey.pem; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on;
来源:https://blog.csdn.net/qq_35751770/article/details/78018613