WRITING LOG · 03

技术博客

记录技术实践、问题排查和持续成长,把每一次解决问题的过程留下来。

WORKSPACE

文章阅读

上传文件时nginx网络状态码499无响应
2022-08-31
今天测试了下文件上传,主要是因为文件需要加密后放到文件储存服务上。结果在测试的我写的接口时候总是无响应,排查代码错误日志没任何信息,只有nginx日志有个状态码499。上网查了一圈都叫我改php-fpm和nginx配置,我查了php和nginx配置:上传文件大小限制没问题,等待请求响应时间没问题,保持http会话问题。最后发现是前端js请求头axios设置了5秒的timeout请求超时。cao!幸好前后端都是我在写,不然又不知道要跟前端拉扯几个回合。
改动配置如下:
//.................. 其他代码 ...........................
import axios from 'axios';
// axios 请求超时配置 原本为5000毫秒改为30000,即30秒
axios.defaults.timeout = 30000;
//.................. 其他代码 ...........................
关于Linux终端vim鼠标选中文字会变成可视模式(views)的问题
2022-08-31
有时候想鼠标复制下vim打开的文件,结果发现鼠标选中文本时会变成可视模式无法右键复制。查了下资料发现其实在vim命令模式下输入:set mouse-=a回车就可以了。想要永久有效就改下vim配置文件/usr/share/vim/vim81/defaults.vim
if has('mouse')
 #把set mouse=a 改成了 -=a
 set mouse-=a
endif
让php支持除了.php以外的自定义后缀文件
2022-08-26
有时候为了项目安全不想让访问者试出index.php想要隐藏.php后缀改为其他格式,比如改为.myphp .asp .do。当然主流php框架比如laravel、thinkphp、CI等都支持单入口模式,只开放public/index.php。那目前要做的一步就是把index.php也改了。操作如下:
先改php-fpm下面的的配置,比如我的php-fpm项目配置目录是/etc/php-fpm/php-fpm.d/www.conf。找到;security.limit_extensions这行,去掉前面的;改为
security.limit_extensions = .myphp .asp .do
然后重启php-fpm,centos7 下面可以用命令 service php-fpm restart。
找到nginx对应的项目配置,比如我的nginx配置是/etc/nginx/conf.d/test.conf,改成这样:
  #省略的其他配置代码........
  location / {
    root   /你的项目根目录;
    index  myphp.do;
    if ( -f $request_filename) {
      break;
    }
    if ( !-e $request_filename) {
      rewrite ^/(.*)$ /myphp.do?s=/$1 last;
      break;
    }
  }
  location ~* \.do$ {
    root  /你的项目目录;
    fastcgi_index  myphp.do;
    fastcgi_pass  127.0.0.1:9000;
    include      fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  SCRIPT_NAME    $fastcgi_script_name;
  }
php解析mp3音乐专辑信息
2022-08-25
//解析mp3音乐文件额外信息(歌曲名/歌手/专辑名称等)
function parse_mp3($file_name) { 
  $info_struct = [
    "song_name"  => [3, 33, 'trim'],
    "artist_name" => [33, 63, 'trim'],
    "album_name"  => [63, 93, 'trim'],
    "year"  => [93, 97, 'trim'],
    "comment" => [97, 126, 'trim'],
    "genre"  => [127, 128, 'genre_name']
  ];
  $fp = fopen($file_name, "rb") or die("文件打开失败!");
  fseek($fp, -128, SEEK_END);
  $mp3_info = [];
  $tag = fread($fp, 3);
  if ($tag == 'TAG') {
    foreach ($info_struct as $key => $arr) {
      fseek($fp, $arr[0] - 128, SEEK_END);
      $mp3_info[$key] = call_user_func($arr[2], fread($fp, $arr[1] - $arr[0]));
    }
  }
  fclose($fp);
  return $mp3_info;
function genre_name($genre) {
  $genre = ord($genre);
  $genre_arr = [
    '8' => 'Jazz',
    '10' => 'New Age ',
    '11' => 'Oldies ',
    '12' => 'Other',
    '13' => 'Pop',
    '14' => 'R&B',
    '15' => 'Rap',
    '16' => 'Reggae',
    '17' => 'Rock'
  ];
  if (array_key_exists($genre, $genre_arr)) {
    return $genre_arr[$genre];
  }else{
    return "Unknow";
  }
}
php laravel文件上传时接收文件大小为0
2022-08-16
业务需要写了个文件上传,使用的laravel框架上传文件。使用laravel官方提供的request()方法调用校验文件isValid()无论如何都无法通过校验。用dd($_FILES)打印出结果发现文件size为0。
检查了下上传的文件有5M多不可能为0,但是也没报错。怀疑是文件大小超出了php.ini限制的大小,结果确实是这样于是改了下配置。
upload_max_filesize=100M
post_max_size=100M
改完重启php-fpm和nginx
搞定!
解决Vue烦人的数据双向绑定赋值问题
2022-08-09
有时候需要vue的v-model绑定数据,但是一旦绑定的变量需要赋值重新使用的时候又不需要双向绑定。这时候就需要用到浅拷贝了,这样写就可以了:
Object.assign({},你需要去掉原型链属性的变量)