PHP.SU

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

Страниц (1): [1]

> Найдено сообщений: 5
kto-to Отправлено: 09 Мая, 2011 - 22:03:21 • Тема: Оптимизация кода. • Форум: Наработки по собственным проектам

Ответов: 18
Просмотров: 6377
Прошу прощения, что не отписался сразу, отсутствовал.

Haron:
То-есть, каждый элемент (вне зависимости от того, каталог это, или страница) помещается в основную таблицу, для каждого элемента задается тип (каталог, страница), и согласно этому типу, обрабатываются данные, полученные из БД?
По поводу второй таблицы, не совсем понял. Просто указываем родительский элемент, или как? Указать родительский элемент можно и в основной таблице, зачем создавать вторую?

Stierus, и вас благодарю, что присоединились к нашей дискуссии!
Я вдумался еще до того, как начал этим заниматься, и поверьте, если бы у меня была возможность, я бы, с превеликим удовольствием, предложил заняться этим профессионалам. Более того, если мне удастся раскрутить проект, или привлечь инвестиции, я это сразу сделаю. А по поводу абсурда... Что я могу сказать, не без этого.

Я очень прошу вас, Stierus, и всех остальных форумчан, не отговаривать меня, а, если есть что посоветовать, дать дельный совет. В конце концов, опыт приходит с практикой, а до этого момента, многие "познают мир", в том числе, и на форумах.
kto-to Отправлено: 02 Мая, 2011 - 22:13:48 • Тема: Оптимизация кода. • Форум: Наработки по собственным проектам

Ответов: 18
Просмотров: 6377
OrmaJever, EuGen, и вас благодарю за советы!

1. Я в итоге сделал, md5(md5(solt).md5(pass).md5(solt)). Не без фанатизма получилось.
2. От преждевременной оптимизации отказываюсь. Убедили.
3. С адаптерами и шаблонами проектирования пошел разбираться. С ООП у меня тяжело, так что будет не скучно...
(Добавление)
Мелкий пишет:
придёте к решению, что всё это надо выбросить и писать нормально

Собственно, уже пришел... Попробую начать с начала.

Основой проекта должна стать cms с функционалом схожим с функционалом доски объявлений. О дополнительных функциях, которые должны сделать проект уникальным, пока, говорить не имеет смысла. Расскажу, что должно быть в основной части. Примеры на авто, так проще.

По типам страниц:
1. Должны быть страницы каталога сортирующие товары по производителю (бмв/мерседес/ауди), наименованию товара (автомобиль/грузовик/мотоцикл) и сфере применения товара (бизнес авто/семейное авто/авто выходного дня).
2. Должна быть страница товара. На ней общая информация, технические характеристики, фотографии и прочая ерунда. Так же на странице товара должен быть список предложений (объявлений), по этому товару. Эти предложения содержат минимальную информацию 2-3 поля, но их очень много.
3. Должен быть поиск и расширенный поиск (примерно как на авто.ру).
4. Должен быть личный кабинет пользователя.

По функционалу:
1. На странице товара должны высвечиваться конкурирующие товары (предположим для бмв это будут мерседес и ауди соответствующих моделей).
2. Многоязычность. Языков очень много, почти все (боюсь представить, что там с кодировками начнется). Для каждой страны свой домен 3го уровня (как в википедии).
3. Функции только для пользователей (ну это банально).
4. Псевдостатические страницы на всех языках.

Вот как-то так должна выглядеть основа. Дальше весь функционал будет крепиться к этой основе.

Как лучше структурировать БД? Как лучше с многоязычностью быть? Как лучше организовать структуру движка? Вопросов море...

Если не сложно, подскажите, с чего начать, чтоб было по уму все? Задайте вектор правильного движения!
kto-to Отправлено: 02 Мая, 2011 - 20:16:38 • Тема: Оптимизация кода. • Форум: Наработки по собственным проектам

Ответов: 18
Просмотров: 6377
2 Мелкий

О sha1 прочитал. Я так понимаю, что принцип, по сути, такой же, как и у md5. Существенной разницы между ними, я найти не могу. Единственное, возможно использовать их совместно. Или я ошибаюсь?

Преждевременная оптимизация, возможно. Но нет ничего более постоянного, чем что-либо временное. Не хочется в итоге получить две килотонны медленного кода, который надо везде подправить. Возможно php не самый быстрый язык, но именно он мне в данной ситуации позволит относительно быстро добиться цели. И именно от него я сейчас намерен получить максимальную скорость.
kto-to Отправлено: 02 Мая, 2011 - 19:06:12 • Тема: Оптимизация кода. • Форум: Наработки по собственным проектам

