gpt4 book ai didi

session - Laravel 5.1 使用 session.upload_progress

转载 作者:行者123 更新时间:2023-12-04 19:02:51 25 4
gpt4 key购买 nike

我想用我的 php 脚本的状态构建一个进度条。我已经读过它可以通过使用 session.upload_progress 来完成。

我正在使用 laravel Homestead 并且在 php.ini 中所有 requerements 都处于事件状态。

这是我的 html

{!! Form::open(['route' => 'gebruikers_upload', 'class' => 'form-horizontal import', 'enctype' => 'multipart/form-data', 'target' => 'hidden_iframe']) !!}
<input type="hidden" value="myForm" name="{{ini_get("session.upload_progress.name")}}">
<input type="file" name="file" id="the-file"/>
<button class="btn btn-sm btn-info btn_import" type="submit">Importeer</button>
<button class="btn btn-sm btn-danger" type="button">Cancel</button>
{!! Form::close() !!}
{{--End Form--}}

<iframe id="hidden_iframe" name="hidden_iframe" src="about:blank"></iframe>

<div class="progress">
<div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="25"
aria-valuemin="0" aria-valuemax="100" style="width: 45%">
<span class="">45% Complete</span>
</div>
</div>

提交时路由是:
Route::get('dashboard/gebruikers/upload_status', 'UserController@uploadStatus');

在方法 uploadStatus 的 Controller UserController 中,我有这个
public function uploadStatus(Request $request)
{
session_start();

echo '<pre>';
print_r($_SESSION);
echo '</pre>';
}

但它总是显示一个空数组。当我使用此代码时
    $data = $request->session()->all();

echo '<pre>';
print_r($data);
echo '</pre>';

它返回这个
Array
(
[_token] => jFkleI9kIZJiZP3pEARx0hDrHtsynPmuGkse97nT
[_previous] => Array
(
[url] => http://localhost.dev:8000/dashboard/gebruikers/upload_status
)

[flash] => Array
(
[old] => Array
(
)

[new] => Array
(
)

)

[login_82e5d2c56bdd0811318f0cf078b78bfc] => 1
)

但是没有关于进度更新的信息。

我怎么能在 Laravel 5.1 中使用它

最佳答案

我在尝试解决类似问题时遇到了这个问题:在客户端更新一个长时间运行的进程的进度。

问题归结为:当您向服务器发出请求时, session 值不会写入 session 存储,直到响应返回给客户端。基本上,该过程如下所示:

        CLIENT         |        SERVER
| .
send request ----|----> start processing
| .
| .
| .
| finish processing
| write session values
receive response <----|---- return response

你在做什么是这样的:
        CLIENT         |        SERVER
| .
send request ----|----> start processing
| .
| (update session)
| .
| (update session)
| .
| (update session)
| .
| finish processing
| write session values
receive response <----|---- return response

但是那些 (update session)服务器上的调用被忽略——它们实际上并没有被写入 session 存储。因此,当客户端调用您的路由以请求进度的 session 值时,它什么也没有得到。

解决方案很简单:将进度值写入其他地方。很久以前,我通过使用 file_put_contents 将值写入文件来解决这个问题。 .如果我今天这样做,我可能会看 redis服务器以提高效率。

但是,有一点需要注意:如果您选择将值写入其他地方,则需要通过某种方式将值与 session 相关联。否则,其他用户将覆盖您的值(value)。对于一个简单的项目,我可能会使用用户的 ID 值(假设他们一次只处理一件事)。

关于session - Laravel 5.1 使用 session.upload_progress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33304666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com