IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Open source | Linux  >

Разработка программного обеспечения средствами Open Source

В Open Source есть все, что нужно разработчику для счастья

developerWorks
На предыдущую страницуСтраница 5 из 11 На предыдущую страницу

Опции документа

Выскажите мнение об этом учебном пособии

Помогите нам улучшить содержание


Ваше первое (а также второе) PHP-приложение

Как было сказано ранее, PHP очень популярен среди языков программирования для Web за счет своей простоты и удобства встраивания в обычный HTML-код (Hypertext Markup Language, язык гипертекстовой разметки). HTML-теги выглядят как <head> и </div>, а PHP-код встраивается в него внутри тегов <? ?>.

Первая PHP-программа

Итак, самая простая PHP-программа может выглядеть примерно так, как показано в листинге 4.


Листинг 4. Пример простой PHP-программы
<html> 
<head> <title> Hello, World!</title> </head> 
  <body> 
	<h1> 
	  <? echo 'Hello, World! ?> 
	</h1> 
  </body> 
</html> 

Для запуска этой программы откройте редактор gedit командой sudo gedit /var/www/hello.php и напечатайте приведенный код. Сохраните файл, перейдите к FireFox и введите в адресной строке http://127.0.0.1/hello.php. Вы должны увидеть страницу, сходную с изображенной на рисунке 4. Если это так, то lighttpd и PHP работают правильно.


Рисунок 4. Результат работы PHP-программы "Hello, World!", выданный lighttpd
Результат работы PHP-программы Hello World, выданный lighttpd

Вторая PHP-программа

А теперь перейдем к написанию более сложного примера, в котором мы соберем воедино все компоненты LAMP, а база данных MySQL будет хранить некую информацию. Предлагаю создать программу, отображающую всех сотрудников Superheroes, Inc. – аутсорсинговой компании, предоставляющей услуги супергероев. Для этого необходимо проделать следующие шаги:

  1. Спроектировать и создать базу данных, содержащую таблицу со списком сотрудников.
  2. Наполнить таблицу некоей информацией.
  3. Написать PHP-код, соединяющийся с базой данных и выводящий список на Web-странице.

Создание и наполнение базы данных

Приведенный в листинге 5 фрагмент кода, представляющий собой SQL-скрипт, делает следующее:

  1. Создает базу данных с именем superheroes.
  2. Создает таблицу с именем members внутри базы данных superheroes.
  3. Добавляет в таблицу members четыре записи.
  4. Создает в MySQL пользователя hero и наделяет его правами на чтение и изменение нашей базы данных.

Листинг 5. SQL-скрипт для создания и наполнения базы данных superheroes
					
DROP DATABASE IF EXISTS `superheroes`;

CREATE DATABASE `superheroes`;

USE `superheroes`;

DROP TABLE IF EXISTS `members`;

