【问题标题】:How to detect the finish with file_put_contents() in php?如何在 php 中使用 file_put_contents() 检测完成?
【发布时间】:2011-05-22 00:48:23
【问题描述】:

在 PHP 中,我将使用 file_put_contents($filename, $data); 编写(创建)文件
没关系,但我想检测进程的完成事件。

目前,页面处于加载状态。
这是目前我可以知道它是否完成的方式。

我想用代码检测。

【问题讨论】:

标签: php file detect


【解决方案1】:

这是一个阻塞的 I/O 调用,所以它在函数调用返回时结束。返回值是写入的字节数(成功时)。

【讨论】:

  • 好的,现在我看到 'file_put_contents()' 在完成时返回文件大小。另外,我可以检测“之前”的尺寸吗?我用过:'file_get_contents()'。如果是这样,我可以检测进程是否成功写入所有字节(或)。
  • 文件大小(之前或之后)可以通过调用filesize()来确定
  • 它不起作用..我使用 $file = file_get_contents($path) 然后 echo "Size to Write: ".filesize($file)
  • 阅读filesize() 的文档。它需要文件的路径,而不是文件的内容。 us3.php.net/filesize
  • @Alvin:仅供参考,您可以编辑原始问题;不需要新的 :) 对于代码,请在代码周围使用反引号 (`)。
【解决方案2】:

它会搁置一切直到结束

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

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 吗?
    • 呜呜呜呜!是的!!非常感谢微型技术! ;)
    • 我不认为服务器可以拒绝发送标头。从页面中:“如果有人像我一样好奇,这个函数不会发送 HEAD 动词。而是发送一个 GET。在我的情况下这并不理想,因为我需要一种快速的方法来获取 HTTP 状态(200 , 404 等)GET 的问题在于,对于我这样的情况,我不希望返回数据的所有开销。”
    • @Ancide:不,它在获得标题后取消。 (我相信,“开销”是指“其他标题”。)
    • @minitech 我使用 HEAD 而不是 GET 的自定义套接字解决方案对此进行了测试,就像您说的那样,“开销”==“其余标题”。只是想让每个人都知道:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    相关资源
    最近更新 更多