Что значит "лучше" или "надёжнее"? Быстродействие в описанном случае напрямую будет зависеть от удалённого сервера. То есть, если сервер авторизации недоступен/отвечает долго - возникнут проблемы. Это трудно назвать надёжной схемой. Плюс, нужно применить достаточное шифрование для того, чтобы защититься от обычного реверс-инженеринга и последующего MiTM.
Нужно быть уверенными в том, что строка не превысит этот самый 1Mb (на самом деле, чуть меньше, так как нужно ещё и сам массив хранить). В этом случае, можно поступить так:
Процесс можно ускорить, если знать, что в файле есть переносы строк - и строки не превышают допустимых размеров. Тогда - читать поблочно (fgets) и применять один из методов подсчёта, что дан выше для полностью загруженных в память данных.
6Mb = 6*10242 чтений 1 символа из файла и записи в массив. Это может быть медленно, но это - единственный способ обработки файлов произвольного размера.
Нет, значит, что цикл бесконечный. В моём случае отработало всё верно. mb_substr_count никак не поможет на случай, если данные нельзя загрузить в память.
Объём большой = нельзя загрузить в память. Это означает, что можно попросту читать байты последовательно в цикле и увеличивать счётчик соответствующего ключа результирующего массива. fgetc, например (хотя для кириллицы лучше всё же fread)
В 32-битной в общем случае физически не удастся адресовать столько памяти, так как 232 позволит выдать адреса только 4Gb - но сколько-то будет ещё занято системой. Поэтому - только 64-битная.
Некоторые CPU умеют адресовать до 64Gb даже при 32-битной шине (36-битные пины). Однако это из разряда "суметь". Быстродействие оставит желать лучшего.
Для чего на Win создавать диски 4Tb + ? Файловый хостинг пранируется открыть? Тогда - установить *nix и не волноваться. Win - не серверная ОС в большинстве своём. У всех ОС есть свои плюсы и минусы. [Во избежание споров]