CREATE TABLE `members` (
  `id` int(11) NOT NULL,
  `name` varchar(128) NOT NULL,
  `city` varchar(128) NOT NULL,
  `superpower` varchar(128) NOT NULL,
  `initiated` date NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`),
  KEY `name` (`name`)
) ENGINE=MyISAM;

INSERT INTO `members` 
  (`id`, `name`, `city`, `superpower`, `initiated`) 
VALUES 
  (1,'Бэтмен','Готэм-сити','Детективные способности','1939-05-01'),
  (2,'Человек-паук','Нью-Йорк','Паутины','1962-08-01'),
  (3,'Красный дьявол','Нью-Йорк, Hell\'s Kitchen','Радиолокация','1964-04-01'),
  (4,'Супермен','Метрополис','Сила','1938-06-01');

GRANT ALL ON `superheroes`.* 
  TO 'hero'@'localhost' IDENTIFIED BY 'shizzle';

Как правило, во избежание неразберихи для каждого Web-приложения создают свою базу данных MySQL и используют уникальную учетную запись для доступа. Также никогда не используйте в приложении учетную запись root MySQL, так как неправильное поведение программы может привести к потере всех данных. На практике обычно создают в MySQL другого суперпользователя, а пользователя root удаляют.

Как и раньше, создайте с помощью gedit файл, вставьте в него приведенный фрагмент кода и сохраните под именем superheroes.sql. Далее используйте утилиту командной строки mysql для запуска скрипта. Так как пользователь hero еще не создан, придется выполнить скрипт от MySQL-пользователя root:

 $ mysql -uroot -p < superheroes.sql
Enter password: 

Введите ваш пароль для MySQL-пользователя root и нажмите Enter. Чтобы увидеть результат, соединитесь с базой данной уже от имени hero и выведите содержимое таблицы, которое показано в листинге 6.


Листинг 6. База данных Superheroes
$ mysql -uhero -pshizzle superheroes
mysql> select * from members;
-----+----------------+----------------+-------------------------+-------------
| id | name           | city           | superpower              | initiated  |
-----+----------------+----------------+-------------------------+-------------
|  1 | Бэтмен         | Готэм-сити     | Детективные способности | 1939-05-01 | 
|  2 | Человек-паук   | Нью-Йорк       | Паутины                 | 1962-08-01 | 
|  3 | Красный дьявол | Нью-Йорк,      | Радиолокация            | 1964-04-01 | 
|    |                | Hell's Kitchen |                         |            |
|  4 | Супермен       | Метрополис     | Сила                    | 1938-06-01 | 
-----+-----------------+---------------+-------------------------+-------------
4 rows in set (0.00 sec)
		

Отлично! База данных готова.

Создание Web-страницы

В Листинге 7 приведен PHP-код, используемый в нашей Web-странице


Листинг 7. PHP-код для создания страницы Superheroes, Inc.
<html>
<head>
<title>
  Сотрудники Superheroes, Inc.
</title>
</head>
<body>
<? 
  if ( ! ( $connection = mysql_connect("localhost", "hero", "shizzle" ) ) ) {
	die( 'Возникла ошибка. Проверьте сетевые настройки.' );
  }

  if ( !mysql_select_db( "superheroes", $connection ) ) {
	die( 'Возникла ошибка. Проверьте базу данных и права доступа.' );
  }

  $query = "select * from members order by name";
  if ( ! ( $result = mysql_query( $query, $connection ) ) ) {
	die( 'Возникла ошибка. ' . mysql_error() );
  }
?>

  <table>
	<tr>
	  <th>Имя</th>
	  <th>Сверхъестественные способности</th>
	  <th>Город</th>
	</tr>
<?
	while ($row = mysql_fetch_assoc($result)) {	
?>
	  <tr>
		<td><? echo $row{'name'}; ?></td>
		<td><? echo $row{'superpower'}; ?></td>
		<td><? echo $row{'city'}; ?></td>
	  </tr>
<?
	}
?>	
  </table>

<?
  mysql_close( $connection );
?>
</body>
</html>

Наберите этот код в редакторе gedit (или скопируйте и вставьте из браузера) и сохраните в файл под именем /var/www/superhero.php. Запустите Firefox и откройте страницу с адресом http://127.0.0.1/superhero.php. Через мгновение – быстрее, чем пролетит пуля – появится страница появится страница, показанная на рисунке 5.


Рисунок 5. Список доступных контрактников-супергероев
Список доступных контрактников-супергероев

Анализ используемого PHP-кода

Давайте проанализируем наш PHP-код. Для него обычный HTML-текст является как бы контейнером, а PHP-код встраивается в него с помощью тегов <? ?>. Таким образом возможно сочетать HTML- и PHP-код, что мы и сделали для отображения таблицы героев. Приложение соединяется с локальным MySQL-сервером, выбирает базу данных, выполняет запрос и выводит результат. А теперь то же самое, но подробнее:

  1. Функция mysql_connect() устанавливает соединение с MySQL-сервером, находящимся на локальной машине (локальную машину принято называть localhost), используя авторизационные данные hero.
  2. Функция mysql_select_db() делает базу данных superheroes текущей, поэтому все последующие операции чтения, записи, изменения и удаления будут применены к этой базе данных (до тех пор, пока другая база данных не будет выбрана функцией mysql_select_db()).
  3. Функция mysql_query() запрашивает информацию у базы данных. Наш запрос охватывает все столбцы и все строки таблицы, отсортированные по полю имени. mysql_query() возвращает набор результатов (result set) – своего рода указатель на список всех подходящих строк.
  4. Цикл далее интерпретирует строки набора результатов как ассоциативный массив: индексами массива являются имена – в нашем случае это имена интересующих столбцов. (Вспомните, что в обычных массивах для индекса используется целое число). Например, $row{'name'} означает содержимое поля name текущей строки.
  5. После того как весь результат выведен в HTML-таблицу, соединение с базой данных закрывается функцией mysql_close(). На этом PHP-программа завершается.

Вот и все! Конечно, нашей программе еще очень далеко до Web-страниц Twitter или Mint.com (см. ссылки в разделе Ресурсы), однако мы все же продемонстрировали, что запустить Web-приложение легко и просто (и дешево). Не забывайте, что в Ubunto доступны мириады программ – достаточно одной команды Aptitude.

Усовершенствования и оптимальные методики

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

  • Описывайте логику и представления раздельно
  • Не забывайте об объектно-ориентированном подходе
  • Используйте готовые программные среды

Раздельное описание логики и представления

Храните раздельно ваш код (логику) и HTML (представление). Практически во всех языках Web-программирования есть механизмы шаблонов, реализующие это разделение. После инициализации всех пользовательских структур данных управление передается на подсистему шаблонов, которая распознает и отображает содержимое структур. Благодаря шаблонам HTML-код легче воспринимать "на глаз", а работа четко разделяется между разработчиком и дизайнером. Одной из систем шаблонов, широко используемой для PHP, является Smarty. Для Perl популярна система Template Toolkit.

Объектно-ориентированный подход

Все современные языки программирования так или иначе поддерживают объекты. Имея опыт работы с C++ или Smalltalk, вы без труда найдете язык для Web-программирования с поддержкой ООП. Например, Perl обладает весьма гибким синтаксисом, а его девиз – "все можно сделать несколькими способами". И напротив, существуют и весьма строгие языки, такие как Python, в котором символ пробела является неотъемлемой частью синтаксиса.

Готовые программные среды

Подумайте об использовании готовых программных сред – в большинстве случаев "изобретать велосипед" не нужно. Программная среда может представлять собой просто набор классов, а может включать полный набор принципов, утилит и технологий, являющихся плодом творения других людей и ускоряющих ваш путь к рынку. Осмотритесь вокруг – быть может, вы сначала найдете подходящую программную среду, которая, в свою очередь, определит выбор языка программирования.

Одна из программных сред – Ruby on Rails – фактически приобщила тысячи программистов к языку Ruby. Скриптовый язык Ruby обладает мощью Perl, объектно-ориентированными средствами Java и кратким синтаксисом Python. Если вы собираетесь заняться Web-разработкой на Open Source, вам стоит взглянуть на Ruby on Rails.


На предыдущую страницуСтраница 5 из 11 На предыдущую страницу
    IBM в России Конфиденциальность Контакты