Главная Thursday, June 30 2022  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
лента новостей сайта microsin.ru лента новостей
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:
Кто он-лайн
Сейчас на сайте:
Гостей - 2
Модуль рекламы
Поисковые системы

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

Статья Мартина Стрейчера, технического директора McClatchy Interactive наглядно показывает, как на Ubuntu быстро запустить WEB-сервер и начать программить на PHP.

1. Скачал iso-образ, поставил на VMware Workstation 6.5.3 build-185404. При создании виртуальной машины мастер VMWare запросил имя и пароль для нового пользователя (не root). Запустил форматировать виртуальный диск и забыл про виртуалку, занявшись другими делами. Через полчас с удивлением обнаружил, что готовая Ubuntu уже загрузилась и выдала промт для логина. Залогинился и получил рабочий стол с каки-то бешеным разрешением экрана. Подрегулировал его на привычные 1024x768 и стал оглядываться по сторонам.

2. Первая непривычная засада оказалась с тем, что я не знал, как залогиниться под root. Оказалось, что вчистую залогиниться под root теперь невозможно. Однако можно получить права root, если ввести команду sudo, а в ответ на запрос пароля ввести свой собственный. Подсказку по этому нововведению дает приглашение консоли: "To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details.". Короче, чтобы запустить любую команду/программу с правами root, вводят эту команду с префиксом sudo, а если хотят получить интерактивный root shell, то вводят sudo -i. По умолчанию только ползатель, который заинсталлил ubuntu (то бишь тот аккаунт, за которым я сейчас работаю), имеет права получать административные права через sudo, но можно создавать специальным образом других ползателей с такими же привилегиями (описано как). Там же (man sudo_root) написано, как вс е вернуть на круги своя (но это не рекомендуется). Таким образом, первый пользователь теперь "заменяет" рута, но с требованием вводить свой пароль. Какой в этом смысл, не очень понятно. Получить консоль root можно так (в ответ на запрос пароля вводим собственный):
$ sudo su -
# whoami
root
Чтобы выйти из режима суперпользователя, нажмите Ctrl+D.

Свой любимый Midnight Commander тоже поставил командой apt-get install  mc, тока он у меня в черно-белой консоли ubuntu оказался нефункционален. В putty на хостовой машине результат был лучше, но надо было еще разобраться с кракозябрами в псевдографике бордюров. Поставил также пакет ssh, но уже с помощью System -> Administration -> Synaptic Package Manager.

При попытке установить русскую раскладку (System -> Preferences -> Keyboard) получил ошибку X - сервера.
ubuntu-web-prg-XKBerror01.JPG

3. Открыл для тренировки статью "Разработка программного обеспечения средствами Open Source" http://www.ibm.com/developerworks/ru/edu/wa-openstack/.

4. Кроме Apache существуют и другие Web-серверы для Linux, например, lighttpd (произносится как "лайти") — маленький и быстрый сервер, который проще в настройке, чем Apache.
Устанавливаем lighttpd под ubuntu (должно быть подключение к Интернету):
# apt-get install lighttpd 

