Php 如何正确增加每个文件夹内有2个文件的新文件夹的数量

Php 如何正确增加每个文件夹内有2个文件的新文件夹的数量,php,laravel,file-upload,logic,Php,Laravel,File Upload,Logic,我希望有这样的逻辑: 用户必须上传至少2个不同的文件。他可以上传2个以上。但下一对文件必须保存在另一个文件夹中。我不知道会上传多少文件。但目标是将每对文件划分到不同的文件夹中 我的代码工作正常,但它创建了文件夹#1,在其中保存了2个文件。然后创建文件夹#2并将所有后续文件保存在此文件夹中。但在文件夹#2中必须只有2个文件(如在文件夹#1中),下一对文件必须保存在文件夹#3中,依此类推,但不会创建下一个文件夹。为什么会这样?我的代码: class UploadController extends

我希望有这样的逻辑:

用户必须上传至少2个不同的文件。他可以上传2个以上。但下一对文件必须保存在另一个文件夹中。我不知道会上传多少文件。但目标是将每对文件划分到不同的文件夹中

我的代码工作正常,但它创建了文件夹#1,在其中保存了2个文件。然后创建文件夹#2并将所有后续文件保存在此文件夹中。但在文件夹#2中必须只有2个文件(如在文件夹#1中),下一对文件必须保存在文件夹#3中,依此类推,但不会创建下一个文件夹。为什么会这样?我的代码:

class UploadController extends Controller
{
private $folderId;
public function __construct()
{
    $this->folderId = 1;
}

/**
 * File Upload.
 *
 * @param  Request  $request
 * @return
 */
public function store(Request $request)
{
    $path = 'public/' . $this->folderId;
    $files = Storage::files($path);
    $filesSum = count($files);
    if ($filesSum <= 1) {
        $request->file('file')->storeAs($path, $request->file('file')->getClientOriginalName());
    } else {       
        $path = 'public/' . ($this->folderId + 1) ;
        $request->file('file')->storeAs($path, $request->file('file')->getClientOriginalName());
    }
    return redirect()->back()->with('message', 'File has been uploaded!');

}
类UploadController扩展控制器
{
私人$folderId;
公共函数构造()
{
$this->folderId=1;
}
/**
*文件上传。
*
*@param Request$Request
*@返回
*/
公共函数存储(请求$Request)
{
$path='public/。$this->folderId;
$files=存储::文件($path);
$filesSum=count($files);
如果($filesum file('file')->storeAs($path,$request->file('file')->getClientOriginalName());
}否则{
$path='public/。($this->folderId+1);
$request->file('file')->storeAs($path,$request->file('file')->getClientOriginalName());
}
return redirect()->back()->带有('message','File has upload!');
}

}

代码的问题是,如果文件夹“1”中的文件计数大于1,则它总是上载到文件夹“2”和
folderId
中,在上载更多文件时永远不会增加。您需要检查上载的文件以确定
folderId
。将代码修改为

/**
 * File Upload.
 *
 * @param  Request  $request
 * @return
 */
public function store(Request $request)
{
    $uploaded_files = array_filter(Storage::allFiles('public'), function($file){
        // ignore the .gitgnore from the upoloaded list. You can improve this.
        return strpos($file, '.gitignore') === false;
    });

    $uploaded_files_count = count($uploaded_files);
    // intdiv() is supported from php7
    $folderId = intdiv($uploaded_files_count, 2) + 1;

    $path = 'public/' . $folderId;
    $files = Storage::files($path);
    $filesSum = count($files);

    if ($filesSum <= 1) {
        $request->file('file')->storeAs($path, $request->file('file')->getClientOriginalName());
    } else {
        $path = 'public/' . ($folderId + 1) ;
        $request->file('file')->storeAs($path, $request->file('file')->getClientOriginalName());
    }
    return redirect()->back()->with('message', 'File has been uploaded!');
}
/**
*文件上传。
*
*@param Request$Request
*@返回
*/
公共函数存储(请求$Request)
{
$uploaded_files=数组_过滤器(存储::所有文件('public'),函数($file){
//忽略upoloaded列表中的.gitnore。您可以对此进行改进。
返回strpos($file,'.gitignore')==false;
});
$Upload_files_count=计数($Upload_files);
//php7支持intdiv()
$folderId=intdiv($upload\u files\u count,2)+1;
$path='public/'。$folderId;
$files=存储::文件($path);
$filesSum=count($files);
如果($filesum file('file')->storeAs($path,$request->file('file')->getClientOriginalName());
}否则{
$path='public/'。($folderId+1);
$request->file('file')->storeAs($path,$request->file('file')->getClientOriginalName());
}
return redirect()->back()->带有('message','File has upload!');
}

为什么要向下投票?在每个请求中,您发送了多少个文件?对于后续调用,您似乎没有增加
$this->folderId
。您每次都添加1到1。如果您将
$this->folderId+1
更改为
+$this->folderId
,是否有效?用户在每个请求中发送1个文件。++$this->folderId这不是吗它还创建了第一个文件夹,放入2个文件。然后创建了第二个文件夹,放入2个文件,并继续将下一个文件放入文件夹#2银行,Iljas,这完全正确!!:)请向我投票,获得你的答案!