PHP:: Как удалить файл с сервера после чтения. Unlink() выполняется до

#php #temporary-files #unlink

#php #временные-файлы #разблокируйте

Вопрос:

Я пытаюсь удалить картинку (.jpg) с сервера после первого показа. Но файл удален (unlink();) до показа. Я уже пробовал со sleep (), но это только задерживает загрузку, и в конце концов файл удаляется до показа.

Комментарии:

1. Если вы опубликуете свой соответствующий код, это, скорее всего, легко исправить. Не видя свой код, вы, вероятно, не получите никаких (полезных) ответов.

Ответ №1:

Вы могли бы использовать mod_rewrite для перенаправления запросов jpg на скрипт, который загружает изображение в память, удаляет файл, затем обслуживает изображение. ИМО, это самое простое решение. Небезопасный пример ниже…

Пример .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;
}
  

Комментарии:

1. Я не уверен, что OP хочет удалить все изображения JPG после первого просмотра. Кроме того, ваш .htaccess кажется совершенно не связанным с вопросом / ответом?

2. @Tomalak, я предположил, что OP хочет сценарии для одноразового просмотра изображений. Приведенный выше код — это только пример, ему нужно было бы изменить его, чтобы отразить правильный путь к изображениям, добавить обнаружение mimetype и т.д. Он использует htaccess, по сути, для прокси-запросов через php-скрипт. Скрипт возвращает изображение и удаляет его (некоторые хосты изображений имеют режим одиночного просмотра, это полезно, если вы хотите поделиться изображением с одним человеком и не хотите, чтобы оно постоянно размещалось в Интернете).

3. Возможно, ответ должен включать это в качестве предостережения, прежде чем он вернется с жалобой на то, что мы удалили все его фотографии 🙂

Ответ №2:

  • Скопируйте содержимое изображения из файла в память;
  • Удалите файл изображения;
  • Поток исходного содержимого из памяти в вывод.

Боюсь, лучшее, что я могу сделать с неопределенностью.

Ответ №3:

Это потому, что весь PHP выполняется в стеке до рендеринга выходных данных. Вам нужно будет настроить функцию, чтобы помечать файл для удаления при следующей загрузке страницы.

ИЛИ вы можете настроить некоторый AJAX для удаления изображения после загрузки документа.

Комментарии:

1. Вывод выводится во время выполнения PHP. Это то, что делают PHP-скрипты.