Как ни странно, больше ничего делать не надо - все само поставится и серве сразу стартанет. Запустив Firefox с адресом http://127.0.0.1/, увидим страничку, свидетельствующую о том, что lighttpd работает. На хостовой машине этот сервер тоже доступен по адресу http://192.168.58.128/:
user>nmap 192.168.58.128
...
Interesting ports on 192.168.58.128:
Not shown: 1031 closed ports
PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:0C:29:F8:04:AA (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 2.34 seconds
ubuntu-web-prg-lighty.jpg
 

5. Ставим MySQL 5, тоже всего одной командой apt:
# apt-get install mysql-server-5.0
Процедура будет идти несколько дольше (так как пакет требует для себя около 112 мбайт).
ubuntu-web-prg-mysql5.jpg

Правда, по окончании установки почему-то не запустился мастер и не запросил установки пароля для "MySQL root". Пришлось искать в Интернете, как это делать (http://www.cyberciti.biz/faq/mysql-change-root-password/). Когда делаем это первый раз, то так:
mysqladmin -u root password NEWPASSWORD
Если надо поменять уже установленный пароль, то так:
$ mysqladmin -u root -p'oldpassword' password newpass
например:
$ mysqladmin -u root -p'abc' password '123456'

Запуск утилиты MySQL и вывод списка баз данных
$ mysql -u root -p
Enter your password: s0m3p@ssWoRD
mysql> show databases \G
Database: information_schema
Database: mysql
2 rows in set (0.01 sec)
mysql> quit

6. Установка языка программирования PHP 5. Так как lighttpd использует для выполнения Web-приложений FastCGI (Fast Common Gateway Interface – быстрый обобщенный интерфейс шлюзов), важно установить правильную разновидность PHP, которая доступна в apt как php5-cgi. Чтобы PHP мог работать с MySQL, также необходимо установить соответствующий модуль php5-mysql:
# apt-get install php5-cgi php5-mysql php5-gd

Настройка взаимодействия Web-сервера и языка программирования

Теперь, прежде чем можно будет создавать PHP-приложение, требуется только одно действие – правильно настроить взаимодействие lighttpd и PHP. Нажмите Control-D для выхода из режима суперпользователя, а затем введите следующую команду:
$ sudo gedit /etc/php5/cgi/php.ini 

Запустится простой текстовой редактор gedit, похожий на Блокнот из Windows или Text Editor из Mac, и в режиме суперпользователя откроется для редактирования файл /etc/php5/cgi/php.ini. Так как этот файл является системным, то для его изменения необходимы права root. В окне gedit прокрутите текст вниз и найдите такую строку:
; cgi.fix_pathinfo = 0
Измените ее на следующую строку:
cgi.fix_pathinfo = 1  

Для сохранения изменений выберите File > Save или нажмите Control-S. Для выхода нажмите Control-Q. Далее выполните команду:
$ sudo gedit /etc/lighttpd/lighttpd.conf 

Найдите строку, начинающуюся с server.modules=, и добавьте через запятую mod_fastcgi к списку опций в скобках. mod_fastcgi наделяет lighttpd поддержкой PHP в режиме FastCGi. Запросы, поступающие от браузера, принимаются lighttpd, который преобразует их в запросы FastCGI и перенаправляет PHP-модулю. Когда PHP-приложение отсылает ответ, происходит обратный процесс. Обновленный список должен выглядеть как в листинге 2, за исключением, быть может, наличия других модулей.

Листинг 2. Обновленный список в параметре server.modules
server.modules = (
  "mod_fastcgi",
  "mod_access",
  "mod_alias",
  "mod_accesslog",
  "mod_compress"
)
  
Теперь перейдите к концу файла и добавьте следующий параметр, приведенный в листинге 3
Листинг 3. Параметр, заставляющий lighttpd использовать FastCGI-разновидность PHP и правильный сокет.
fastcgi.server = (
  ".php" => ((
 "bin-path" => "/usr/bin/php-cgi",
 "socket" => "/tmp/php.socket"
)))

Приведенный параметр указывает lighttpd местоположение запускаемого файла PHP и файла сетевого соединения (сокета), через которое Web-сервер будет обмениваться данными с PHP. Сохраните редактируемый файл и выйдите из редактора. После изменения настроек lighttpd необходимо перезапустить, что делается командой sudo /etc/init.d/lighttpd restart.
$ sudo /etc/init.d/lighttpd restart
Stopping web server lighttpd [OK]
Starting web server lighttpd [OK]
Теперь вы можете приступить к написанию своего первого (и второго) PHP-приложения. 

7. Ваше первое (а также второе) 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
ubuntu-web-prg-hello.jpg

Вторая 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. Список доступных контрактников-супергероев
ubuntu-web-prg-superhero.jpg

Анализ используемого 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-приложение легко и просто (и дешево). Не забывайте, что в Ubuntu доступны мириады программ – достаточно одной команды Aptitude.

Последнее обновление ( 27.09.2009 )
 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2022