如何使用php中的file_put_contents()函数检测完成状态?

7
在PHP中,我将使用file_put_contents($filename, $data);来编写(创建)文件。
这样做没问题,但是我想检测进程的完成事件。

目前,页面显示加载状态。
这是我目前了解它是否完成的方式。

我想用代码来检测。

可能是重复的..也许这个链接有用 https://dev59.com/2nzaa4cB1Zd3GeqPSJzb#21842519 - Zakynthos
3个回答

12

这是一个阻塞的 I/O 调用,因此当函数调用返回时,它才会完成。成功时返回已写入的字节数。


1
文件的大小(在之前或之后)可以通过调用 filesize() 函数来确定。 - AJ.
2
阅读 filesize() 的文档。它期望的是文件的路径,而不是文件的内容。http://us3.php.net/filesize - AJ.
哎呀,我应该从URL中获取(下载).. 但是"filesize()"不能用于URL.. ;( - Alvin
是的,是的,我很抱歉!请(大家!)友好地转到我的新帖子http://stackoverflow.com/q/6085524/753726 - Alvin
1
@Alvin:供以后参考,你可以编辑你的原始问题;不需要新建一个 :) 对于代码,请使用反引号(`)将代码括起来。 - Jonah
显示剩余4条评论

6

它会等待一切完成后再继续执行

因此,你可以使用类似以下的方法来确定它何时完成写入文件。

echo "The file's contents are now being written, please wait.";
file_put_contents($filename, $data);
echo "The file's contents have been written.";

3

首先从远程位置检索 Content-Length 头。您可以使用 get_headers 来完成这个任务。如下所示:

$headers = get_headers($url, 1);
echo "To download: " . $headers['Content-Length'] . " bytes.<br />";

这个方法总是有效吗?还是有时候Web应用程序或服务器会拒绝仅提供标题?另外,get_headers方法发送HEAD还是GET请求? - rzetterberg
我认为服务器不能拒绝发送某些头信息。从页面上看:“如果有人像我一样好奇,这个函数不会发送HEAD动词。相反,它发送一个GET。在我的情况下,这并不理想,因为我需要一种快速获取HTTP状态(200、404等)的方法。GET的问题在于,对于像我这样的情况,我不希望返回的数据带来太多开销。” - Ry-
好的,这意味着在使用get_headers时,它仍然必须下载文件,因为它是一个GET请求? - rzetterberg
1
@Ancide:不,它在获取到头部信息后取消。(通过“开销”这个词,我相信他指的是“剩余的头部信息”。) - Ry-
$headers['Content-Length'] 并不总是返回 "string"。有时它会返回 Array ( [0] => 0 [1] => 19342374 )。因此,我们必须加以处理。我处理的方式是:gettype($headers['Content-Length'])=="array"。 - Alvin
1
@minitech 我使用 HEAD 而不是 GET 进行了自定义套接字解决方案的测试,就像你说的一样,“overhead” == “其余标头”。只是想确保让大家知道 :) - rzetterberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接