Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода ТОБД.doc
Скачиваний:
24
Добавлен:
13.04.2015
Размер:
8.25 Mб
Скачать

Задание 4. Создание и удаление баз данных

Для создания новой базы данных MySQL из PHP-сценария применяется функция mysql_create_db(), а для удаления базы данных — mysql_drop_db().

Рассмотрим прототипы этих функций:

int mysql_create_db(string database, [int database_connection] );

int mysql_drop_db(string database, [int database_connection] ) ;

Обе функции используют имя базы данных и соединение. Если соединения нет, будет использоваться последнее открытое. Функции создают либо удаляют указанную базу данных. В случае успеха функции возвращают значение true, а в случае неудачи — false.

Обратите внимание ! В зависимости от версии PHP, функция mysql_create_db() может быть не включена в библиотеки PHP. Поэтому рекомендуется использовать SQL запрос.

Рис. 3.292. Исходный код С:\WebServers\home\localhost\www\php\Lab15_06.php.

Результат работы программы Lab15_06.php представлен на рис. 3.293.

Рис. 3.293. Результат работы Lab15_06.php.

Код программы Lab15_07.php показан на рис. 3.294, а результат представлен на рис. 3.295.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html><head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<title>Форма ввода Lab15_07.php</title></head>

<body>

<?php

$host="localhost"; $user="root"; $DBName="proba";

$password="";

// Производим попытку подключения к серверу MySQL:

if (!$db=mysql_connect($host, $user, $password))

{echo "<h2>MySQL Error!</h2>"; exit(); }//неудача

//echo "<align='center'> Соединение с Mysql успешно";

echo "<p align='center'> Соединение с Mysql успешно ";

$TableName="Table1";

$Link=mysql_connect($host, $user, $password);

$query="SELECT * FROM $TableName";

$query_result=mysql_db_query($DBName,$query,$db) or die("Display error".mysql_error());

print("<table border=1 width=50% align=center>\n");

print("<tr><td>Name</td><td>Email</td><td>Comments</td></tr>");

while($Row=mysql_fetch_array($query_result))

{

print("<tr><td>$Row[FirstName] $Row[LastName]</td><td>$Row[Email]</td><td>$Row[Comments]</td></tr>\n");

}

print("</table>");

mysql_free_result($query_result);

mysql_close($Link);

?>

</body></html>

Рис. 3.294. Исходный код C:\WebServers\home\localhost\www\php\Lab15_07.php.

Рис. 3.295. Результат работы Lab15_07.php.

Другие интерфейсы PHP-баз данных

РНР поддерживает различные библиотеки, что дает возможность подключаться к огромному количеству баз данных, включая Oracle, Microsoft SQL Server, mSQL и PostgreSQL.

В целом принципы подключения и подачи запросов любой из этих баз данных одни и те же. Названия функций могут быть разными, разные базы данных могут иметь разную функциональность, но если вы можете подключиться к MySQL, то другие СУБД вряд ли поставят Вас в безвыходное положение.

Дополнительные темы.

Переменные окружения HTTP

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

Функция phpinfo () выводит большое количество информации о программном обеспечении Web-сервера, версии РНР, который вы запустили, и об основных переменных окружения HTTP. Чтобы посмотреть эту информацию, выполните следующие действия:

Создайте новый файл с помощью текстового или HTML редактора. Введите строку РНР-кода:

<?

phpinfo();

?>

Сохраните созданный файл с именем phpinfo.php в папке для документов вашего Web-сервера.

Запустите браузер, в поле Адрес (Address) введите

http://localhost/php/phpinfo.php

Настройка сервера

Вы считаете что все сделали правильно, но у Вас что-то не работает. Может, у Вас неправильно сконфигурирован сервер?

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

В файле php.ini:

Если Вы хотите узнать, где расположен Ваш php.ini, выполните

<?php phpinfo(); ?>

file_uploads - возможность запретить или разрешить загрузку файлов в целом. По умолчанию On.

upload_max_filesize - максимальный размер файла, который может быть загружен. Если Вам необходимо работать с большими файлами, измените эту настройку. По умолчанию 2М. Не забудьте изменить post_max_size.

