LEOnidUKG

LEOnidUKG
Рейтинг
1776
Регистрация
25.11.2006
Должность
PHP
Интересы
Программирование

А можно свои 5 копеек? Без GPT и его говно кода. Особенно прикольно, что если недостаточно строк, то мы будем выводить по порядку, просто текст. Чего?!


<?php
function cikl($file,$cnt=5){
	
	if (file_exists($file))
	{
		$data = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

			if ($data && $cnt)
			{
				$i=0;
				shuffle($data);
				
				$data_count=count($data);
				
				if ($cnt>$data_count)
				{
					$cnt=$data_count;
				}
				
				while($i!=$cnt) 
				{ 
					echo do_shortcode ( $data[$i]); 
					$i++;
				}
			}
	}
}

cikl('diff1.txt',10);

Кстати, чтобы файлы туда сюда не перемещать, PHP всё же умеет в символические ссылки: https://www.php.net/manual/ru/function.symlink.php

Поэтому без проблем можно не файлы копировать, а просто ссылки на них создавать.

Mobiaaa #:

На что фантазии хватит

в файловую систему вообще не лезем, и через php файлы не отдаём

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

На nginx можно реализовать одноразовые ключи, вот статья: https://habr.com/ru/articles/346758/

Mobiaaa #:

Хотите постоянную ссылку - пожалуйста

/down.php?id=1

А скрипт уже через заголовок редиректит на /data/files.zip к примеру

По прямому адресу  /data/files.zip - доступа не будет, только через down.php

Ссылка должна привязана быть к пользователю. Это защита, чтобы не делились ссылками.

Через час ссылка умирает и пока физически человек её не запросит, файл не будет доступен.

Поправьте меня конечно:

Реальный адрес файла закрываем опцией internal, и по прямой ссылке будет ошибка 404

И какой смысл? Суть то в том, чтобы файлы вообще были доступны временно для всех. Мы тут не меняем одно название файла на другое.

iccup #:


По поводу копий, да это так. Учитывая что они будут удаляться каждый час, это нормально. Да, и если допусстим скрипт не будет создавать файл потомучто он как бы уже есть (создан ранее) и оставит как есть, то есть вероятность что пользователь не успеет докачать файл и он удалится по крону.

Минимизация обращений к диску и операций ввода вывода.

Чтобы файлы не удалялись, которые сейчас скачиваются т.е. актуальные есть функция touch https://www.php.net/manual/en/function.touch.php


$files = glob($tempDir . '*');

Рекомендую:

$files = glob($tempDir . '*' | GLOB_NOSORT  );

Тоже ускорит вывод. Хотя от этой переменной вообще можно избавиться, а сразу в foreach её.

$fileCreationTime = filectime($file);

Тоже бессмысленная переменная.


Вообще конечно код прикольный, но он больше какой-то учебный что-ли.

Функции очистки старых файлов ещё нет.

$tempFileName = uniqid() . '.' . $originalExtension;

Спорный момент, я бы лучше md5 делал из названия файла, чтобы в случаи одинаковых файлов, не плодились дубли.

lutskboy #:

Лёня, не спорь. Все можно. Спросите зачем? Просто у меня логика работы и его реализация упростится. нашел решение на одном англ сайте

также есть ответ тут

https://qna.habr.com/q/966677

https://qna.habr.com/q/885545

До чего прогресс дошёл, но решение то там не просто выбор файла.

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

lutskboy #:

У меня фастпанель  PHP-FPM для етого сайта

Эти параметры в карточке товара проверьте:

Так же вижу у вас WP как я понял. Никаких случаем конверторов в webp не стоит, которые в реальном времени должны их обрабатывать?

lutskboy #:

Лёня, картинка на моем сайте. и браузер ошибок не выдает

Да хоть на Луне. Нельзя в поле ничего подставить.

Если всё на своём сервере, тогда надо форму обрабатывать через PHP и сразу POST запрос в неё делать, зачем использовать HTML интерфейс, который для людей создан?

Всего: 31516