Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PHP обучение на примерах - Кухарчик А..pdf
Скачиваний:
135
Добавлен:
24.05.2014
Размер:
23.87 Mб
Скачать
" Н Т Т Р / 1 . 0

198 Программирование на РНР

Таким образом, проверив указанные переменные окружения, легко принять решение о разрешении доступа, а уж затем вывести любую нужную информацию. Чтобы гарантировать совместимость со всеми браузерами, ключевое слово "Basic" должно быть записано с первой «В» в верхнем регистре, параметр функции realm должен заключаться в двойные кавычки (не одинарные), и ровно один пробел должен предшествовать числу "401" в строке 401" заголовка.

Защита программы

Если вас не раз посещала мысль о возможности (или точнее, о невозможности) изменения ваших скриптов, знайте: есть способ заставить не работать программу, если в ней меняется хоть один байт. Правда, рассчитан этот способ в основном на тех, кто не очень разбирается в РНР, но ведь программисту обычно именно с такими заказчиками и приходится иметь дело.

Так вот в чем заключается мой метод. Создаем программу, настраиваем ее до той степени, когда вносить изменения уже не понадобится. В любом месте кода пишем какой-нибудь комментарий и обрамляем его большим количеством дефисов (не меньше ста). Далее в любом месте скрипта задается проверка на количество байтов в файле с программой. Сделать это легко, так как в РНР есть функция определения количества байтов в файле: f i l e s i z e (name_file). В начале файла указываем его имя и количество выданных нам функцией байтов:

$ewq = "index.phtml"; $lo_call = 6507;

Дальше проверяем, соответствует ли запрошенное количество байтов тому, что введено в программу. Если нет — программа останавливается. Значение переменной $1о_са11 придется подбирать, но это не страшно — приблизительный размер мы определили, а регулировать его в любую сторону можно при помощи наших комментариев (помните, мы ставили дефисы?). Таким образом, добиваемся чтобы скрипт работал. Теперь при малейшем изменении он останавливается или выдает ошибку.

РНРввопросахиответах

 

199

РНР в вопросах и ответах

Что такое РНР и что он может?

РНР — набор средств для выполнения кода на стороне сервера. Кроме того, РНР — язык программирования для написания такого кода. Появился в 1994 году как небольшая оболочка, исполняющаяся на стороне сервера. Отличается простотой изучения и полной интеграцией (в отличие от других приложений на стороне сервера) с кодом HTML. Это действительно так, ведь код РНР можно вставить в любое место странички, достаточно открыть его специальным тегом — <?php и закрыть ?>

Почему нельзя одновременно использовать РНР- и HTMLредакторы?

Можно, просто это неудобно. HTML-редакторы не понимают РНР-код, считая его обычным текстом. Для нормальной работы в редакторе HTML достаточно открывать код РНР так: <script language="php">, а закрывать, соответственно, так: </script>. Теперь все будет в порядке, РНР-код не будет вам мешать редактировать страницу.

Какие расширения могут быть у файла, содержащего РНР-код?

Можно сказать — любые. В настройках сервера, как правило, задаются в обязательном порядке php, php3, php4 и phtml. Я рекомендую использовать последнее, так как оно обеспечивает совместимости всех версий РНР. Часто спрашивают, как «подружить» РНР и SSI? Ответ напрашивается сам собой — записать в файле конфигурации РНР расширение shtml. И добавить туда все остальные расширения, для разнообразия. Конфигурационный файл находится на сервере, поэтому надо обращаться в службу технической поддержки вашего хостинг-провайдера.

Как проверить работоспособность скрипта на домашнем компьютере?

Это один из самых «больных» вопросов. Дело в том, что просто так нельзя увидеть работу скрипта РНР, его код должен быть обрабо-

200

Программирование на РНР

тан сервером. А значит, сервер надо установить у себя на домашнем компьютере. В таком случае — это набор программ, благодаря которым становится возможным использовать домашний компьютер как реальный сервер в интернете. Это то же самое программное обеспечение, которое работает и на настоящем сервере, так что несовместимостей и ошибок вы впоследствии не получите. Скрипт будет работать у вас так, как и на удаленном компьютере. Впрочем, бывают исключения, но это касается очень тонких моментов настройки. Серверы бывают разные, но я рекомендую воспользоваться Apache, так как это самый распространенный, нетребовательный к ресурсам, относительно легкий в настройке сервер.

В двух словах процесс настройки сервера таков. Скачиваем и устанавливаем Apache, затем инсталлируем РНР и настраиваем (см. гл. «Установка РНР»). Сервер начнет работать. Получить доступ к нему можно, обратившись по адресу 127.0.0.1.

Как сделать так, чтобы не закачивать каждый раз файлы для проверки на сервер, т.е. можно ли проверять работоспособность РНР

в офлайне?

Для простой проверки РНР-кода можно не устанавливать сервер. В этом случае делайте так: php.exe -f index.php | more. Только нужно сохранить все пути такими, какие они есть на самом деле.

