metoda / Ml_ITIn_2013
.pdf
271
Рис. 3.289. Сообщение раскрывающее суть ошибки.
Для целей обучения, далее приводятся сообщения из кода программы, описывающие сведения о полях (строки 99-141) при использовании объектно-ориентированного синтаксиса PHP (рис. 3.290) и процедурного синтаксиса PHP (строки 142-189 рис. 3.280) результат которого приведен на рис. 3.291.
Рис. 3.290. Сообщение о составе и свойствах полей, использованных в запросе.
272
Рис. 3.291. Сообщение о составе и свойствах полей при использовании процедурного подхода.
Возвращаемый объект имеет следующие свойства:
name - имя поля
table - имя таблицы, которой принадлежит поле
max_length - максимальная длина поля
not_null - 1, если полю разрешено пустое значение
primary_key - 1, если поле является ключевым
unique_key - 1, если в поле допускаются только уникальные значения
multiple_key - 1, если в поле допустимо иметь повторяющиеся значения
numeric - 1, если поле числовое
blob - 1, если поле имеет тип BLOB
type - тип поля
unsigned - 1, если поле числовое беззнаковое
zerofill - 1, есле поле заполняется нулями
Мы рассмотрели основы использования баз данных MySQL из РНР. В следующем задании рассматриваются еще некоторые полезные функции, не упомянутые ранее.
273
Задание 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 запрос.
274
Рис. 3.292. Исходный код С:\WebServers\home\localhost\www\php\Lab15_06.php.
Результат работы программы Lab15_06.php представлен на рис. 3.293.
Рис. 3.293. Результат работы Lab15_06.php.
275
Код программы 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.
276
Другие интерфейсы 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
Настройка сервера
Вы считаете что все сделали правильно, но у Вас что-то не работает. Может, у Вас неправильно сконфигурирован сервер?
Если Вы "все сделали правильно", но Ваш код неработоспособен, или работает неправильно, не спешите отчаиваться. Возможно проблема не в Ваших руках, а в неверных настройках сервера. Вот список директив, которые имеют отношения к загрузке файлов:
277
В файле 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>
278
Небольшие пояснения, к этому рецепту: вышеописанная проблема, когда загруженные на сервер архивы не распаковываются и картинки не отображаются, может возникать из-за того, что используется веб-сервер
Russian Apache. Директива CharsetDisable отключает модуль charsetprocessing module, т.е. никакой перекодировки при скачивании файлов, находящихся в данной папке, происходить не будет. Директива CharsetRecodeMultipartForms выключает перекодировку данных, переданных методом POST с заголовком Content-Type: multipart/form-data. Т.е. двоичные данные, переданные с такой настройкой, будут оставлены в первоначальном виде, а все остальное наполнение сайта будет перекодировано согласно текущим настройкам сервера.
Но при этом могут возникнуть осложнения: будьте готовы к тому, что в некоторых случаях текстовые части запросов вам придется перекодировать самостоятельно. Вот что по этому поводу говорится в документации:
Коротко о правах на файлы
Проблемы с правами на сервере (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).
279
Cписок литературы
Основной:
1. Веллинг Л., Томсон Л. Разработка Web-приложений с помощью PHP
и MySQL. 3-е издание. – М.: Издательский дом ―Вильямс‖. 2008. – 875 c.
Дополнительный:
2. Копейкин М. В., Спиридонов В. В., Шумова Е. О. Базы данных. Основы SQL реляционных баз данных: Учеб. пособие. – СПб.: СЗТУ, 2006.
– 177 c.
3. Базы данных: Метод. указ. к курсовому проектированию. / Сост.: М.В. Копейкин, В.В. Спиридонов, Е.О. Шумова – СПб.: СЗТУ, 2005. - 172 c.
4. Базы данных: Методический комплекс по курсу и указания к выполнению лабораторных работ. / Сост.: М.В. Копейкин, В.В. Спиридонов, Е.О. Шумова – СПб.: СЗТУ, 2005. - 172 c.– Спб.: СЗТУ. 2004. – 100 с.
Лабораторные работы в среде ORD представлены в [4. Лабораторные работы в среде MySQL представлены ниже.
