Для синхронизации окраски синтаксиса, вероятно, нужна корректировка. Я нашел в определенных контекстах, что должен изменить его.
синхронизация Синтаксиса (": помогите syn-синхронизации"), средства управления, как энергия отслеживает и обновляет свой синтаксический анализ кода для окраски, так, чтобы это могло начать тянуть где угодно в файле.
значения по умолчанию не всегда работают на меня, поэтому иногда я выхожу
:syn sync fromstart
, я предлагаю прочитать документацию под
:help syn-sync
или просто проверяю
:help syntax
и нахожу раздел по синхронизации.
для создания обоснованного решения среди четырех доступных основных опций. Я поддерживаю отображения к функциональным клавишам для переключения между "fromstart" и "ccomment" режимами и для того, чтобы просто очистить синхронизирующие настройки.
Итак, у нас есть один или несколько файлов, доступных для загрузки. Создание временного файла для каждого запроса на загрузку - не лучшая идея. Вместо этого создание символической ссылки ()
для каждого файла - гораздо лучшая идея. Это сэкономит кучу дискового пространства и снизит нагрузку на сервер.
Назвать символическую ссылку после сеанса пользователя - неплохая идея. Лучшая идея - создать случайное имя символической ссылки и связать его с сеансом, чтобы сценарий мог обрабатывать несколько загрузок за сеанс. Вы можете использовать session_set_save_handler ()
( ссылка ) и зарегистрировать специальную функцию чтения
, которая проверяет истекшие сеансы и удаляет символические ссылки, когда сеанс истек.
В 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 для регулярной проверки, истек ли срок сеанса. Дата истечения срока действия и другие данные сеанса могут храниться в базе данных. Используйте сценарий, чтобы запросить эти данные и определить, истек ли срок сеанса. Если да, удалите его физически с диска. Обязательно запускайте сценарий примерно раз в час (в зависимости от вашего тайм-аута).
Не могли бы вы более подробно объяснить вашу проблему? Потому что я не вижу причин, почему бы не использовать $ _ SESSION
. Данные в $ _ SESSION
хранятся на стороне сервера в файле (см. http://php.net/session.save-path ) Кстати. По крайней мере, по умолчанию. ; -)
Я бы посоветовал вам вообще не копировать файл. Я бы сделал следующее: когда пользователь запрашивает файл, вы генерируете случайную уникальную строку, чтобы дать ему ссылку следующим образом: dl.php? K = hd8DcjCjdCkk123
затем помещаете эту строку в базу данных, сохраняя его IP-адрес, возможно сеанс и время создания ссылки. Затем другой пользователь запросит этот файл, убедитесь, что все данные (хэш, ip и т. Д.) Совпадают, а срок действия ссылки не истек (например, с момента генерации прошло не более N часов), и если все в порядке, используйте PHP для передачи по каналу файл. Установите задание cron для просмотра БД и удаления просроченных записей. Как вы думаете?
Создает временный файл с уникальным имя в режиме чтения-записи (w +) и возвращает дескриптор файла. Файл автоматически удаляется при закрытии (используя fclose ()), или когда скрипт заканчивается.
Итак, на данный момент у нас есть следующие требования
Посмотрим. Это не рабочий код , но он должен работать в следующих строках:
<?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&token=%s',
$fileId, $expectedToken); ?>
...
</html>
И все. База данных не требуется. Это должно покрывать требования 1-3. Вы не можете контролировать скорость с помощью PHP, но если вы не уничтожите сеанс после отправки файла, вы можете записать счетчик сеанса и ограничить количество файлов, которые пользователь будет отправлять во время сеанса.
Я полностью согласен, что это может будет решена гораздо более элегантно, чем с помощью этого взлома обезьяны, но в качестве доказательства концепции этого должно быть достаточно.