Ответов: 18
Просмотров: 6377
Haron, DlTA, Champion, Мелкий, благодарю за ответы!

1. А что mysql_escape_string() пропустит? По идее, БД должна уметь обрабатывать любые данные, просто их надо предоставить в нужном виде, или я чего-то не так понимаю? Как там SQL-inj провести?
2. Слышал, что md5 лучше использовать с солью. Переделаю. А, на самом деле, какая реальная альтернатива md5?
3. Для буферизации, пока, рано. Тут вывода еще нет. Но обязательно учту, когда буду писать вывод.
4. Да, со структурой БД у меня беда. Переделаю.
5. Подключение к БД сознательно не стал выносить в отдельный файл, потому, что include() замедлит скорость работы скрипта.
6. Оправдано ли использование trim()... Думаю, что стоит оставить, потому, что пробелы по краям редко ставятся сознательно. Хотя... Лишняя функция - лишнее время.
7. $_SERVER['DOCUMENT_ROOT'] - это да. Переделаю.
8. По поводу комментариев уже сломал себе голову... Выносить блоки в функции - увеличить время выполнения сценария, а совсем без комментариев код слабо читабельный.
9. Хотелось бы, чтоб обошлось без этого, но хакерские атаки (не знаю, на сколько профессиональные, но заказные) скорее всего будут.

Да, по поводу библиотеки абстракций от БД... Опять же, она облегчает процесс написания, но замедляет выполнение сценариев. Да и приложения сторонних разработчиков, без крайней необходимости, я использовать не хочу.
kto-to Отправлено: 02 Мая, 2011 - 00:44:32 • Тема: Оптимизация кода. • Форум: Наработки по собственным проектам

Ответов: 18
Просмотров: 6377
Здравствуйте!

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

Общий смысл файла index.php:
1. Определяем, авторизован ли пользователь (получаем права и прочую информацию, которая потом пригодится).
2. Определяем, язык на котором выводим контент (если пользователь авторизован, у него в настройках указан язык).
3. По URI находим контент в БД (получаем тип страницы и прочую информации, которая потом пригодится).
4. Подключаем модуль, соответствующий типу страницы (каталог, галерея, контент, ...).


Если не сложно, посоветуйте, пожалуйста, как оптимизировать код и, возможно, структуру движка.


index.php:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.  
  4. /******************** VARIABLES ********************/
  5. $db_host = "localhost";
  6. $db_port = "3306";
  7. $db_user = "root";
  8. $db_pass = "";
  9. $db_base = "test";
  10.  
  11. $d_user_data = array("nobody"); // Default user value.
  12. $d_language = "en"; // Default language value.
  13. $d_urn = "main";  // Default URN value.
  14.  
  15. /******************** DB ********************/
  16. $db_link = mysql_connect($db_host.":".$db_port, $db_user, $db_pass) or die(mysql_error());
  17. mysql_select_db($db_base, $db_link) or die(mysql_error());
  18.  
  19. /******************** USER ********************/
  20. $user_data = $d_user_data;
  21. if (isset($_SESSION['user']) and isset($_SESSION['pass'])) {
  22.     $_SESSION['user'] = trim($_SESSION['user']);
  23.     $_SESSION['pass'] = trim($_SESSION['pass']);
  24.     if (strlen($_SESSION['user']) > 0 and strlen($_SESSION['pass']) > 0) {
  25.         $sql = mysql_query("SELECT * FROM `users` WHERE user = `".mysql_escape_string($_SESSION['user'])."' AND pass = '".mysql_escape_string($_SESSION['pass'])."' LIMIT 1") or die(mysql_error());
  26.         if (mysql_num_rows($sql) != 1) {
  27.             $user_data = mysql_fetch_row($sql);
  28.         }
  29.     }
  30. } else if (isset($_POST['user']) and isset($_POST['pass'])) {
  31.     $_POST['user'] = trim($_POST['user']);
  32.     $_POST['pass'] = trim($_POST['pass']);
  33.     if (strlen($_POST['user']) > 0 and strlen($_POST['pass']) > 0) {
  34.         $_SESSION['user'] = $_POST['user'];
  35.         $_SESSION['pass'] = md5($_POST['pass']);
  36.         $sql = ("SELECT * FROM `users` WHERE user = '".mysql_escape_string($_POST['user'])."' AND pass = '".mysql_escape_string(md5($_POST['pass']))."' LIMIT 1") or die(mysql_error());
  37.         if (mysql_num_rows($sql) != 1) {
  38.             $user_data = mysql_fetch_row($sql);
  39.         }
  40.     }
  41. }
  42.  
  43. /******************** LANGUAGE ********************/
  44. $language = $d_language;
  45. if ($user_data != $d_user_data) {
  46.     $language = $user_data[4]; // $user_data[4] = language
  47. } else if (isset($_SESSION['language'])) {
  48.     $_SESSION['language'] = trim($_SESSION['language']);
  49.     if (strlen($_SESSION['language']) == 2) {
  50.         $sql = mysql_query("SELECT * FROM `languages` WHERE language = '".mysql_escape_string($_SESSION['language'])."' LIMIT 1") or die(mysql_error());
  51.         if (mysql_num_rows($sql) != 1) {
  52.             $language = $_SESSION['language'];
  53.         }
  54.     }
  55. }
  56. if (isset($_POST['language'])) {
  57.     $_POST['language'] = trim($_POST['language']);
  58.     if (strlen($_POST['language']) == 2) {
  59.         $sql = mysql_query("SELECT * FROM `languages` WHERE language = '".mysql_escape_string($_POST['language'])."' LIMIT 1") or die(mysql_error());
  60.         if (mysql_num_rows($sql) != 1) {
  61.             $_SESSION['language'] = $language = $_POST['language'];
  62.         }
  63.     }
  64. }
  65.  
  66. /******************** PAGE ********************/
  67. $urn = $d_urn;
  68. if (isset($_GET['urn'])) {
  69.     $_GET['urn'] = trim($_GET['urn']);
  70.     $urn = $_GET['urn'];
  71. }
  72. $sql = mysql_query("SELECT * FROM `pages` WHERE `urn` = '".mysql_escape_string($urn)."' LIMIT 1") or die(mysql_error());
  73. $page_data = mysql_fetch_row($sql);
  74. if (mysql_num_rows($sql) != 1) {
  75.     $urn = $d_urn;
  76.     $sql = mysql_query("SELECT * FROM `pages` WHERE `urn` = '".mysql_escape_string($urn)."' LIMIT 1") or die(mysql_error());
  77.     $page_data = mysql_fetch_row($sql);
  78. }
  79.  
  80. /******************** INCLUDE ********************/
  81. $path = "/home/localhost/subdomain/";
  82. include $path.$page_data[1].".php"; // $page_data[1] = type
  83.  
  84. /******************** DB ********************/
  85. mysql_close($db_link);
  86. ?>
  87.  



