Установка и настройка Apache + Php + MySql на FreeBSD
способ быстрой инсталляции и настройки наиболее простого и часто используемого набора:
HTTP-сервер Apache, Интерпретатор php4, СУБД - MySql;
Пример конфигурации и установки для FreeBSD.
Необходимые пояснения:
Все пути относительны (вы можете выбрать и другие) а версии программ актуальны на момент написания статьи, если вы используете другие версии или устанавливаете программы по другим директориям, то будьте внимательны и корректируйте соответствующие команды и директивы.
Перед инсталляцией желательно проверить наличие (а если нет то установить) gcc, gmake, Perl5, p5-DBI p5-Mysql - все это можно установить из Packages или через ports (если есть выход в инет)
В первую очередь необходимо скачать исходные файлы (или где нибудь взять):
Apache-v 1.3.12
MySQL-v 3.22.32
PHP- v 4.0
Создадим временную директорию
shell> mkdir /var/src/distfiles
cкопируем туда полученные файлы
shell> cp apache_1.3.12.tar.gz /var/src/distfiles
shell> cp mysql-3.22.32.tar.gz /var/src/distfiles
shell> cp php-4.0.0.tar.gz /var/src/distfiled
разархивируем все эти файлы
shell> tar -xzvf apache_1.3.12.tar.gz
shell> tar -xzvf mysql-3.22.32.tar.gz
shell> tar -xzvf php-4.0.0.tar.gz
В первую очередь установим MySql
Перейдем в каталог
shell>cd /var/src/distfiles/mysql-3.22.32
Далее запустим скрипт конфигурации
shell> ./configure --with-charset=koi8_ru --prefix=/usr/local/mysql
ну и компильнем
shell> ./make && make install
если все нормально, тогда идем далее
shell> ./script/mysql_install_db
Проверим директоию /usr/local/etc/rc.d
В ней должен получиться файлик mysql-server.sh
Примерно следующего содержания
#!/bin/sh
#
if [ -x /usr/local/bin/safe_mysqld ]
then
/usr/local/bin/safe_mysqld -user=mysql > /dev/null & && echo - n 'mysql'
fi
Перегрузимся
shell> reboot
После перезагрузки проверьте присутствует ли процесс в памяти
shell> ps -a|grep mysql
После этого сделаем проверочку
shell> mysqlshow
Должно появиться что-то типа
+---------------+
| Databases |
+---------------+
|mysql |
|test |
+---------------+
Установка сервера MySQL (операционная система Unix FreeBSD-2.2.7). Копируем с http://www.mysql.com/ файл mysql-3_22_32_tar.gz. Далее выполняем команды:
$ gunzip mysql-3_22_32_tar.gz
$ tar xvf mysql-3_22_32_tar
$ cd mysql-3.22.32
$ ./configure –with-mit-threads
$ make
$ make install
$ scripts/mysql_install_db
Запускаем сервер mysql:
$ /usr/local/bin/safe_mysqld &
Меняем пароль например на “123456”
$ /usr/local/bin/mysqladmin –u root password ‘123456’
Рассмотрим пример создания двух пользователей. Однако работать будем с последним. Первый – alex, который может получить доступ к серверу MySQL, установленному на машине cel.tup, только с клиентской машины ikc1.tup. Он должен иметь привилегии на выборку, внесение изменений в базу данных ism. Второй пользователь – admin, имеющий доступ к серверу MySQL (host - cel.tup) также только с машины ikc1.tup, но все возможные привилегии при работе со всеми базами данных.
Для предоставления прав доступа СУБД MySQL имеет специальную базу данных mysql с тремя таблицами. Поскольку для создания вышеупомянутых пользователей потребуется только две таблицы, распечатаем их содержимое с помощью команды mysqlshow:
$ mysqlshow -u root -p mysql user
Enter password:
Database: mysql Table: user Rows: 6
+-----------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| Host | char(60) | | PRI | | |
| User | char(16) | | PRI | | |
| Password | char(16) | | | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Reload_priv | enum('N','Y') | | | N | |
| Shutdown_priv | enum('N','Y') | | | N | |
| Process_priv | enum('N','Y') | | | N | |
| File_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
+-----------------+---------------+------+-----+---------+-------+
$ mysqlshow -u root -p mysql db
Enter password:
Database: mysql Table: db Rows: 2
+-----------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| Host | char(60) | | PRI | | |
| Db | char(32) | | PRI | | |
| User | char(16) | | PRI | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
+-----------------+---------------+------+-----+---------+-------+
Для добавления пользователей введем команды:
> mysql -u root -p
Enter password:
mysql> use mysql;
mysql> insert into user values ('ikc1.tup','alex',password('alex317'),
-> 'n','n','n','n','n','n','n','n','n','n','n','n','n','n');
mysql> insert into user values ('ikc1.tup','admin',password('admin317'),
-> 'y','y','y','y','y','y','y','y','y','y','y','y','y','y');
mysql> insert into db values ('ikc1.tup','ism','alex',
-> 'y','y','n','n','n','n','n','n','n','n');
mysql> quit
После внесенных изменений в базу данных прав пользователей необходимо перегрузить сервер MySQL:
$ mysqladmin -u root -p reload
Enter password:
$
В качестве примера рассмотрим создание простой базы данных в которой содержатся записи с информацией о сотрудниках университета. Ввод в базу данных, ее корректировка должны проводиться с компьютера клиента через формы броузера, например Netscape Communicator.
Создаем базу данных ism и таблицу в ней teacher:
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 3.22.32
Type 'help' for help.
mysql> create database ism;
Query OK, 1 row affected (0.04 sec)
mysql> use ism1;
Database changed
mysql> create table teacher (user_name VARCHAR(25), phone VARCHAR(10),
-> job BLOB, img VARCHAR(20));
Query OK, 0 rows affected (0.02 sec)
mysql> quit
Bye
$
Ниже приведен файл index.html который формирует меню режимов работы с базой данных:
<html><head><title>Menu</title></head><body>
<b><a href="../~alex/form1.html">1.Добавить запись в базу данных </a><br>
<a href="../~alex/form2.html">2.Найти запись по Ф.И.О. </a><br>
<a href="../~alex/form3.html">3.Удалить запись </a><br>
<a href="../~alex/form4.html">4.Отредактировать запись </a></b>
</body></html>
Для каждого из представленных здесь пунктов меню должны быть созданы формы на языке html, обеспечивающих передачу данных web-серверу посредством скриптов, написанных на PHP.
Первая форма и скрипт предназначены для добавления записей в базу данных сервера MySQL.
Файл form1.html:
<html><head><title>form1</title><body>
<form method=post action="form1.php"><br><b>Введите Ваше имя:</b>
<br><input name="user_name" value="" size=30>
<br><br><b>Введите номер Вашего телефона:</b> <br><input name="phone" value="" size=10>
<br><br><b>Введите краткую характеристику:
<br><TEXTAREA NAME="job" ROWS=10 COLS=40></TEXTAREA>
<br><br><b>Введите имя фото лат.буквами:</b>
<br><input name="img" value="nofoto.jpg" size=20>
<br><br><input type="submit" value="Зарегистрировать">
</form></body></html>
Файл form1.php:
<?
/* Определяем значения переменным */
$hostname="cel.tup"; $username="alex"; $password="alex317";
/* Имя базы данных */
$dbName="ism";
/* Таблица MySQL */
$usertable="teacher";
/* Создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу подсоединиться");
/* Выбор БД */
MYSQL_SELECT_DB($dbName) or die("Не могу выбрать БД");
/* Введение информации в БД */
$query="INSERT INTO $usertable VALUES ('$user_name','$phone','$job','$img')";
$result=MYSQL_QUERY($query);
/* Закрыть соединение */
MYSQL_CLOSE();
print "Запись введена в БД! <br>"; print "<a href='../~alex'>Назад в меню</a>";
?>
Необходимо заметить, что в базе данных ism хранятся только имена фотографий сотрудников, сами фотографии находятся в подкаталоге pics.
Вторая форма и скрипт предназначены для выборки записей из базы данных сервера MySQL.
Файл form2.html:
<html><head><title>Выборка данных</title>
<body><form action="form2.php" method="post"><b>Введите Ф.И.О.<b>
<input type="text" name="user_name" size=30><input type="submit" value="Ввести!">
</form></body></html>
Файл form2.php:
<?php
$hostname="cel.tup"; $username="admin"; $password="admin317"; $dbName="ism";
$usertable="teacher";
mysql_connect($hostname,$username,$password) or die("No connect");
mysql_select_db("$dbName") or die("No select DB");
/* Выбрать сотрудников, имена которых начинаются на $user_name */
$query="select * from teacher where user_name like '$user_name%'";
$result=mysql_query($query);
/* Сколько нашлось таких сотрудников? */
$number=mysql_numrows($result);
/* Распечатка выбранных сотрудников */
$i=0;
if ($number == 0)
{ print "Нет данных о $user_name в БД <br>"; }
elseif ($number > 0)
{
while ($i < $number)
{
/* Присвоение переменным значений полей user_name, phone, job, img для i-й строки */
$user_name=mysql_result($result,$i,"user_name");
$phone=mysql_result($result,$i,"phone");
$job=mysql_result($result,$i,"job");
$img=mysql_result($result,$i,"img");
/* Вывод фотографии i-го сотрудника высотой 130 пикселей */
print "<br><img src='pics/$img' height=130><br>";
/* Вывод Ф.И.О. i-го сотрудника */
print "<u> Ф.И.О.:</u> <br>";
print "$user_name <br><br>";
/* Вывод телефона i-го сотрудника */
print "<u> Телефон: </u><br>";
print "$phone <br><br>";
/* Вывод краткой характеристики i-го сотрудника */
print "<u> Характеристика: </u><br>";
print "$job <br>";
$i++;
print "<hr>";
}
}
print "<a href='../~alex'>Назад в меню</a>";
?>
Третья форма и скрипт предназначены для удаления записей из базы данных сервера MySQL.
Файл form3.html:
<html><head><title>Выборка данных</title><body>
<form action="form3.php" method="post"><b>Введите Ф.И.О. для удаления:<b>
<input type="text" name="user_name" size=30><input type="submit" value="Ввести!">
</form></body></html>
Файл form3.php:
<?php
$hostname="cel.tup"; $username="admin"; $password="admin317"; $dbName="ism";
$usertable="teacher";
mysql_connect($hostname,$username,$password) or die("No connect");
mysql_select_db("$dbName") or die("No select DB");
/* Удаление записи для поля user_name */
$query="delete from $usertable where user_name='$user_name'";
$result=mysql_query($query);
print "Запись удалена <br>";
print "<a href='../~alex'>Назад в меню</a>";
?>
Четвертая форма и скрипт предназначены для редактирования записей в базе данных сервера MySQL.
Файл form4.html:
<html><head><title>Корректировка данных</title><body>
<form action="form4.php" method="post">
<b>Введите Ф.И.О., данные для которой необходимо изменить:<b>
<br><input type="text" name="user_name" size=30><input type="submit" value="Ввести!">
</form></body></html>
Файл form4.php:
<?php
$hostname="cel.tup"; $username="admin"; $password="admin317"; $dbName="ism"; $usertable="teacher";
mysql_connect($hostname,$username,$password) or die("No connect");
mysql_select_db("$dbName") or die("No select DB");
/* Выбор записей по полю user_name */
$query="select * from $usertable where user_name='$user_name'";
$result=mysql_query($query);
/* Определение существованя выбранных записей */
$number=mysql_numrows($result);
if ($number==0)
{
print "Нет такой записи!<br>";
print "<a href='../~alex'>Назад в меню</a>";
}
/* Если запись выбрана из базы данных, вывести все ее поля в форму для редактирования */
/* И удалить выбранную запись */
else
{
/* Присвоение переменным значений полей для выбранной записи */
$phone=mysql_result($result,0,"phone");
$job=mysql_result($result,0,"job");
$img=mysql_result($result,0,"img");
print "<img src='pics/$img' height=130><br>";
/* Удаление записи */
$query="delete from $usertable where user_name='$user_name'";
$result=mysql_query($query);
/* Создание формы для редактирования */
print "<form method=post action='form5.php'>";
print "<br><b>Введите Ваше имя:</b>";
print "<br><input name='user_name' value='$user_name' size=30>";
print "<br><br><b>Введите номер Вашего телефона:</b>";
print "<br><input name='phone' value='$phone' size=10>";
print "<br><br><b>Введите краткую характеристику:";
print "<br><TEXTAREA NAME='job' ROWS=10 COLS=40>$job</TEXTAREA>";
print "<br><br><b>Введите имя фото лат.буквами:</b>";
print "<br><input name='img' value='$img' size=20>";
print "<br><br><input type='submit' value='Зарегистрировать'>";
print "</form>";
}
?>
Файл form5.php. Предназначен для ввода в базу данных в форме отредактированной записи.
<?
/* Определяем значения переменным */
$hostname="cel.tup"; $username="admin"; $password="admin317";
/* Имя базы данных */
$dbName="ism";
/* Таблица MySQL */
$usertable="teacher";
/* Создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу подсоединиться");
/* Выбор БД */
MYSQL_SELECT_DB($dbName) or die("Не могу выбрать БД");
/* Введение информации в БД */
$query="INSERT INTO $usertable VALUES ('$user_name','$phone','$job','$img')";
$result=MYSQL_QUERY($query);
/* Закрыть соединение */
MYSQL_CLOSE();
print "Запись введена в БД! <br>"; print "<a href='../~alex'>Назад в меню</a>";
?>
Рассмотренный здесь подход для создания и работы с простейшей базой данных применим и для построения достаточно сложных баз данных, содержащих большое количество полей и условий выборки по ним. Например, задачи о учете, перемещении кадров на крупных предприятиях, имеющих филиалы. Для таких задач размеры приведенных здесь программ увеличаться из-за необходимости обработки большого количества полей, введения логических условий при выборке данных, организации форматированного вывода.