Создайте временный файл и автоматический удаленный

Для синхронизации окраски синтаксиса, вероятно, нужна корректировка. Я нашел в определенных контекстах, что должен изменить его.

синхронизация Синтаксиса (": помогите syn-синхронизации"), средства управления, как энергия отслеживает и обновляет свой синтаксический анализ кода для окраски, так, чтобы это могло начать тянуть где угодно в файле.

значения по умолчанию не всегда работают на меня, поэтому иногда я выхожу

:syn sync fromstart

, я предлагаю прочитать документацию под

:help syn-sync

или просто проверяю

:help syntax

и нахожу раздел по синхронизации.

для создания обоснованного решения среди четырех доступных основных опций. Я поддерживаю отображения к функциональным клавишам для переключения между "fromstart" и "ccomment" режимами и для того, чтобы просто очистить синхронизирующие настройки.

13
задан mrblue 22 November 2009 в 16:39
поделиться

5 ответов

Итак, у нас есть один или несколько файлов, доступных для загрузки. Создание временного файла для каждого запроса на загрузку - не лучшая идея. Вместо этого создание символической ссылки () для каждого файла - гораздо лучшая идея. Это сэкономит кучу дискового пространства и снизит нагрузку на сервер.

Назвать символическую ссылку после сеанса пользователя - неплохая идея. Лучшая идея - создать случайное имя символической ссылки и связать его с сеансом, чтобы сценарий мог обрабатывать несколько загрузок за сеанс. Вы можете использовать session_set_save_handler () ( ссылка ) и зарегистрировать специальную функцию чтения , которая проверяет истекшие сеансы и удаляет символические ссылки, когда сеанс истек.

10
ответ дан 1 December 2019 в 20:43
поделиться

В PHP есть функция для этого имени tmpfile . Он создает временный файл и возвращает ресурс. Ресурс может использоваться как любой другой ресурс.

Например, пример из руководства:

<?php
$temp = tmpfile();
fwrite($temp, "writing to tempfile");
fseek($temp, 0);
echo fread($temp, 1024);
fclose($temp); // this removes the file
?>

Файл автоматически удаляется при закрытии (с помощью fclose ()) или при завершении скрипта. Вы можете использовать любые файловые функции на ресурсе. Вы можете найти эти здесь . Надеюсь, это поможет вам?

Другим решением было бы создать файл обычным способом и использовать задание cron для регулярной проверки, истек ли срок сеанса. Дата истечения срока действия и другие данные сеанса могут храниться в базе данных. Используйте сценарий, чтобы запросить эти данные и определить, истек ли срок сеанса. Если да, удалите его физически с диска. Обязательно запускайте сценарий примерно раз в час (в зависимости от вашего тайм-аута).

12
ответ дан 1 December 2019 в 20:43
поделиться

Не могли бы вы более подробно объяснить вашу проблему? Потому что я не вижу причин, почему бы не использовать $ _ SESSION . Данные в $ _ SESSION хранятся на стороне сервера в файле (см. http://php.net/session.save-path ) Кстати. По крайней мере, по умолчанию. ; -)

3
ответ дан 1 December 2019 в 20:43
поделиться

Я бы посоветовал вам вообще не копировать файл. Я бы сделал следующее: когда пользователь запрашивает файл, вы генерируете случайную уникальную строку, чтобы дать ему ссылку следующим образом: dl.php? K = hd8DcjCjdCkk123 затем помещаете эту строку в базу данных, сохраняя его IP-адрес, возможно сеанс и время создания ссылки. Затем другой пользователь запросит этот файл, убедитесь, что все данные (хэш, ip и т. Д.) Совпадают, а срок действия ссылки не истек (например, с момента генерации прошло не более N часов), и если все в порядке, используйте PHP для передачи по каналу файл. Установите задание cron для просмотра БД и удаления просроченных записей. Как вы думаете?

tmpfile

Создает временный файл с уникальным имя в режиме чтения-записи (w +) и возвращает дескриптор файла. Файл автоматически удаляется при закрытии (используя fclose ()), или когда скрипт заканчивается.

2
ответ дан 1 December 2019 в 20:43
поделиться

Итак, на данный момент у нас есть следующие требования

  1. Разрешить пользователю загружать только в его / ее сеансе
  2. не копировать и вставлять ссылку на кого-то еще
  3. У пользователей есть для загрузки с сайта, например без хотлинкинга
  4. Контроль скорости

Посмотрим. Это не рабочий код , но он должен работать в следующих строках:

<?php // download.php

session_start(); // start or resume a session

// always sanitize user input
$fileId  = filter_input(INPUT_GET, 'fileId', FILTER_SANITIZE_NUMBER_INT);
$token   = filter_input(INPUT_GET, 'token', FILTER_UNSAFE_RAW);
$referer = filter_input(INPUT_SERVER, 'HTTP_REFERER', FILTER_SANITIZE_URL);
$script  = filter_input(INPUT_SERVER, 'SCRIPT_NAME', FILTER_SANITIZE_URL);

// mush session_id and fileId into an access token
$secret        = 'i can haz salt?';
$expectedToken = md5($secret . session_id() . $fileId);

// check if request came from download.php and has the valid access token
if(($expectedToken === $token) && ($referer === $script)) {
   $file = realpath('path/to/files/' . $fileId . '.zip');
   if(is_readable($file)) {
        session_destroy(); // optional
        header(/* stuff */);
        fpassthru($file);
        exit;
    }
}
// if no file was sent, send the page with the download link.
?>
<html ...

<?php printf('a href="/download.php?fileId=%s&amp;token=%s', 
              $fileId, $expectedToken); ?>

...
</html>

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

Я полностью согласен, что это может будет решена гораздо более элегантно, чем с помощью этого взлома обезьяны, но в качестве доказательства концепции этого должно быть достаточно.

2
ответ дан 1 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: