通过只读取文件的3个字节来检查PHP上传文件在临时文件夹之前的文件类型(FLV)

Uma*_*han 15 php flv file-upload

FLV文件的前3个字节是签名"FLV".现在我的问题:

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

方案是我不希望上传完整的文件(在临时文件夹中),然后检查文件是否是FLV,我只想读取上传流的前几个字节,如果它不是"FLV"那么返回/退出.

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

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

此处还有一个类似的问题: 如何在php中逐字节上传文件

但答案不符合我的要求/问题.

任何想法都非常感谢!

谢谢

Bur*_*lid 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")];

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