实时读取并回显上传文件的文件大小
问题:
如何实时读取并回显正在写入服务器的上传文件的文件大小,而不阻塞服务器和客户端?
解决方案:
服务器(例如PHP):
- data.php:处理文件上传并将其保存到文件系统。
<code class="php"><?php $filename = $_SERVER["HTTP_X_FILENAME"]; $input = fopen("php://input", "rb"); $file = fopen($filename, "wb"); stream_copy_to_stream($input, $file); fclose($input); fclose($file); echo "upload of " . $filename . " successful"; ?></code>
- stream.php: 监控文件大小并通过服务器发送事件 (SSE) 将更新回显给客户端。
<code class="php"><?php header("Content-Type: text/event-stream"); header("Cache-Control: no-cache"); header("Connection: keep-alive"); $filename = $_GET["filename"]; $filesize = $_GET["filesize"]; clearstatcache(true, $filename); $data = filesize($filename); while ($data < $filesize) { sendMessage($data); clearstatcache(true, $filename); $data = filesize($filename); usleep(20000); } function sendMessage($data) { echo "data: $data\n\n"; flush(); } ?></code>
客户端(例如 JavaScript):
- 处理文件上传和进度:
<code class="javascript">const handleFile = (event) => { const [file] = input.files; const headers = new Headers(); headers.append("x-filename", file.name); const request = new Request("data.php", { method: "POST", headers: headers, body: file, }); fetch(request); startSSE(file.name, file.size); };</code>
- 初始化 SSE 并更新进度:
<code class="javascript">function startSSE(filename, filesize) { const source = new EventSource(`stream.php?filename=${filename}&filesize=${filesize}`); source.addEventListener("message", (e) => { const data = parseInt(e.data); progress.value = data; }); }</code>
安全注意事项:
- 实施适当的清理和验证以防止文件上传漏洞。
- 限制对敏感文件或信息的访问。
以上是如何实时监控和回显上传文件的文件大小,同时防止服务器和客户端阻塞?的详细内容。更多信息请关注PHP中文网其他相关文章!

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3汉化版
中文版,非常好用

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器