Способ с инклюде - это ад кромешный. Память процесса РНР- она как бы не бесплатная. И даже если в моменте ничего не упадёт, то может потом не хватить на какую-то другую операцию. Но главное - это просто варварство, каждый раз тягать в память пол-ляма строк ради того чтобы вывести одну.
Способ с файлами в принципе эффективен, но многие ос начинают тупить при большом количестве файлов в каталоге, придется разбивать по 500 подкаталогам. В целом гемор.
spoilerИ непонятно, зачем так сложно писать
echo file_get_contents("/str/" . mt_rand (1,500000) . ".txt");
Самый простой способ - это действительно сделать таблицу в БД, где будет два поля, число по возрастанию (первичный индекс) и собственно значение строки.
и выбирать по первому полю через то же mt_rand (1,500000)
Сразу отвечу на вопрос про разницу с гениальным решением через инклюде: индекс в БД будет во-первых занимать память только под первую колонку, а во-вторых, этот индекс будет храниться ровно в
одном экземпляре. А не занимать память в
каждом процессе РНР.