Архив за июль 2008 г.

Как вручную включить группы пользователей в SMF форум с использованием PHP

Опубликовано в SMF (Simple Forum машина) , PHP по ShortLikeAFox по 30 июля 2008

Это руководство предполагает, что вы знакомы с моей должности: Как вручную включить пользователя в SMF форум с использованием PHP .

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

  1. Группа имена не были гарантированы их безопасность для посимвольно двигаться в базу данных SMF. Так какое-то имя функции изменения должны быть заняты.
  2. Полосы не имеют паролей. Таким образом, некоторые типа генерации паролей следует применять.

Шаги, которые я ходил по регистрации всех полос в форуме пошли немного похож на этот:

Откройте базу данных Band

каждого из них (Band) (

Создать пароль

Переименовать Band с "безопасной" имя

Хватай и получения информации, необходимой для вставки пользователей

Вставьте Band в smf_members

Отправить Band письмо с паролем

)

Информация, которую я были доступны из группы баз данных, что было бы полезно включить: название группы, bandEmail и bandWebsite

Вот функция генерации пароля я использовал (blatently взяты из totallyphp.co.uk ):

createRandomPassword функции () (

$ Символов = "abcdefghijkmnopqrstuvwxyz023456789";

() * 1000000); srand ((двойной) микропоры () * 1000000);

$ = 0;

$ Пройти = ";



а ($ я <= 7) (

33; $ Пит = RAND ()% 33;

$ TMP = подстрока ($ символов, $ пит, 1);

$ = $ Пройти перевал. $ TMP;

$ Я + +;

)

вернуть $ проходе;

)

Пароль, созданный здесь относительно слабо, но он был достаточно хорош для моих целей. Любая функция генерации паролей будет прекрасно работать здесь. Я выбрал это, потому что это будет легко для членов помните, если они решили не менять его.

Как это сделать:

/ / Первый подключиться к группе баз данных
$ Имя пользователя = "bandUsername";
Принимающей $ = "bandHost";
MyPassword $ = "bandPassword";
Имя_базы_данных $ = "bandDatabase";

("cannot connect to server"); mysql_connect ("$ хозяин", "$ Имя пользователя", "$ MyPassword"), или умереть "(" Не удается подключиться к серверу ");
("cannot select DB"); mysql_select_db ("$ имя_базы_данных") или умереть ("не может выбрать БД");

/ / Теперь взять все группы из базы данных
$ Диегу = "SELECT * FROM allBands";
$ Полос = mysql_query ($ запроса) или умереть ("Ошибка 2222b Config");
$ UserRows = mysql_num_rows ($ полос);

/ / Теперь давайте подключиться к SMF db
Принимающей $ = "smfhost" / / имя хоста
$ Имя пользователя = "smfuser / / имя пользователя Mysql
MyPassword $ = "smfpassword"; / / MySQL пароль
Имя_базы_данных $ = "smfdatabase" / / Имя базы данных

("cannot connect to server"); mysql_connect ("$ хозяин", "$ Имя пользователя", "$ MyPassword"), или умереть "(" Не удается подключиться к серверу ");
("cannot select DB"); mysql_select_db ("$ имя_базы_данных") или умереть ("не может выбрать БД");

/ / $ Vaild_chars будет массива разрешенных символов для имен пользователей. Я решил, чтобы только буквы и цифры. Есть и другие символы, которые можно использовать, что не повлечет за собой проблемы, но по стилю причин, почему я решил пойти с только буквы и цифры
Valid_chars $ = "abcdefghijklmnopqrstu vwxyz 0 1 2 3 4 5 6 7 8 9";
$ Valid_chars = взорвать ("", $ valid_chars);

