我正在使用laravel作为我的应用程序的后端,前端允许用户输入名字以及上传自己的照片。使用html5,他们可以在页面上裁剪照片,并将裁剪后的照片发送到我的控制器。
我收到以下错误:
ErrorException in testcontroller.php line 31:
Only variables should be passed by reference
这是我的观点,其中包含页面裁剪的表单和功能:
<form enctype="multipart/form-data" action="/testing" method="post" role="form">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label for="name">Name</label>
<input type="text" name="name" class="form-control" />
</div>
<div class="form-group">
<label for="name">Title</label>
<input type="text" name="title" class="form-control" />
</div>
<div class="form-group">
<label>Image</label>
<div class="dropzone" data-width="960" data-height="540" data-ajax="false" data-originalsave="true" style="width: 100%;">
<input type="file" name="thumb" required="required" />
</div>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
这是我的控制器,它将照片保存在本地,并最终使用服务器上文件的 url 更新客户记录:
public function test(Request $request)
{
$error = false;
$absolutedir = dirname(__FILE__);
$dir = '/tmp/';
$serverdir = $absolutedir.$dir;
$filename = array();
foreach($_FILES as $name => $value) {
$json = json_decode($_POST[$name.'_values']);
$tmp = explode(',',$json->data);
$imgdata = base64_decode($tmp[1]);
第 31 行 $extension = strtolower(end(explode('.',$json->name)));
$fname = substr($json->name,0,-(strlen($extension) + 1)).'.'.substr(sha1(time()),0,6).'.'.$extension;
$handle = fopen($serverdir.$fname,'w');
fwrite($handle, $imgdata);
fclose($handle);
$filename[] = $fname;
}
return view('upload');
}
我收到以下错误:
ErrorException in testcontroller.php line 31:
Only variables should be passed by reference
第 31 行 $extension = strtolower(end(explode('.',$json->name)));
原因是 end 方法需要引用现有数组。
因此,只需扩展代码即可。
$fileAry = explode('.',$json->name);
$extension = strtolower(end( $fileAry ));
此外,您可能还想查看用于获取文件扩展名的pathinfo方法。
这可能对您有所帮助:
只应通过引用传递变量
问题是,该端需要一个引用,因为它修改了数组的内部表示(即它使当前元素指针指向最后一个元素)。
爆炸('.', $file_name) 的结果不能转换为引用。这是PHP语言中的一个限制,可能出于简单原因而存在。
所以代替:
$extension = strtolower(end(explode('.',$json->name)));
尝试使用:
$temp = explode('.',$json->name);
$extension = strtolower(end($temp));