Александр: mb_detect_encoding не даёт стопроцентной точности определения.
В mbstring на данный момент реализованы следующие фильтры для определения кодировок. Если последовательность байт в исходной строке не будет соответствовать ни одной из перечисленных кодировок, определение кодировки завершится неудачей.
UTF-8, UTF-7, ASCII, EUC-JP,SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP
Александр: Ну по крайней мере страница входа на это сайте выдаётся именно в windows-1251. Логично предположить, что всё остальное по умолчанию тоже в этой кодировке.
limurchick: OEM-лицензию вы купить не можете, по правилам после установки OEM-лицензии компьютер должен быть продан конечному потребителю, сам установщик им быть не может.
Retail (box) - не поддерживает downgrade.
Ну и если ноуты вам не принадлежат, то и лицензия должна быть приобретена на владельца ноута.
Олег Бушев: В SIP не заложено понятие аудиофайла. SIP-канал - это управление, параллельно идёт RTP-канал - собственно голос. То есть вам на PHP надо будет реализовать практически полный функционал софтфона.
Антон @ Лялин: Так если есть ошибки, то они как раз в логах апача будут показаны. Это первое место при поисках проблем. Если там никаких ошибок нет, тогда уже надо будет искать их в логике работы программы.
Ivan Yakushenko: Вам нужен не массив, а словарь. Например так (только 32 русские буквы, 'е' и 'ё' считаем одинаковыми):
struct dict {
int count;
struct dist *childs[32];
};
Создаёте корневой элемент, не забываете инициализировать childs NULL'ами, count нулём.
Берёте очередное слово, берёте его первую букву, загоняете её в нижний регистр, если это 'ё', то вместо неё берёте 'е', вычитаете 'а', получаете индекс. Если childs[индекс] == NULL, то создаёте новый элемент словаря (не забываете инициализацию), записываете указатель на него его в childs[индекс]. Переходите на элемент childs[индекс]. Если в слове есть ещё буквы, то повторяете процедуру. Если букв больше нет, то увеличиваете count текущего элемента на 1.
В результате получите словарь, обойдя который можно получить все слова и количество этих слов. При чтении второго файла в словарь ничего не добавляете, только проверяете наличие нужной цепочки элементов.
enigma2030: Выборка чего? Выбирать все методы рассылки каждый раз смысла нет. Они нужны в двух местах - в управлении списком конкретного пользователя, где идёт выборка небольшого списка по конкретному user_id, и в самой рассылке, где скорость выборки не критична.
Если каждый раз делать JOIN то да, будет медленнее.
enigma2030: А в чём проблема изменить структуру таблицы? Если все запросы к ней делаются с указанием списка полей, а не *, то никто этого и не заметит.
Второй вариант, если собираетесь делать множество вариантов подписки, то есть смысл создавать таблицу не под именно SMS, а под подписки в целом (user_id, send_method, send_to). Тогда пользователь сможет создать себе неограниченное количество подписок на разные адреса/телефоны.
Александр: Второй вариант - считывать текущее состояние таблицы в mysql, составлять три списка изменений - добавление, вставка, удаление, применять их в транзакции. Но тогда надо гарантировать неизменность таблицы между считыванием и завершением транзакции, то есть делать блокировку на запись.