PHP:上传时读取文件

PHP:上传时读取文件,php,session,file-upload,upload,progress,Php,Session,File Upload,Upload,Progress,我正在向一个用PHP编写的web应用程序添加一个文件上传API。我可以使用获得下载进度。我使用的代码是: $key = ini_get("session.upload_progress.prefix") . $token; if (!isset($_SESSION[$key])) { return -1; } return round(($_SESSION[$key]['bytes_processed'] / $_SESSION[$key]['content_length']) * 1

我正在向一个用PHP编写的web应用程序添加一个文件上传API。我可以使用获得下载进度。我使用的代码是:

$key = ini_get("session.upload_progress.prefix") . $token;
if (!isset($_SESSION[$key])) {
    return -1;
}

return round(($_SESSION[$key]['bytes_processed'] / $_SESSION[$key]['content_length']) * 100, 1);
这很有效。$\u会话数组包含有关使用给定令牌上载的文件的信息。其中一个键是“tmp_name”,但在我的测试中,在上传完成之前,它从未填充值。这向我建议,正在进行的上载只存在于内存中,并且在上载完成时写入/tmp(或上载目录配置为的任何位置)

那么我的问题是:上传过程中有没有办法访问文件?我现在只期望CSV,我想在上传完成之前阅读第一行(列标题)


或者,欢迎其他语言/库建议,但不推荐依赖html5(无回退)、flash、silverlight或java

PHP的上传机制非常愚蠢。是的,它在上传过程中将文件缓冲在ram中,而不是将其流式传输到磁盘。这就是为什么PHP的
内存限制
必须大于
upload\u max\u size
——因为文件在上传过程中在ram中得到缓冲。这是有道理的(我同意,我讨厌PHP文件上传)。我认为,内存访问在最好的情况下是不安全的,在最坏的情况下是不允许的。是的,这是可行的,例如通过/proc访问进程映像,但您很难准确地确定上载数据在进程映像中的具体位置。因此,这是不可能的。我确实找到了可行的方法,但是我仍然需要一个后备方案来帮助那些使用旧浏览器的人。