/ / Теперь нам нужно организовать цикл по каждой зоне

){ для ($ I = 0, $ я <$ userRows, $ я + +) (

($bands)){ если ($ = mysql_fetch_assoc строки ($ полос)) (

/ / Извлечь группы информации
Экстракт ($ подряд);
/ / Создание пароля для группы
$ = RealPassword createRandomPassword ();
/ / Я выбираю повторить название группы и пароль, как часть моей отладки и поэтому я могу видеть функции как это работает
эхо ("$ <br/> название группы - $ realPassword");
NewBand $ = "";
/ / За каждую букву в название группы мы будем смотреть, чтобы увидеть, если он соответствует допустимым символом от $ valid_chars. Это не мы собираемся избавиться от него и обрезает название группы
($bandName); $j ++ ){ для ($ J = 0, $ J <StrLen ($ название группы); $ J + +) (

($band[$j])); Темп $ = str_replace ($ valid_chars, "X", strtolower ($ группы [$ J]));
если ($ Темп == "X")

$ = $ NewBand newBand. $ Полосы [$ J];

)
/ / Я присоединяюсь к новым названием по той же причине я поддерживаю старые имя и пароль
эхо ("- $ newBand");
/ / У нас новое название группы .... Теперь давайте начнем buliding информации нужно вставить в БД ...
$ = $ ТетЬегЫате newBand;
$ = $ RealName newBand; / / I установить реальное имя и имя пользователя то же самое. Полос может измениться, если они хотят
$ = $ EmailAddress bandEmail;
$ = $ WebsiteUrl bandWebsite / / Поскольку у меня полос 'сайты могут также ввести их
$ = $ WebsiteTitle newBand;
Is_activated $ = 1;
ID_POST_GROUP $ = 4;
($memberName).$realPassword); //Password must be encrypted $ Пароль = SHA1 (strtolower ($ тетЬегЫате). RealPassword $) / / Пароль должен быть зашифрован

/ / Убедитесь, что не является членом их с тем же именем в базе SMF. Мы не хотим, чтобы кто-нибудь случайно ввести в два раза
$ Диегу = "SELECT * FROM smf_members ГДЕ тетЬегЫате" = '$ тетЬегЫате;
("Config Error 2222343242b"); $ Результат = mysql_query ($ запроса) или умереть ("Ошибка 2222343242b Config");
$ Nrows = mysql_num_rows ($ результат);

/ / Если имя пользователя найдено ничего не делать
если ($ nrows> 0) ()

зе (

/ / Если пользователь еще не зарегистрировались на форуме, сделать это, и отправить по электронной почте ....
$ Диегу = "INSERT INTO smf_members (тетЬегЫате, реальное имя, EmailAddress, is_activated, ID_POST_GROUP, пароль, websiteUrl, websiteTitle) VALUES ('$ тетЬегЫате', '$ реальное имя', '$ EmailAddress', '$ is_activated', '$ ID_POST_GROUP' , '$ пароль', '$ websiteUrl', '$ websiteTitle ");

("Config Error 2232 "); $ Результат = mysql_query ($ запроса) или умереть ("Config Ошибка 2232");

/ / Теперь мы должны направить группу по электронной почте
$ В = $ EmailAddress;
$ Вопросу = "Ваше имя пользователя и пароль форума";

/ / От
$ Заголовок = ": В <me@mysite.com> Me";

/ / Ваше сообщение
$ Теззаде .= "Логин и пароль, перечислены ниже. Вы можете либо изменить в любое время. Если вы не хотите участвовать в наших форумах, это не проблема. Просто никогда не войти, и он будет как будто ничего не произошло. \ з \ п ";
$ Теззаде .= "Имя пользователя: $ тетЬегЫате Пароль: $ realPassword \ г \ п";

/ / Написать письмо
$ = Черновики почты ($ к, $ вопросу, $ теззаде, $ заголовка);
если ($ черновики)

эхо ("- ДА!");
/ / Это последняя часть нашей эхо. "Да!" только будет напечатан, если письмо будет отправлено. Таким образом, полный ассортимент распечатка будет выглядеть следующим образом:
/ / Адам Борьба - 4s6vsxag - AdamStrife - ДА!

)

)
)

Как вручную включить пользователя в SMF форум с использованием PHP

Опубликовано в SMF (Simple Forum машина) , PHP по ShortLikeAFox по 28 июля 2008

Этот конкретный пример для SMF 1.1.5. Я не могу гарантировать это будет работать с любой другой вариант.

Таким образом, вы выполните Simple Machine Forum Software и хотите, чтобы вручную ввести пользователь? Без проблем. Я знаю, что это проблема, похоже, очень специфических, но идеи объясняется здесь может быть адаптирована для других типов форумов и других базами данных программных пакетов, таких как Wordpress. Прежде чем мы перейдем, как именно это сделать, давайте посмотрим, как Simple Machine Форумы отслеживает пользователей. В базе данных SMF есть таблица, называемая smf_members. Структура smf_members выглядит следующим образом:

Поле Тип Нуль

Ключ Умолчание Дополнительно
ID_MEMBER MEDIUMINT (8) неподписанных NO PRI NULL auto_increment
тетЬегЫате VARCHAR (80) NO MUL
dateRegistered Int (10) неподписанных NO MUL 0
сообщений MEDIUMINT (8) неподписанных NO MUL 0
ID_GROUP SMALLINT (5) неподписанных NO MUL 0
lngfile tinytext NO MUL
lastLogin Int (10) неподписанных NO MUL 0
RealName tinytext NO
instantMessages SMALLINT (5) NO 0
unreadMessages SMALLINT (5) NO 0
buddy_list текст NO
pm_ignore_list текст NO
messageLabels текст NO
Passwd VARCHAR (64) NO
EmailAddress tinytext NO
personalText tinytext NO
пол ТШУШТ (4) неподписанных NO 0
рождения день NO MUL 0001-01-01
websiteTitle tinytext NO
websiteUrl tinytext NO
местоположение tinytext NO
ICQ tinytext NO
AIM VARCHAR (16) NO
YIM VARCHAR (32) NO
MSN tinytext NO
hideEmail ТШУШТ (4) NO 0
showOnline ТШУШТ (4) NO 1
timeFormat VARCHAR (80) NO
подпись текст NO
timeOffset поплавок NO 0
аватар tinytext NO
pm_email_notify ТШУШТ (4) NO 0
karmaBad SMALLINT (5) неподписанных NO 0
karmaGood SMALLINT (5) неподписанных NO 0
usertitle tinytext NO
notifyAnnouncements ТШУШТ (4) NO 1
notifyOnce ТШУШТ (4) NO 1
notifySendBody ТШУШТ (4) NO 0
notifyTypes ТШУШТ (4) NO 2
memberIP tinytext NO
memberIP2 tinytext NO
secretQuestion tinytext NO
secretAnswer VARCHAR (64) NO
ID_THEME ТШУШТ (4) неподписанных NO 0
is_activated ТШУШТ (3) неподписанных NO 1
validation_code VARCHAR (10) NO
ID_MSG_LAST_VISIT Int (10) неподписанных NO 0
additionalGroups tinytext NO
smileySet VARCHAR (48) NO
ID_POST_GROUP SMALLINT (5) неподписанных NO MUL 0
totalTimeLoggedIn Int (10) неподписанных NO 0
passwordSalt VARCHAR (5) NO

Поля мы должны обратить внимание на следующее:

  • тетЬегЫате - Self Explanitory.
  • dateRegistered - не является необходимым, но если не заполнены дате регистрации выглядит как 31 декабря 1969. Дата сохраняется в эпоху метки. Не знаю, как рассчитать метки в вашей голове? Без проблем. Я использую бесплатный генератор найти здесь .
  • реальное имя - Должен быть введен. Когда я не уверен, что я просто повторяю тетЬегЫате здесь.
  • EmailAddress - Self Explanitory.
  • is_activated - должен быть установлен в 1, поскольку мы вручную активизации членов.
  • ID_POST_GROUP - Я не буду лгать. Я не уверен, что это такое, но всегда кажется, быть установлен на 4. Так что .... Я всегда установить его на 4. Не самый лучший путь к программе, но что поделаешь?
  • Passwd - пароль, который вы хотите, чтобы дать новый пользователь. Невозможно понять, как туда попасть, не глядя на документы SMF. Правильный код для шифрования пароля SMF для базы данных выглядит следующим образом:

($memberName).$password) $ Passwd = SHA1 (strtolower ($ тетЬегЫате). $ Пароль)

В приведенной выше строке кода, $ пароль фактический пароль пользователя.

Как это сделать:

/ / Во-первых, подключиться к базе данных SMF

Принимающей $ = "имя" / / имя хоста
$ Имя пользователя = "Имя пользователя" / / имя пользователя Mysql
MyPassword $ = "пароль"; / / MySQL пароль
$ Имя_базы_данных = "Имя пользователя" / / Имя базы данных

("cannot connect to server"); mysql_connect ("$ хозяин", "$ Имя пользователя", "$ MyPassword"), или умереть "(" Не удается подключиться к серверу ");
("cannot select DB"); mysql_select_db ("$ имя_базы_данных") или умереть ("не может выбрать БД");

$ ТетЬегЫате = "Железный человек";
$ Реальное имя = "Тони Старк";
EmailAddress $ = "ironMan@ironMan.com";
Is_activated $ = 1;
ID_POST_GROUP $ = 4;

$ Пароль = "Tony1234";

($memberName).$password); $ Пароль = SHA1 (strtolower ($ тетЬегЫате). $ Пароль);

$ DateRegistered = 1216951200 / / 7-25-2008 2 утра

$ Диегу = "INSERT INTO smf_members (тетЬегЫате, реальное имя, EmailAddress, is_activated, ID_POST_GROUP, пароль, dateRegistered) VALUES ('$ тетЬегЫате', '$ реальное имя', '$ EmailAddress', '$ is_activated', '$ ID_POST_GROUP', ' $ пароль ',' $ dateRegistered ");
("SMF Error 101.234 "); $ Результат = mysql_query ($ запроса) или умереть ("Ошибка SMF 101,234");

Вот и все, что нужно сделать!

Как сделать Миниатюра изображения с помощью PHP

Опубликовано в функции , PHP по ShortLikeAFox по 22 июля 2008

Итак, вы хотите создать миниатюру данное изображение ... PHP, делают эту задачу легко. Сначала я написал функцию ниже для рассмотрения изображения, загруженные пользователями на сайте я могу помочь управлять. Загруженные изображения на этом сайте может быть JPEG, PNG, GIF-либо, так что мне пришлось написать функцию, которая рассматривает все три. Этот код изначально основаны офф функции найти на webcheatsheet.com

Как это сделать:

Функция createThumbs ($ pathToImages, $ Епате, $ pathToThumbs, $ thumbWidth)
(

/ / Проанализировать пути расширения

Информация $ = pathinfo ($ pathToImages. Епате $);
/ / По-прежнему, только если это изображение JPEG
($info['extension']) == 'jpeg') ) если ((strtolower ($ информацию "расширение [']) ==' JPG ') | | (strtolower ($ Информация расширение'] [) == 'JPEG'))
(

/ / Изображений нагрузки и получить размер изображения
$ IMG = imagecreatefromjpeg ("($ pathToImages) ($ Епате)");
$ Ширина = imagesx ($ IMG);
$ Высота = imagesy ($ IMG);

/ / Вычислить размер эскизов
$ = $ New_width thumbWidth;
$ = New_height этаж (высота * $ ($ thumbWidth / $ ширина));

/ / Создаем новую временную изображений
$ = Tmp_img imagecreatetruecolor ($ new_width, $ new_height);

/ / Копирование и изменение размера изображения старого в новый образ
imagecopyresized ($ tmp_img, $ IMG, 0, 0, 0, 0, $ new_width, $ new_height, $ ширина, $ высота);

/ / Сохранить миниатюру в файл
imagejpeg ($ tmp_img, "($ pathToThumbs) ($ Епате)");

)

если (strtolower ($ информацию "расширение [']) ==' GIF ')
(

/ / Изображений нагрузки и получить размер изображения
$ IMG = imagecreatefromgif ("($ pathToImages) ($ Епате)");
$ Ширина = imagesx ($ IMG);
$ Высота = imagesy ($ IMG);

/ / Вычислить размер эскизов
$ = $ New_width thumbWidth;
$ = New_height этаж (высота * $ ($ thumbWidth / $ ширина));

/ / Создаем новую временную изображений
$ = Tmp_img imagecreatetruecolor ($ new_width, $ new_height);

/ / Копирование и изменение размера изображения старого в новый образ
imagecopyresized ($ tmp_img, $ IMG, 0, 0, 0, 0, $ new_width, $ new_height, $ ширина, $ высота);

/ / Сохранить миниатюру в файл
imagegif ($ tmp_img, "($ pathToThumbs) ($ Епате)");

)

если (strtolower ($ информацию "расширение [']) ==' PNG ')
(

/ / Изображений нагрузки и получить размер изображения
$ IMG = imagecreatefrompng ("($ pathToImages) ($ Епате)");
$ Ширина = imagesx ($ IMG);
$ Высота = imagesy ($ IMG);

/ / Вычислить размер эскизов
$ = $ New_width thumbWidth;
$ = New_height этаж (высота * $ ($ thumbWidth / $ ширина));

/ / Создаем новую временную изображений
$ = Tmp_img imagecreatetruecolor ($ new_width, $ new_height);

/ / Копирование и изменение размера изображения старого в новый образ
imagecopyresized ($ tmp_img, $ IMG, 0, 0, 0, 0, $ new_width, $ new_height, $ ширина, $ высота);

/ / Сохранить миниатюру в файл
imagepng ($ tmp_img, "($ pathToThumbs) ($ Епате)");

)

)

Как это работает

Функция createThumbs принимает четыре аргумента.

  • $ PathToImages -> путь к папке файл образа дюйма Это может выглядеть примерно так: / Главная / содержание / имя пользователя / HTML / список / добавления /
  • $ Епате -> имя: pic1.gif, johnny.jpg, и т.д. ...
  • $ PathToThumbs -> путь к папке, вы хотите, эскиз будет дюйма Вы НЕ хочу, чтобы это тот же путь, $ pathToImages, так как миниатюрное изображение будет иметь то же имя, что и исходное изображение.
  • $ ThumbWidth -> ширины, что вы хотите по картинке, чтобы быть в пикселях.

Важное замечание, что я должен делать здесь то, что эта функция не имеет ничего месте, кроме проверки файловой расширение, чтобы убедиться, что файлы не содержат ничего вредоносного. Так как файлы createThumbs () работает с уже загружены предполагается, что файлы были должным образом изучить.

Первая вещь createThumbs () делает вызов pathinfo () . pathinfo () разбивает части пути в виде массива. Это полезно для нас, потому что мы нуждаемся в файл с расширением правильно создать миниатюру. Следующая createThumbs () проверяет, чтобы, если мы имеем дело с JPEG. Если исходный файл JPEG createThumbs создает новое изображение на основе исходного изображения с imagecreatefromjpeg () . Следующим шагом будет получить ширина и высота этого изображения ( imagesx () , imagesy () ). Использование $ thumbWidth и отношение первоначальной ширины и высоты createThumbs () устанавливает новые ширина и высота мин. Используя эти новые отношения createThumbs () создает "пустой" изображение, которое будет такой же ширины и высоты с миниатюрами imagecreatetruecolor () . imagecopyresized () используется для изменения размера изображения и сохранить его в "чистый" только что создали. imagecopyresized (), может показаться, как это имеет много параметров, но если вы посмотрите на документацию, если она на самом деле не так уж сложно. Теперь, когда с миниатюрами существует как истинные цвета изображения всех createThumbs нужно сделать, это преобразовать файл в формате JPEG. Для этого imagejpeg () называется.

Вот как работает функция для JPEG. Есть минимальные различия в. PNG файлов и. GIF.

Как написать браузера Конкретные кодекса PHP

Опубликовано в PHP по ShortLikeAFox по 21 июля 2008

Итак, вы хотите писать код, который появляется только в определенных браузерах ... Есть целый ряд причин, по которым хотите это сделать. Первый раз, когда я лично, необходимых для этого произошло, когда я пытался вставлять mp3 на определенной странице. По некоторым причинам я не мог писать код так, что mp3 будет играть на браузерах проверять на (IE, Firefox и Опера), а также проверки в то же время. Если я правильно помню, он был Internet Explorer, которая была причиной проблемы. Решение, которое я придумал том, чтобы использовать маленький PHP, чтобы узнать, когда пользователь использует IE, а затем вставлять в mp3 недействительный код, если бы это было так.

Это решение привело к mp3 всегда играть правильно, а страница всегда проверки, потому что валидатор W3C никогда не идентифицирует себя как IE. Это не может быть наиболее этических способ достичь соблюдения W3C, но она работает.

В другой раз я помню необходимости писать код конкретного браузера, когда я имел проблемы с IE 6 не отображает мое. PNG изображения правильно. Я Googled вокруг и нашел несколько решений этой проблемы, но оба они оказались испортить общее местах слой на своих страницах. Вместо того, устранение неисправностей, что проблема, я пошел с быстрого решения, и решил для показа. GIF-изображения, когда у пользователя IE 6. Если пользователь был другой браузер, который имел. PNG проблемы, я решил, что это слишком плохо для него.

Как это сделать:

Сначала нужно написать небольшой строки кода, чтобы выяснить, что браузер пользователь. Вот как это сделать с помощью PHP:

  • 'HTTP_USER_AGENT' ]; $ VisitorsOS = $ _SERVER ['HTTP_USER_AGENT'];

Вот три примера того, что $ visitorsOS может выглядеть так

  • Mozilla/4.0 (совместимый; MSIE 6.0; Windows NT 5.1; SV1;. NET CLR 1.0.3705;. NET
  • Opera/9.51 (Windows NT 5.1; U; PL)
  • Mozilla/5.0 (Windows; U; Windows NT 5.1; EN-US; RV: 1,9) Gecko/2008052906 Firefox

Первый пользователь Internet Explorer 6, вторая опера 9,51, и третий Firefox.

Теперь, когда мы знаем больше информации, чем мы действительно нуждаемся о компьютере посетителя мы должны поставить эту информацию с пользой. Допустим, вы хотите писать код, который отображается, только если пользователь работает под управлением любой версии Internet Explorer. В этом случае вы могли бы сделать это:

('MSIE',$visitorsOS)){ если (eregi ('MSIE', $ visitorsOS)) (

Код, который отображается, только если ПОЛЬЗОВАТЕЛЬ IE

)

зе (

Код, который появится во всех других случаях

)

Я использую eregi, чувствительны к регистру матче регулярного выражения вместо EREG, регистр на соответствие регулярному выражению. Я не помню, если я делаю это из паранойя, или, если я действительно нашел случай, когда Internet Explorer определили себя как MSIE. В любом случае eregi не повредит ничего так это то, что я использую. Желание писать код для конкретной версии IE, требуют лишь небольшие изменения. вместо того, ... (eregi ('MSIE' ...) Я хотел бы использовать что-то типа (eregi ('MSIE 6,0' ...), если я хотел код, который только появился на MSIE 6.0.