Laravel 5.1 Uploading&保存从表单

时间:2016-03-15 22:35:31

标签: php mysql laravel laravel-5.1

我使用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>

这是我的控制器,它在本地保存照片,并最终使用我服务器上文件的网址更新客户记录:

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]);

LINE 31 $ extension = strtolower(结束(爆炸('。',$ json-&gt;名称)));

            $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
  

LINE 31 $ extension =   用strtolower(端(爆炸(,$ json-&GT '';名称)));

2 个答案:

答案 0 :(得分:2)

原因是因为end方法需要引用现有数组。

所以只需扩展代码。

$fileAry = explode('.',$json->name);
$extension = strtolower(end( $fileAry ));

另外,您可能需要查看pathinfo方法来获取文件扩展名。

答案 1 :(得分:0)

这可能会对你有所帮助:

Only variables should be passed by reference

  

问题是,该结束需要引用,因为它修改了数组的内部表示(即它使当前元素指针指向最后一个元素)。

     

爆炸('。',$ file_name)的结果无法转换为引用。这是PHP语言中的限制,可能出于简单原因而存在。

所以而不是:

$extension = strtolower(end(explode('.',$json->name)));

尝试使用:

$temp = explode('.',$json->name);
$extension = strtolower(end($temp));