我正在使用Laravel 4,并且在我允许用户添加附件的电子邮件表单上,当我尝试提交超出php.ini中设置post_max_size的文件时,我收到令牌不匹配错误。我把这些行放在csrf过滤器中以尝试调试:
Log::debug(Session::token());
Log::debug(print_r($_POST, true));
Log::debug(Input::get('_token'));
Log::debug(Session::token() != Input::get('_token'));
可以预见的是,$_POST 是空的,因此会话令牌总是与 null 进行比较。但是有没有办法优雅地让用户知道文件太大而不是抛出此错误?
我也在使用javascript验证器,但我不想仅仅依靠javascript来避免这个错误被抛出。
我意识到这是一个老问题,但我遇到了它,我真的找不到任何解释这个问题的解决方案。所以,我想我会发布我的解决方案。
我正在使用Laravel 4.1,在应用程序/过滤器中.php我将Route::filter('csrf'. function()更改为:
Route::filter('csrf', function()
{
if (Session::token() != Input::get('_token'))
{
if (empty($_POST)) {
$post_size = trim(ini_get('post_max_size'));
$post_size = substr($post_size, 0, -1);
$post_size = ($post_size * 1024) * 1024;
if ($post_size < Request::header('Content-Length')) {
$validator = Validator::make(Input::all(), []);
$messages = $validator->errors();
$messages->add('file size', 'Files Cannot Exceed ' . ini_get('upload_max_filesize'));
return Redirect::back()->withErrors($messages);
}
}
throw new IlluminateSessionTokenMismatchException;
}
});
显然,除了过大的图像之外,其他事情都可能导致内容长度溢出,但这不太可能,所以我认为这将是一个合理的风险。
检查下面的此链接,显然问题是由超过最大上传大小引起的。解决