Laravel踩坑汇总(一)

[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
  1. post_max_size这个参数,如果你上传的文件(我的文件是45M,默认是32M)超过默认的设置,它会报一个异常,但是没有错误信息,但顺着错误堆栈信息,发现有一个错误是:Illuminate\Foundation\Http\Middleware\ValidatePostSize,根据字面意思就是在校验post请求的数据大小时,发生异常了,去google了发下是需要设置下post_max_size即可。
  2. 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这个函数被禁用掉了

  1. 最近买了一台阿里云的主机,是低配版的,在上面安装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,环境搭建成功之后,出现乱码,

方案

其实linuxphp连接mssql,是通过pdo_sqlsrvpdo_dblib,而pdo_dblib则依赖一个freetds的东西,而乱码的问题就是出在freetds上。

1234567
# /etc/freetds.confvi /etc/freetds.conf

[global] //注意,是这个节点

//默认情况下,这一行是注释的,而且版本号是一个其它数字,比如我的是4.2tds version = 8.0

网上的其它方法说要在[global]段加一行client charset = UTF8,如果上面还不行,就把这行加上试下,不过我的没有加,直接修改好了之后,乱码就解决了

原文:大专栏  Laravel踩坑汇总(一)

原文地址:https://www.cnblogs.com/petewell/p/11584765.html

时间: 2024-08-29 17:23:44

Laravel踩坑汇总(一)的相关文章

Laravel踩坑笔记——illuminate/html被抛弃

起因 在使用如下代码的时候发生报错 {!! Form::open() !!} 错误信息 [Symfony\Component\Debug\Exception\FatalErrorException] Call to undefined method Illuminate\Foundation\Application::bindShared() 原因 在Stack Overflow找到相关问题(Call to undefined method Illuminate\Foundation\Appli

Laravel踩坑小记

背景:使用laravel项目的命令行惊现错误php artisan companyCustomerStatisticsCommand In Connection.php line 664: could not find driver (SQL: select max(`customer_id`) as aggregate from `statistic_customer`) 排查:1.浏览器直接访问项目,数据库均能正常访问2.浏览器查看phpinfo(), 获取到php版本信息 PHP Vers

laravel踩坑记:空字符转null

场景:手头的项目需要对外提供API服务,需要对请求数据进行签名校验.提交接口的数据会有''空字符值存在,laravel的Illuminate\Foundation\Http\Request接收到参数后,会将空字符强制转换为NULL,导致签名校验通不过. 经过一番努力,找到幕后黑手.Illuminate/Foundation/Http组件中有定义这个中间件.vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/Conv

laravel 踩坑 env,config

正常情况: env 方法 可以获取 .env 文件的值 config 可以获取 config 文件夹下 指定配置的值 非正常情况: 当我们执行了 php artisan config:cache 之后 在bootstrap/cache 文件夹下 会生成一个 config.php 文件 这个文件包含了 config 文件夹下的所有文件内容,并以文件名作为键值 同时把 .env 文件 根据特殊的解析方式,解析到 config.php 最终结果: env 无法获取到 .env 文件的值 config

最近踩坑汇总

1.本地上传文件报错 原因:php.ini   upload_max_filesize=2M,而我上传的文件5.7M,此时代码会直接报错,我以为是代码问题,找了好半天才想到ini,真是不应该 2.变量赋值时,本地ok,linux环境为空 原因:在对对象赋值时,$model->$attr[$i] 这种方式本地不报错,linux环境会报错.我的检讨是:我反思不到本地ok而linux为空的原因,具体问题具体分析,我盲目的去找同事分析问题不可取,我得定位问题再去找同事 原文地址:https://www.

微信小程序开发问题踩坑整理,web-view、openID、小程序支付等汇总

微信小程序开发过程中遇到的问题踩坑整理,内容包括web-view.openID.小程序支付.网络请求等等一系列问题汇总,希望对大家能有一定帮助和启发. 内容如下: 关于小程序web-view bindmessage 真机不触发的问题 小程序iOS访问服务器访问不上,但android没有问题 关于ssl证书加密后小程序访问出错问题 微信拨打电话数据调用问题,如何一键拨号 后台php调用微信小程序接口获取openid,返回的是null 小程序图片显示问题,开发者工具显示,手机预览不显示 微信小程序支

Android开发在路上:少去踩坑,多走捷径【转】

作者:gzjay,腾讯MIG无线产品部 高级工程师 最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享. 1.目前, Android APP开发完成后,通常需要在哪些机型上进行测试? 2.目前, 开发Android APP时,需要考虑的分辨率有哪些? 这两个问题可以合起来回答的. http://developer.android.com/about/dashboards/index.html 源自Google Play的数据,每月都会进行upd

(转载)Android开发在路上:少去踩坑,多走捷径

1. 目前, Android APP开发完成后,通常需要在哪些机型上进行测试? 2. 目前, 开发Android APP时,需要考虑的分辨率有哪些? 这两个问题可以合起来回答的. http://developer.android.com/about/dashboards/index.html 源自Google Play的数据,每月都会进行update,可以及时了解Android版本比例趋势. 屏幕密度数据 OpenGL ES版本 也可以参考一下国内一个第三方数据:http://www.umind

【转】Android开发在路上:少去踩坑,多走捷径

本文是我订阅"腾讯大讲堂"公众帐号时,他们推送的一篇文章,但在腾讯大讲堂官网上我并没有找到这篇文章,不过其它专门"爬"公众号文章的网站倒是有.我觉得写的很不错.就转载出来,如有版权问题请email告知.   你可以通过扫描下面的二维码来关注"腾讯大讲堂"     ----------------------------------------- 我是可恶的分隔线 -----------------------------------------