post_max_size - общее ограничение сверху на размер данных, передаваемых в POST запросе. Если Вам необходимо работать с большими файлами, или передавать несколько файлов одновременно, измените эту настройку. Значение по умолчанию 8М.

upload_tmp_dir - временная директория на сервере, в которую будут помещаться все загружаемые файлы. Проверьте, какие на нее выставлены права(если на данном этапе у Вас возникли сложности, смотрите пояснения в конце статьи). Такая директория должна существовать и у пользователя, под которым выполняется Apache, также должны быть права на запись в эту директорию. Если Вы работаете с включенным ограничением open_basedir - то временный каталог должен находиться внутри. Вам не нужно заботиться о ее чистке или об уникальности имен, PHP решает эту проблему за Вас.

В файле httpd.conf:

Прежде всего, убедитесь, что Вы используете веб-сервер Apache 1.3 (последняя версия на момент написания - 1.3.27). Если Вы используете Apache 2.0, Вам следует прочитать следующий отрывок из документации:

Do not use Apache 2.0 and PHP in a production environment neither on Unix nor on Windows.

Если Вы получили сообщение "POST Method Not Allowed", это означает, что надо искать что-то похожее на следующие директивы, и использовать ключевое слово Allow:

<Limit POST >

Order allow,deny

Allow from all

</Limit>

Проблемы с загрузкой бинарных файлов - классический вопрос "почему бьются файлы при upload". Вот способ решения, предложенный Димой Бородином (http://php.spb.ru): В директории, где лежит скрипт, делаем файл .htaccess, в котором пишем: CharsetDisable On. В файл httpd.conf дописать строки:

<Location />

CharsetRecodeMultipartForms Off

</Location>

Небольшие пояснения, к этому рецепту: вышеописанная проблема, когда загруженные на сервер архивы не распаковываются и картинки не отображаются, может возникать из-за того, что используется веб-сервер Russian Apache. Директива CharsetDisable отключает модуль charset-processing module, т.е. никакой перекодировки при скачивании файлов, находящихся в данной папке, происходить не будет. Директива CharsetRecodeMultipartForms выключает перекодировку данных, переданных методом POST с заголовком Content-Type: multipart/form-data. Т.е. двоичные данные, переданные с такой настройкой, будут оставлены в первоначальном виде, а все остальное наполнение сайта будет перекодировано согласно текущим настройкам сервера.

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

Используйте директиву CharsetRecodeMultipartForms, которая появилась в PL23, но при этом вам все-равно придется перекодировать вручную текстовые части запросов. Для этого можно использовать Russian Apache API, доступное в других модулях или Russian Apache Perl API, доступное из mod_perl.

Один из примеров определения кодировки вы можете найти : http://tony2001.phpclub.net/detect_charset/detect.phps

Самая свежая документация по Russian Apache находится на его официальном сайте: http://apache.lexa.ru/.

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

Коротко о правах на файлы

Проблемы с правами на сервере (upload_tmp_dir)

В *nix-подобных операционных системах каждой папке, файлу, ссылке выставлены соответствие права доступа. Они могут выглядеть как rwx-rw-r- или же как число 754.

Доступность файла или каталога зависят от идентификатора пользователя и идентификатора группы, в которую он входит. Режим в целом описывается в терминах трех последовательностей, по три буквы в каждой:

Владелец Группа Прочие

(u) (g) (o)

rwx rwx rwx

Здесь владелец, члены группы и все прочие пользователи обладают правами чтения файла, записи в него и его выполнения. Права - любая осмысленная комбинация следующих букв:

r Право на чтение. (4)

w Право на запись. (2)

x Право на выполнение (поиск в каталоге). (1)

Для того, что бы загрузка файлов на сервер работала корректно, необходимо реализовать один из двух вариантов.

Установить владельцем каталога пользователя, с чьими привелегиями выполняется apache. Это можно узнать из файла httpd.conf или просмотрев список процессов на сервере. Права на каталог должны быть 700 (rwx------).

Независимо от того, кто является владельцем каталога, установить права 777 (rwxrwxrwx).