Дамп базы:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. -- phpMyAdmin SQL Dump
  3. -- version 3.2.3
  4. -- http://www.phpmyadmin.net
  5. --
  6. -- Host: localhost
  7. -- Generation Time: May 02, 2011 at 01:36 AM
  8. -- Server version: 5.1.40
  9. -- PHP Version: 5.3.3
  10.  
  11. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  12.  
  13. --
  14. -- Database: `test`
  15. --
  16.  
  17. -- --------------------------------------------------------
  18.  
  19. --
  20. -- Table structure for table `pages`
  21. --
  22.  
  23. CREATE TABLE IF NOT EXISTS `pages` (
  24.   `id` int(11) NOT NULL,
  25.   `type` text COLLATE utf8_unicode_ci NOT NULL,
  26.   `urn` text COLLATE utf8_unicode_ci NOT NULL,
  27.   KEY `id` (`id`)
  28. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  29.  
  30. --
  31. -- Dumping data for table `pages`
  32. --
  33.  
  34. INSERT INTO `pages` (`id`, `type`, `urn`) VALUES
  35. (0, 'catalog', 'main'),
  36. (1, 'page', 'page1');
  37.  
  38. -- --------------------------------------------------------
  39.  
  40. --
  41. -- Table structure for table `users`
  42. --
  43.  
  44. CREATE TABLE IF NOT EXISTS `users` (
  45.   `id` int(11) NOT NULL,
  46.   `user` text COLLATE utf8_unicode_ci NOT NULL,
  47.   `pass` text COLLATE utf8_unicode_ci NOT NULL,
  48.   `language` text COLLATE utf8_unicode_ci NOT NULL,
  49.   KEY `id` (`id`)
  50. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  51.  
  52. --
  53. -- Dumping data for table `users`
  54. --
  55.  
  56. INSERT INTO `users` (`id`, `user`, `pass`, `language`) VALUES
  57. (0, 'nobody', '', 'ru'),
  58. (1, 'alfred', 'dd88f82e4a92f5b61f65c456d544d010', 'en'),
  59. (3, 'vasya', 'a2e2fb92e9ea48f1b26b67983ea729a3', 'ru');
  60.  


Значения для POST переменных, пока, подставлять не пробовал, но, думаю, должно работать без особых ошибок.

P.S.: Что-то мне подсказывает, что получилось ужасно криво...

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB