[TOC]
大文件上传问题
问题
最近在做视频部分的功能,在上传视频的时候,遇到了一些问题,有文件上传信息,但是某些信息获取不到,比如:
123456789 |
public function store($request){ if($request->has('videos')){ $videos = $request->file('videos'); foreach($videos as $file){ dd($file->getRealPath(),$file->getPathName()); } }} |
上面程序在打印getRealPath()
和getPathName()
,这两个方法时发现是空,正常情况下getRealPath()
方法会返回临时文件的路径,后来偶尔间发现,是需要修改php.ini的一些参数
方案
打开php.ini文件
12 |
post_max_size=128Mupload_max_size=128M |
post_max_size
这个参数,如果你上传的文件(我的文件是45M,默认是32M)超过默认的设置,它会报一个异常,但是没有错误信息,但顺着错误堆栈信息,发现有一个错误是:Illuminate\Foundation\Http\Middleware\ValidatePostSize
,根据字面意思就是在校验post请求的数据大小时,发生异常了,去google了发下是需要设置下post_max_size
即可。post_max_size
设置好之后,虽然没有报错,但是文件的一些文件的信息获取不到,比如临时文件路径什么的,这就头大了。后来偶然发现,还有一个upload_max_size
,设置完就OK了。
Put请求中有文件上传,获取不到相应数据的问题
背景
目前所有的项目都是基于Vue+Laravel前后端分离,有一个功能在添加的时候,有个封面图片,而编辑的时候,同样也可能会修改封面图片,而根据restfull api
的格式要求,一般来说更新操作一般是用的put
操作,但是在put
请求下如果有文件上传,则没办法获取到相关的文件上传信息
方案
实际上之前在做开发的时候遇到过,只是理解的没有那么深刻,那时候还没有做前后端分离,还是传统的在blade
模板里做相应的渲染输出,比如:
123456789101112131415 |
# routes/web.php Route::resource('user,'UserController') # resource/view/user/edit.blade.php ... <form action="{{route('user.update',['id'=>$id])}}" method="post"> <input type="hidden" name="_method" value="put"> </form> ... |
上面是之前做功能的时候,使用的处理方法,实际上同样的方法也适用于delete
方法。
这次在使用vue
前后端分离的时候,也同样遇到问题了,一时半会儿没想起来,在网上查了下,上面的解决办法也同样适合用vue
.
参考资料:
https://github.com/laravel/framework/issues/13457
关于proc_open的一些问题
背景
最近遇到两次关于proc_open
的错误,两次都是在composer的情况下遇到的,如果下
通过图片里的异常我们可以得到,是因为proc_open这个函数被禁用掉了
- 最近买了一台阿里云的主机,是低配版的,在上面安装
laravel
,使用composer install
安装某个扩展包的时候,抛出proc_open(): fork failed - Cannot allocate memory
这个异常。从字面理解,就是不能分配更多内存的意思,于是在linux下使用free -m
发现基本上内存被占完了。而且也没有设置swap内存
方案
1.如果proc_open
函数被禁用掉,则打开php.ini
文件,查找disable_functions
,把这个函数从禁用列表里去掉
2.如果是内存不足,则调整下swap内存
12345678910111213 |
free -m total used free shared buffers cachedMem: 2048 357 1690 0 0 237-/+ buffers/cache: 119 1928Swap: 0 0 0 //交换内存未设置To enable the swap you can use for example: //设置交换分区/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024/sbin/mkswap /var/swap.1/sbin/swapon /var/swap.1 |
注:
proc_open
函数是一个很敏感的函数,在使用的时候,一定要多注意。
proc_open
介绍:http://php.net/manual/zh/function.proc-open.php
Laravel设置redi为缓存,页面打开报错的处理办法
背景
新的项目在部署的时候,在.env
里设置了cache_driver=reids
,刷新页面报了一大堆错误,顺着堆栈找到了一段错误信息,MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
意思就是Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。
方案
1234567891011 |
# 两种方案# 方法一redis-cli host port 127.0.0.1> config set stop-writes-on-bgsave-error no # 方法二vi /usr/local/redis/conf/redis.confstop-writes-on-bgsave-error yes wq // 保存退出 #重启redis即可 |
Larave连接mssql乱码
背景
公司的一些老项目还是使用的mssql
数据库,目前使用的框架是laravel
,而服务器是centos
,环境搭建成功之后,出现乱码,
方案
其实linux
下php
连接mssql
,是通过pdo_sqlsrv
和pdo_dblib
,而pdo_dblib
则依赖一个freetds
的东西,而乱码的问题就是出在freetds
上。
1234567 |
# /etc/freetds.confvi /etc/freetds.conf [global] //注意,是这个节点 //默认情况下,这一行是注释的,而且版本号是一个其它数字,比如我的是4.2tds version = 8.0 |
网上的其它方法说要在[global]
段加一行client charset = UTF8
,如果上面还不行,就把这行加上试下,不过我的没有加,直接修改好了之后,乱码就解决了
原文地址:https://www.cnblogs.com/petewell/p/11584765.html