PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (594): « 1 2 3 4 [5] 6 7 8 9 ... » В конец

> Найдено сообщений: 8901
EuGen Отправлено: 24 Марта, 2014 - 16:42:36 • Тема: Ключ под конкретный домен! • Форум: Напишите за меня, пожалуйста

Ответов: 1
Просмотров: 23
Что значит "лучше" или "надёжнее"? Быстродействие в описанном случае напрямую будет зависеть от удалённого сервера. То есть, если сервер авторизации недоступен/отвечает долго - возникнут проблемы. Это трудно назвать надёжной схемой. Плюс, нужно применить достаточное шифрование для того, чтобы защититься от обычного реверс-инженеринга и последующего MiTM.
EuGen Отправлено: 24 Марта, 2014 - 16:01:54 • Тема: Количество букс в строке. • Форум: Вопросы новичков

Ответов: 26
Просмотров: 944
jonston пишет:
переносы строк есть

jonston пишет:
Допустим есть лимит памяти 1мб.

Нужно быть уверенными в том, что строка не превысит этот самый 1Mb (на самом деле, чуть меньше, так как нужно ещё и сам массив хранить). В этом случае, можно поступить так:

PHP:
скопировать код в буфер обмена
  1. function countCyr($string)
  2. {
  3.    return array_count_values(
  4.       preg_split('/[^А-Яа-яЁё]*/u', mb_strtoupper($string, 'UTF-8'), -1, 1)
  5.    );
  6. }
  7.      
  8. $path = '/path/to/file.txt';
  9. $file = fopen($path, 'r');
  10. $chars = array();
  11. while(!feof($file))
  12. {
  13.    foreach(countCyr(fgets($file)) as $char=>$count)
  14.    {
  15.       $chars[$char]=isset($chars[$char])?$chars[$char]+$count:1;
  16.    }
  17. }
  18. fclose($file);
  19. arsort($chars);
EuGen Отправлено: 24 Марта, 2014 - 15:40:45 • Тема: Количество букс в строке. • Форум: Вопросы новичков

Ответов: 26
Просмотров: 944
Процесс можно ускорить, если знать, что в файле есть переносы строк - и строки не превышают допустимых размеров. Тогда - читать поблочно (fgets) и применять один из методов подсчёта, что дан выше для полностью загруженных в память данных.
EuGen Отправлено: 24 Марта, 2014 - 15:32:53 • Тема: Количество букс в строке. • Форум: Вопросы новичков

Ответов: 26
Просмотров: 944
6Mb = 6*10242 чтений 1 символа из файла и записи в массив. Это может быть медленно, но это - единственный способ обработки файлов произвольного размера.
EuGen Отправлено: 24 Марта, 2014 - 15:25:18 • Тема: Количество букс в строке. • Форум: Вопросы новичков

Ответов: 26
Просмотров: 944
jonston пишет:
Почему у меня тогда не вкладывается в 30 секунд?

EuGen пишет:
значит, что цикл бесконечный

- ищите, что не верно сделано.
EuGen Отправлено: 24 Марта, 2014 - 15:18:48 • Тема: Количество букс в строке. • Форум: Вопросы новичков

Ответов: 26
Просмотров: 944
Нет, значит, что цикл бесконечный. В моём случае отработало всё верно. mb_substr_count никак не поможет на случай, если данные нельзя загрузить в память.
EuGen Отправлено: 24 Марта, 2014 - 15:11:10 • Тема: Количество букс в строке. • Форум: Вопросы новичков

Ответов: 26
Просмотров: 944
Массив с коротким синтаксисом объявления доступен с PHP 5.4; если не хватает времени - то добавить в начало скрипта. Если нельзя менять время исполнения - не использовать PHP
EuGen Отправлено: 24 Марта, 2014 - 14:52:19 • Тема: Количество букс в строке. • Форум: Вопросы новичков

Ответов: 26
Просмотров: 944
Что-либо наподобие:

