是否有人能够实现此功能?
http://php.net/manual/en/session.upload-progress.php
tl; dr是在POST一个包含文件的表单时,如果你包含一个输入" name"将属性设置为php.ini中session.upload_progress.name的值,然后PHP将使用有关上载状态的数据填充$ _SESSION。
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="123" />
<input type="file" name="file1" />
<input type="file" name="file2" />
<input type="submit" />
</form>
(不重要但显然这是你通常会给文件提供实际名称并将上传的文件从temp移动到真实目录的地方)
<?php
print_r($_FILES);
?>
在文件上传期间运行此单独的PHP文件以检查进度
<?php
$key = ini_get("session.upload_progress.prefix") . $_POST[ini_get("session.upload_progress.name")];
var_dump($_SESSION[$key]);
?>
我已尝试过这些脚本和php.ini设置中的每个可以变化的变体,无论$ _SESSION数组从未填充过任何上传数据。默认情况下调用Session_start()。我在v.5.4和5.6中都尝试过。我已经尝试了PHP文档中的注释中建议的所有内容,包括使用和不使用FastCGI运行。我一般都尝试过一切。
这很重要,因为我正在使用POST请求与Web服务器上的.php脚本进行通信的桌面应用程序,我没有使用浏览器,因此JS / HTML5解决方案不是图片的一部分。在PHP中编写自己的进度测量功能也是不可能的,因为处理文件上传的脚本(upload.php)实际上并没有运行,直到上传(到具有随机名称的临时目录)完成为止。在上传完成并且上传脚本运行之前,无法找出临时关联的实际文件,从而允许访问$ _FILES。请帮助,我尝试了每一个可能的方法。感谢。
答案 0 :(得分:0)
表单://看起来不错
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="123" />
<input type="file" name="file1" />
<input type="file" name="file2" />
<input type="submit" />
</form>
Upload.php //看起来还不错
<?php
print_r($_FILES);
?>
Session.php //在此推荐一些更改
<?php
session_start();//leave this out if you are session is starting automatically
$key = ini_get("session.upload_progress.prefix") ."123"; //123 value of hidden input
var_dump($_SESSION[$key]);
?>
主要的挑战是在你的表单html视图中,他们没有链接或调用session.php。 (我不喜欢名称session.php我有这部分我害怕它可能会篡改$ _SESSION scoper)。理想情况下,你可以(大多数人)使用JS / Ajax调用来查询Session.php来获得结果。在这种情况下,我建议:
表单:(记得在此之前导入jquery)
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="123" />
<input type="file" name="file1" />
<input type="file" name="file2" />
<input type="submit" />
</form>
<script>
$(document).ready(function(){
$('form').on('submit',function(){
$.get( "session.php", function( response ) {
console.log( response ); // server response-$_SESSION dump
});
})
})
</script>
<强> session.php文件:强>
<?php
session_start();//leave this out if you are session is starting automatically
$key = ini_get("session.upload_progress.prefix") ."123"; //123 value of hidden input
var_dump($_SESSION[$key]);//or echo $_SESSION[$key]["bytes_processed"]. I am not sure how the array would playout inside the returned JSON
?>