终止fopen() PHP调用


aborting an fopen() PHP call

我目前的项目涉及一个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+')
            )
        );

你不能。

上传文件到PHP时,PHP脚本只有在整个上传完成后才会启动。这是由您的web服务器(Apache)处理,它获得POST请求与上传的文件。一旦web服务器接收到整个请求(包括上传的文件),apache启动PHP并将请求(和上传的文件)传递给它。

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

你能做的就是以块的形式发送文件。但是这需要一些客户端脚本来完成。这是一个你可以使用的插件。

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

Try fclose

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