PHP:
скопировать код в буфер обмена
  1. define('FILTER_ALL', 0);
  2. define('FILTER_CYRILLIC', 1);
  3.  
  4. function getCharUTF($file, $filter=FILTER_ALL)
  5. {
  6.    if(!feof($file) && $one = fgetc($file))
  7.    {
  8.       if(ord($one)>127 && !feof($file) && $two=fgetc($file))
  9.       {
  10.          return $one.$two;
  11.       }
  12.       return $filter!=FILTER_CYRILLIC?$one:null;
  13.    }
  14. }
  15.  
  16. $path = '/path/to/file.txt';
  17. $file = fopen($path, 'r');
  18. $chars = [];
  19. while(!feof($file))
  20. {
  21.    if($c = mb_strtoupper(getCharUTF($file, FILTER_CYRILLIC), 'UTF-8'))
  22.    {
  23.       $chars[$c] = isset($chars[$c])?$chars[$c]+1:1;
  24.    }
  25. }
  26. fclose($file);
  27. arsort($chars);


Здесь нет "точной" выборки кириллицы (поскольку всё, что не попадает в нижнюю половину ASCII, мы считаем как "кириллицу")
EuGen Отправлено: 24 Марта, 2014 - 14:24:32 • Тема: Количество букс в строке. • Форум: Вопросы новичков

Ответов: 26
Просмотров: 944
Объём большой = нельзя загрузить в память. Это означает, что можно попросту читать байты последовательно в цикле и увеличивать счётчик соответствующего ключа результирующего массива. fgetc, например (хотя для кириллицы лучше всё же fread)
EuGen Отправлено: 24 Марта, 2014 - 13:39:42 • Тема: Количество букс в строке. • Форум: Вопросы новичков

Ответов: 26
Просмотров: 944
PHP:
скопировать код в буфер обмена
  1. //utf-8
  2. $string = 'Glq гмГ sЙz Мок';
  3.    preg_split('/[^А-Яа-яЁё]*/u', mb_strtoupper($string, 'UTF-8'), -1, 1)
  4. );
  5. arsort($result);
  6. //var_dump($result);

?
EuGen Отправлено: 24 Марта, 2014 - 09:37:37 • Тема: Страння фигня с array_search • Форум: Вопросы новичков

Ответов: 3
Просмотров: 196
Можете также проверить, нет ли "невидимых" символов, разбивая так:

PHP:
скопировать код в буфер обмена
  1. $line = preg_split('/\s*;\s*/', $file[$i], -1, PREG_SPLIT_NO_EMPTY);

- или даже заменив \s на \W в регулярном выражении.
EuGen Отправлено: 19 Марта, 2014 - 12:42:49 • Тема: 32 или 64 битная ОС Debian? • Форум: Администрирование *nix

Ответов: 4
Просмотров: 2053
В 32-битной в общем случае физически не удастся адресовать столько памяти, так как 232 позволит выдать адреса только 4Gb - но сколько-то будет ещё занято системой. Поэтому - только 64-битная.

Некоторые CPU умеют адресовать до 64Gb даже при 32-битной шине (36-битные пины). Однако это из разряда "суметь". Быстродействие оставит желать лучшего.
EuGen Отправлено: 19 Марта, 2014 - 08:24:46 • Тема: Работа по корректировке сайта, создание группы сайтов определенной тематики • Форум: FreeLance

Ответов: 5
Просмотров: 1462
В данном разделе есть правила. Пожалуйста, приведите тему в соответствие с ними.
EuGen Отправлено: 18 Марта, 2014 - 15:56:01 • Тема: Какой максимальный объём одного жесткого диска у Debian? • Форум: Администрирование *nix

Ответов: 10
Просмотров: 2950
Для чего на Win создавать диски 4Tb + ? Файловый хостинг пранируется открыть? Тогда - установить *nix и не волноваться. Win - не серверная ОС в большинстве своём. У всех ОС есть свои плюсы и минусы. [Во избежание споров]
EuGen Отправлено: 18 Марта, 2014 - 10:54:49 • Тема: Удаление просроченных записей из базы данных • Форум: Вопросы новичков

Ответов: 5
Просмотров: 323
Формат неверный. В MySQL дата записывается как YYYY-MM-DD HH:MM:SS

PHP:
скопировать код в буфер обмена
  1. 'DELETE FROM `com` WHERE `date` <  "'.date('Y-m-d H:i').':00"';



Либо же можно использовать NOW() (если секунды не важны):

CODE (SQL):
скопировать код в буфер обмена
  1. DELETE FROM `com` WHERE `date` <  NOW()

Страниц (594): « 1 2 3 4 [5] 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB