【问题标题】:PHP:: How to delete a file from server after is read. Unlink() is executed beforePHP:: 读取后如何从服务器中删除文件。 Unlink() 在之前执行
【发布时间】:2011-04-22 23:24:00
【问题描述】:

我正在尝试在第一次显示后从服务器中删除图片 (.jpg)。 但该文件在显示之前已被删除 (unlink();)。我已经尝试过 sleep() 但这只会延迟加载,并且在显示之前删除所有文件。

【问题讨论】:

  • 如果您发布相关代码,这很可能是一个简单的解决方法。如果没有看到您的代码,您可能不会得到任何(有用的)答案。

标签: php temporary-files unlink


【解决方案1】:

您可以使用 mod_rewrite 将 jpg 请求重定向到将图像加载到内存中的脚本,删除文件,然后提供图像。 IMO,这是最简单和最简单的解决方案。下面的不安全示例...

.htaccess 文件示例:

# Turn on URL rewriting
RewriteEngine On

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

index.php

<?php

$image_file = $_SERVER['PATH_INFO'];

// clean data, strip current/parent directory to block transversal, etc...

if (file_exists('images/' . $image_file))
{
    $image_data = file_get_contents('images/' . $image_file);

    // determine image mimetype using phps mimetype functions

    unlink('images/' . $image_file);

    header('Content-Type: image/jpeg');

    echo $image_data;
}

【讨论】:

  • 我不相信 OP 想在第一次查看后删除 all JPG 图像。此外,您的.htaccess 似乎与问题/答案完全无关?
  • @Tomalak,我认为 OP 想要一个一次性查看图像脚本。上面的代码只是一个例子,他需要修改它以反映正确的图像路径,添加 mimetype 检测等。它使用 htaccess 通过 php 脚本实质上代理请求。该脚本返回图像并将其删除(某些图像主机具有单一视图,如果您想与一个人共享图像并且不希望它成为互联网上的永久固定装置,它会很有用)。跨度>
  • 在他回来抱怨我们删除了他的所有照片之前,也许答案应该包括这一点作为警告:)
【解决方案2】:
  • 将图像内容从文件复制到内存中;
  • 删除图片文件;
  • 将原始内容从内存流式传输到输出。

恐怕我能做到的就是含糊不清了。

【讨论】:

    【解决方案3】:

    这是因为所有 PHP 在渲染输出之前都在堆栈中执行。您需要设置一个函数来标记文件以在下一页加载时删除。

    或者您可以设置一些 AJAX 以在文档加载后删除图片。

    【讨论】:

    • 输出在 PHP 执行期间呈现。这就是 PHP 脚本的作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多