15

FLV 文件的前 3 个字节是签名“FLV”。现在我的问题:

PHP 中是否有可能处理文件上传,以便我们可以挂钩到上传文件的输入流并检查前 3 个字节?

场景是我不想上传完整的文件(在临时文件夹中)然后检查文件是否为 FLV,我只想读取上传流的前几个字节,如果它不是“FLV”那么返回/退出。

该文件需要通过基于 HTML 的表单上传。不能依赖 javascript、flash 上传器或任何客户端验证解决方法,即需要一个纯 PHP 的解决方案。

我已经知道 PHP 不会将控制权交给我们的脚本,直到它完成将文件上传到临时文件夹并填充全局变量$_POST $_GET $_FILES等。

这里也有一个类似的问题: How to upload a file byte by byte in php

但答案不满足我的要求/问题。

任何想法都非常感谢!

谢谢

4

2 回答 2

9

首先,设置session.upload_progress.enabled你的php.ini.

然后,用于session.upload_progress跟踪已上传的字节数。达到最低阈值后,检查正在上传的临时文件,它将在$_SESSION[unique_key]['files'][0]['tmp_name']. 如果文件不匹配,设置$_SESSION[unique_key]["cancel_upload"]TRUE,文件将被拒绝。

得到unique_key

ini_get("session.upload_progress.prefix") . $_POST[ini_get("session.upload_progress.name")];

如果上述方法不起作用(我还没有测试过),那么您唯一的办法就是为 PHP 创建自己的自定义处理程序,或者作为 Apache 模块(或者更好的是,作为自定义 CGI 应用程序)。在那里你可以做你的过滤。

于 2013-07-11T09:52:15.363 回答
3

@burhan-khalid 在上面提供了更新和正确的答案。

简短的回答是没有你的限制。

在将文件上传到服务器之前,您无法使用 PHP 访问该文件。上传后您可以阅读它,但之前不能阅读,至少在没有某种类型的客户端软件允许您将其流式传输到 PHP 而不是正常的表单提交时。

于 2013-07-03T12:33:31.367 回答