Как сделать запись в файл? Все делаю, как положено, но там, где должна идти запись в файл, РНР выдает ошибку.

Скорее всего, вы не установили для файла атрибуты на запись. Сделать это очень просто. В вашем FTP-менеджере посмотрите свойства уже закачанного файла на сервере. Атрибуты его, скорее всего, будут установлены только для чтения. Вам надо изменить их на запись. Код атрибутов должен быть 666 или 777. После этого все будет работать, если в скрипте нет ошибки.

Как можно узнать содержимое файла с расширением php, который находится на каком-либо сервере?

В этом-то и заключается вся прелесть РНР (для администраторов сайтов, конечно), что никак нельзя. Нужно быть владельцем сер-

РНРввопросахиответах

201

вера, иначе — практически

невозможно. По крайней мере,

я о таком не слышал.

 

Мне необходимо конвертировать одинарные кавычки в обратные слеши с одинарными кавычками. Как это можно сделать с помощью

регулярного выражения?

Гораздо удобнее, чем регулярное выражение, использовать стандартную функцию addslashes (), которая обрамляет строку слешами. Она возвращает строку со слешами перед нужными символами (например, в запросах БД). Это одинарная и двойная кавычки, обратный слеш и нулевые значения. Директива magic_quotes_gpc в конфигурационном файле должна быть включена (установлена в положение ON).

Где можно найти полный список зарезервированных переменных и почему они не описаны в документации РНР?

Можно воспользоваться командой <?php phpinfo (); ?> , которая даст возможность просмотреть все виды информации о вашей установке РНР, включая список переменных окружения, а также специальных переменных, установленных вашим Web-сервером. Этот список действительно не может быть описан в документации РНР, поскольку он будет отличаться для каждого сервера.

Я пытаюсь получить доступ к одной из стандартных переменных CGI (таких как $DOCUMENT_ROOT или $HTTP_REFERER) в пользовательской функции, и не могу их найти. Что не так?

Переменные окружения являются обычными глобальными переменными, поэтому вы обязаны либо объявлять их как глобальные переменные в вашей функции (используя, например, "global$ D O C U M E N T _ R O O T ; " ) или применитьмассив глобальных переменных (т.е. "$GLOBALS ["DOCUMENT_ROOT"] ").

Как создать массивы в HTML-теге <form>?

Чтобы получить результат из формы, отправленный как массив в какой-либо РНР-скрипт, вы должны переименовать элементы тегов <input>, <select> или <textarea> таким образом:

202

 

Программирование на РНР

<input name="Array[]"> <input name="Array[]"> <input name="Array[] "> <input name="Array[]">

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

<input name="Array[]">

<input name="Array[]">

<input name="OtherArray[]">

<input name="OtherArray[] ">

Это создаст два массива — Array и OtherArray, которые будут отправлены РНР-скрипту. Можно также присвоить вашим массивам специфические ключи:

<inputname="AnotherArray[]">

<inputname="AnotherArray[]"> <input name="AnotherArray[email]"> <input name="AnotherArray[phone]">

Массив AnotherArray теперь будет содержать ключи 0, 1, email и phone. Все, что касается обычных массивов, применимо и тут.

Что такое зарезервированные слова в РНР и где можно посмотреть их полный список?

Эти слова имеют специальные значения в РНР. Некоторые из них выглядят как функции, некоторые — как константы, но они на самом деле таковыми не являются: это конструкции языка. Вы не можете использовать какое-либо из этих слов как константу, имя класса или имя функции. Использование их в качестве имен переменных обычно не приводит к каким-либо последствиям, но лучше отнестись к ним внимательно, а еще лучше — просто не использовать. Вот их список:

РНР в вопросах и ответах

203

 

 

 

and

for

array()

foreach

as

function

break

global

case

if

cfunction

include ()

class

include_once()

const

isset ()

continue

list ()

declare

new

default

оld_function

die()

or

do

print()

echo()

require ()

else

require_once ()

elseif

return ()

empty()

static

enddeclare

switch

endfor

use

endforeach

var

endif

while

endswitch

xor

endwhile

 

CLASS

 

 

 

 

 

 

 

 

 

 

 

 

eval

 

 

FILE

 

 

 

 

 

 

 

 

 

exit ()

 

FUNCTION

 

 

 

 

 

 

extends

___LINE__

204

Программирование на РНР

Как проверить наличие в какой-либо переменной, полученной из формы, числа или строки?

Перед передачей переменной преобразуйте ее, например, командой

$а = intval($a);

После этого на 100 % можно быть уверенным, что $а имеет целочисленное значение. Пример конвертации:

"аааааа" -> 0 "123ааа" -> 123

"123" -> 123

"123.55" -> 124

Если нужно получить дробное значение, используйте функцию doubleval (), если символьное — s t r v a l () и т.д.

Соседние файлы в предмете Программирование