中止fopen()PHP调用

时间:2014-05-04 20:42:16

标签: php apache amazon-web-services amazon-s3 fopen

我当前的项目涉及一个PHP脚本,它将文件上传到AWS S3,并且我一直在使用fopen()函数来执行此操作。但是,如果用户想要放弃上传,我该如何暂停fopen()功能?我已经尝试了exit()die()但他们只是在Apache中排队,直到fopen()完成意义,直到文件上传到S3后(可能是几分钟) )。我可以取消这个的唯一方法是关闭Apache,这显然不会在生产中飞行。

想法?任何帮助将不胜感激!

更新:以下是我上传的代码:

        // Upload a file.
        $result = $s3client->putObject(array(
            'ACL'       => 'public-read', // so the users can see the information in S3
            'Bucket'    => AWS_BUCKET,
            'Key'       => '/files/'.sha1($file_id).'.'.$file_ext,
            'Body'      => fopen($file, 'r+')
            )
        );

2 个答案:

答案 0 :(得分:1)

尝试fclose

$handle = fopen('somefile.txt', 'r');
fclose($handle);

答案 1 :(得分:1)

你不能。

将文件上传到PHP时,只有在整个上传完成后才会启动PHP脚本。这由您的网络服务器(Apache)处理,该服务器通过上传的文件获取POST请求。一旦Web服务器收到整个请求(包括上传的文件),apache就会启动PHP并将请求(以及上传的文件)传递给它。

因此,一旦运行PHP代码的第一行,就意味着整个文件已经上传。因此,试图放弃在PHP代码中上传是太晚了。

您可以做的是以块的形式发送文件。但它需要一些客户端脚本来实现这一目标。 Here是一个你可以使用的插件。

或者另一种直截了当的做法是在上一页上添加一个额外的按钮(用于选择应上传的文件,并开始上传)。假设在上传过程中仍然显示此页面,您可以将此额外按钮转到任何其他页面,从而使浏览器放弃上传到Web服务器。