Программирование HTML Разработка программного обеспечения средствами Open Source Thu, March 28 2024  

Поделиться

Нашли опечатку?

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

Разработка программного обеспечения средствами Open Source Печать
Добавил(а) microsin   

Статья Мартина Стрейчера, технического директора 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 ". 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. Кроме 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

4. Ставим MySQL 5, тоже всего одной командой apt:

# apt-get install mysql-server-5.0

Процедура будет идти несколько дольше (так как пакет требует для себя около 112 мегабайт).

ubuntu-web-prg-mysql5.jpg

Правда, по окончании установки почему-то не запустился мастер и не запросил установки пароля для "MySQL root". Пришлось искать в Интернете, как это делать см. [1]. Когда делаем это первый раз, то так:

$ 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

5. Установка языка программирования 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-приложения.

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

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

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

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

Листинг 4. Пример простой PHP-программы

< html> 
< head>< title>Hello, World! 
  < body> 
    < h1>< ?php echo 'Hello, World! ?> 
   

Для запуска этой программы откройте редактор 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.
    
  
< body>
< ?php
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>Город
< ?php
while ($row = mysql_fetch_assoc($result)) 
{
?> < tr>< td>
< ?php
echo $row{'name'}; 
?>
< td>
< ?php
echo $row{'superpower'}; 
?>
< td>
< ?php
echo $row{'city'}; ?>

< ?php
 mysql_close( $connection );
?>


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

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

ubuntu-web-prg-superhero.jpg

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

Давайте проанализируем наш PHP-код. Для него обычный HTML-текст является как бы контейнером, а PHP-код встраивается в него с помощью тегов < ?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.

[Ссылки]

1. MySQL Change root Password site:cyberciti.biz.

 

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


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

Top of Page