Простейшие примеры скриптов на PHP |
![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||
Указанная секция PHP может использоваться в любом месте файла, неограниченное количество раз, вперемежку с обычным текстом html. Чтобы PHP-код начал интерпретироваться, html-страничку (расширение .htm или html) нужно переименовать в .php. 1. Простой вывод текста < ?php echo "Hello world"; ? > Текст можно вводить как в одинарных кавычках, так и в двойных. В функции аргументы можно передавать без скобок. Кроме echo можно использовать ключевое слово print. Отличие echo от print в том, что echo может выводить несколько строк, указанных через запятую: < ?php echo "1", " 2", '< br >'; echo '1', " 2", "< br >"; ? > Обе эти строки выведут один и тот же результат. Одинарные кавычки отличаются от двойных тем, что одинарные отключают сканирование строки на наличие в ней переменных, например, в следующем примере только первый оператор echo выведет значение переменной: < ?php $index = 10; echo "index==$index< br >"; echo 'index==$index< br >'; ? > Одинарные кавычки также отключают действие Esc-кодов (см. ниже). Одинарные кавычки увеличивают производительность кода, поэтому их использование предпочтительнее. Другой способ определения строк – это использование heredoc-синтаксиса. В этом случае строка должна начинаться с символа <<< , после которого идет идентификатор. Заканчивается строка этим же идентификатором. Закрывающий идентификатор должен начинаться в первом столбце строки. Кроме того, идентификатор должен соответствовать тем же правилам именования, что и все остальные метки в PHP: содержать только буквенно-цифровые символы и знак подчеркивания и начинаться не с цифры или знака подчеркивания. Heredoc-текст ведет себя так же, как и строка в двойных кавычках, при этом их не имея. Это означает, что вам нет необходимости экранировать кавычки в heredoc, но вы по-прежнему можете использовать перечисленные выше управляющие последовательности. Переменные внутри heredoc тоже обрабатываются. < ?php $str = <<<EOD Пример строки, охватывающей несколько строчек, с использованием heredoc-синтаксиса EOD; // Здесь идентификатор – EOD. Ниже // идентификатор EOT $name = 'Вася'; echo <<<EOT Меня зовут "$name". EOT; // это выведет "Меня зовут "Вася"." ? > 2. Простейший пример использования переменной < ?php $text='Fuck you world!!!'; echo ($text); ? > Здесь показано использование переменной. Имена переменных (как и функций) чувствительны к регистру. Переменные начинаются с символа $ (первый символ), второй символ должен обязательно буква. Переменные видны во всем файле, даже если она объявлена и присвоена в одной секции < ?php, а используется в другой секции < ?php. Переменные бывают трех типов - числовой, строковый и логический. Тип определяется неявно в момент присвоения переменной значения. Переменная появляется в момент её назначения. Для проверки факта существования переменной имеется функция IsSet, например (выполните этот код 2 раза, во второй раз раскомментируйте присвоение переменной $index): < ?php //$index = 10; if (IsSet($index)) echo 'переменная $index установлена'; else echo 'переменная $index НЕ установлена'; ? > Если переменная не была задана (присвоена), но её значение используется, то переменная автоматически получает значение по умолчанию. Например, если функция, применяемая над переменной, математическая, то переменной присвоится число 0. Переменные, объявленные вне функций, являются глобальными, т. е. видны во всем файле. Переменные, объявленные в теле функции, видны только в этой функции. Операторы PHP, в отличие от функций, констант и переменных, нечувствительны к регистру. 3. Неявное преобразование типа переменной (в данном примере преобразование строки в число): $str = '10'; $index = 2 * $str; echo $index, "< br >"; Будет выведен результат 20. Это означает, что интерпретатор преобразовал строку '10' в число. При выводе произошло также преобразование - число 20 было преобразовано в строку '20'. Автоматические преобразования типов упрощают код, но затрудняют поиск логических ошибок при отладке. 4. Определение констант, использование комментариев. < ?php define("MY_CONST","Hello, Russia!"); echo MY_CONST; # выведет на экран: Hello, Russia! ? > В этом примере задана константа и показано использование комментариев. Имя константы тоже чувствительно к регистру. Существующие предопределенные логические константы TRUE и FALSE нечувствительны к регистру. Константы удобно использовать в отдельном файле и подключать его оператором require_once, например, в таком файле могут храниться строковые константы пунктов меню. При случае легко поменять язык сайта, просто включив другой файл с константами. 5. Другие способы задания комментариев: // Это однострочный комментарий в стиле языка С /* А вот и многострочный комментарий в стиле C! */ 6. Использование перевода строки и параграфа при выводе < ?php echo "Hello world! Тут показано использование перевода строки < br > при выводе. Если использовать < P >, то это будет означать конец параграфа, и интервал до новой строки будет увеличен по сравнению с < br >. 7. Использование Ecs-кодов \r 8. Пример функции < ?php #определение функции function HW() { echo "Hello world!"; } # вызываем функцию HW(); ? > Имена функций чувствительны к регистру. Возврат значения переменной из функции возможно с помощью ключевого слова return $имя_переменной. Вместо тега < ?php можно использовать тег < ?, но лучше этого не делать. По умолчанию параметры в функцию передаются по значению, то есть переданную в функцию переменную можно свободно изменять внутри функции, и на выходе значение переменной, которая передавалась, останется прежним. Чтобы передать переменную не по значению, а по ссылке, в вызове функции к переменной нужно добавить амперсанд &, например: < ?php function add_some_extra(&$string) { $string .= 'and something extra.'; } $str = 'This is a string, '; add_some_extra($str); echo $str; // Выведет 'This is a string, and something extra.' ? > 9. Пример условного оператора, получение переменной окружения. < ?php if ( getenv ( REMOTE_ADDR ) == '192.168.0.14') echo "Нифига не покажу! Сперва пиво, потом инфа!"; else include ('postinfo.html'); ? > Здесь показан пример условного оператора - проверка на адрес клиента, который зашел на сайт. Если его адрес не равен 192.168.0.14, то будет выведен файл 'postinfo.html' (тут еще и продемонстрировано действие оператора include). Бывают следующие операторы сравнения:
Кроме того, есть очень удобный оператор elseif: $day = 2; ... if ($day == 1) printf("Понедельник"); elseif ($day == 2) printf("Вторник"); ... elseif ($day == 7) printf("Воскресенье"); Тут также продемонстрировано действие оператора include. Бывают еще функции включения include_once, require, require_once. Функции включения с окончанием _once гарантируют, что включение файла будет произведено только один раз, что спасает от логических ошибок в программе - если будет произведена попытка повторного включения, то сгенерируется фатальная ошибка. Функции include и include_once отличаются от require и require_once тем, что первая пара генерирует только предупреждение об ошибке о продолжает выполнение сценария. Вторая пара генерирует фатальную ошибку (дальнейшее выполнение сценария прекращается). Таким образом, include лучше использовать для включения файлов с содержимым (документов), а require для файлов программы PHP. Функции подключения удобны при делении страниц сайта на секции - заголовок, тело документа, подвал. В этом случае заголовок и подвал неизменны и вставляются всегда из одних и тех же файлов - дизайн теперь менять намного проще. 10. Получение других переменных окружения < ?php echo ("REDIRECT_UNIQUE_ID==");echo (getenv (REDIRECT_UNIQUE_ID));echo ("< br >"); echo ("QUERY_STRING==");echo (getenv (QUERY_STRING));echo ("< br >"); echo ("DBENTRY==");echo (getenv (DBENTRY));echo ("< br >"); echo ("REDIRECT_SCRIPT_URI==");echo (getenv (REDIRECT_SCRIPT_URI));echo ("< br >"); echo ("HTTP_ACCEPT_LANGUAGE==");echo (getenv (HTTP_ACCEPT_LANGUAGE));echo ("< br >"); echo ("HTTP_REFERER==");echo (getenv (HTTP_REFERER));echo ("< br >"); echo ("REDIRECT_SCRIPT_URL==");echo (getenv (REDIRECT_SCRIPT_URL));echo ("< br >"); echo ("REMOTE_PORT==");echo (getenv (REMOTE_PORT));echo ("< br >"); echo ("HTTP_ACCEPT==");echo (getenv (HTTP_ACCEPT));echo ("< br >"); echo ("HTTP_USER_AGENT==");echo (getenv (HTTP_USER_AGENT));echo ("< br >"); echo ("GATEWAY_INTERFACE==");echo (getenv (GATEWAY_INTERFACE));echo ("< br >"); echo ("HTTP_HOST==");echo (getenv (HTTP_HOST));echo ("< br >"); echo ("SCRIPT_URI==");echo (getenv (SCRIPT_URI));echo ("< br >"); echo ("SCRIPT_NAME==");echo (getenv (SCRIPT_NAME));echo ("< br >"); echo ("SCRIPT_URL==");echo (getenv (SCRIPT_URL));echo ("< br >"); echo ("SERVER_NAME==");echo (getenv (SERVER_NAME));echo ("< br >"); echo ("REDIRECT_STATUS==");echo (getenv (REDIRECT_STATUS));echo ("< br >"); echo ("UNIQUE_ID==");echo (getenv (UNIQUE_ID));echo ("< br >"); echo ("HTTP_VIA==");echo (getenv (HTTP_VIA));echo ("< br >"); echo ("SCRIPT_FILENAME==");echo (getenv (SCRIPT_FILENAME));echo ("< br >"); echo ("PATH==");echo (getenv (PATH));echo ("< br >"); echo ("STATUS==");echo (getenv (STATUS));echo ("< br >"); echo ("SERVER_ADDR==");echo (getenv (SERVER_ADDR));echo ("< br >"); echo ("SERVER_PROTOCOL==");echo (getenv (SERVER_PROTOCOL));echo ("< br >"); echo ("HTTP_CONNECTION==");echo (getenv (HTTP_CONNECTION));echo ("< br >"); echo ("REDIRECT_DBENTRY==");echo (getenv (REDIRECT_DBENTRY));echo ("< br >"); echo ("SERVER_SIGNATURE==");echo (getenv (SERVER_SIGNATURE));echo ("< br >"); echo ("PATH_TRANSLATED==");echo (getenv (PATH_TRANSLATED));echo ("< br >"); echo ("PATH_INFO==");echo (getenv (PATH_INFO));echo ("< br >"); echo ("SERVER_ADMIN==");echo (getenv (SERVER_ADMIN));echo ("< br >"); echo ("SERVER_SOFTWARE==");echo (getenv (SERVER_SOFTWARE));echo ("< br >"); echo ("REMOTE_ADDR==");echo (getenv (REMOTE_ADDR));echo ("< br >"); echo ("DOCUMENT_ROOT==");echo (getenv (DOCUMENT_ROOT));echo ("< br >"); echo ("REQUEST_URI==");echo (getenv (REQUEST_URI));echo ("< br >"); echo ("REDIRECT_URL==");echo (getenv (REDIRECT_URL));echo ("< br >"); echo ("REQUEST_METHOD==");echo (getenv (REQUEST_METHOD));echo ("< br >"); echo ("SERVER_PORT==");echo (getenv (SERVER_PORT));echo ("< br >"); echo ("HTTP_REFERER==");echo (getenv (HTTP_REFERER));echo ("< br >"); ? > Здесь показан вывод переменных окружения сервера. В одной строке можно использовать несколько операторов, отделенных табуляцией, пробелами и точкой с запятой. Более правильно, конечно, было бы использовать цикл foreach, поскольку перечень переменных для каждого сервера может отличаться (см. пункт 18 Массивы). 11. Логгер пользователей, которые заходят на сайт < ?php #путь к файлу с будущими логами $log_path = './logs/' . date("ymd") . '.txt'; #берем из переменной окружения ip-адрес посетителя... $user_ip = getenv(REMOTE_ADDR ); #... и его тип браузера $user_brouser = getenv(HTTP_USER_AGENT); #узнаем сегодняшнее число и время $curent_time = date("ymd H:i:s"); #Компонуем все данные в одну строку (для удобства) $log_string = "$user_ip $user_brouser $curent_time\r\n"; #открываем файл для добавления в него (все добавляется в конец старого файла) $file = fopen($log_path,"a"); #пишем в файл приготовленную строку fwrite($file, $log_string, strlen($log_string)); #закрываем файл fclose($file); ? > Файл лога будет называться YYMMDD.txt и писаться в папку logs, которая находится в корневом каталоге сайта (там же, где файл index.html). Что нового: - строки складываются друг с другом не оператором '+', а оператором '.' (кто бы мог подумать). Возможны другие варианты открытия файла: 'r' - Открыть только для чтения, помещает указатель на начало файла. Может также использоваться символ 'b' в системах, различающих бинарные и текстовые файлы (не используется в Unix). Если данное значение не имеет смысла, оно игнорируется. 12. Как запустить PHP-скрипт? Опишу один из способов. - в тело html-странички (например, page.html), в любом месте раздела < BODY >< /BODY > нужно встроить код PHP: < html > < head > < title >< /title > < /head > < body > < ?php #тут вставляем код PHP ... ? > < /body > < /html > - файл странички переименовываем из page.html в page.php. В NetObjects Fusion 7.5, в частности, это делается через свойства страницы (Go\Structure View, щелкаем на желто-черную иконку странички, в окошке Properties выбираем закладку Page, жмем кнопку Custom Names..., в выпадающем списке File extension: меняем расширение файла на .php, просто вбивая вручную, жмем Ok). 13. Как узнать версию PHP, которая установлена на сайте? Функция phpinfo() выводит красивую и подробную информацию об установленном PHP. < ?php phpinfo(); ? > 14. Функция Error_Reporting() меняет параметры вывода сообщений об ошибке. < ?php Error_Reporting(E_ALL); //вкл. вывод всех сообщ. об ошибках и предупр. Error_Reporting(E_ALL & ~E_NOTICE); //отключает предупреждающие сообщения Error_Reporting(E_ALL - E_NOTICE); //то же самое Error_Reporting(E_ALL - (E_NOTICE+E_WARNING)); //то же самое ? > Если перед функцией поставить символ @, например @print(), то в случае ошибки в этой функции сообщение об ошибке не выведется. 15. Блок кода задается так же, как в C, с помощью {}. 16. Цикл for задается так же, как в C: for ($i = 1; $i < = 3; $i = $i+1) {} for ($i = 1; $i < = 3; $i++) {} for (;;) {} //бесконечный цикл Отличие в том, что инициализировать можно несколько переменных: for ($sum=0, $i=1; $i < = 3; $i++) {} Кроме того, можно делать несколько проверок, но это не имеет смысла, поскольку срабатывает только последняя: for ($i=1; $i < = 3, $sum < 1000; $i++) {} Например, так получим бесконечный цикл: for ($i=1, $sum=-1; false, false, true; $i = $i + 3, $sum = $sum+3) { print "$i "; print "$sum< br >"; } А так цикл ни разу не выполнится: for ($i=1, $sum=-1; false, true, false; $i = $i + 3, $sum = $sum+3) { print "$i "; print "$sum< br >"; } Кроме того, можно делать несколько изменений переменных, опять же через запятую. 17. exit() прекращает работу сценария - дальнейший HTML-код не загрузится и не отобразится. Оператор die("сообщение") делает то же самое, но выводит сообщение. 18. Функция для поиска и замены с помощью регулярного выражения mixed preg_replace (mixed pattern,
mixed replacement,
mixed subject
[, int limit])
pattern регулярное выражение для поиска, чего будем менять 19. Массивы Присвоение элементам значений: $parts[] = "K155ЛА3"; $parts[] = "K155ЛА8"; $parts[] = "K155ЛН1"; echo $parts[0]; //выведется K155ЛА3 Или так: $parts[0] = "K155ЛА3"; $parts[1] = "K155ЛА8"; $parts[2] = "K155ЛН1"; echo $parts[0]; //выведется K155ЛА3 Можно и так: $parts[2] = "K155ЛА3"; $parts[7] = "K155ЛА8"; $parts[20] = "K155ЛН1"; $parts[] = "KРЕН5В"; В этом случае последний элемент массива получит индекс 21. $parts["ca"] = "K155ЛА3"; $parts["d"] = "K155ЛА8"; $parts["nr"] = "K155ЛН1"; echo $parts["ca"]; //выведется K155ЛА3 Можно создавать массивы с помощью функции array: $parts = array("K155ЛА3", "K155ЛА8", "K155ЛН1"); echo $parts[0]; //выведется K155ЛА3 С помощью функции array можно создавать массивы с символьными индексами: $parts = array("ca" => "K155ЛА3", "d" => "K155ЛА8", "nr" => "K155ЛН1"); echo $parts["nr"]; //выведется K155ЛН1 Цикл foreach позволяет вывести все элементы массива: $parts[2] = "K155ЛА3"; $parts[7] = "K155ЛА8"; $parts[20] = "K155ЛН1"; foreach ($parts as $val) { echo $val; echo "< br >"; } А так с помощью foreach можно получать значение индекса: $parts["ca"] = "K155ЛА3"; $parts["d"] = "K155ЛА8"; $parts["nr"] = "K155ЛН1"; foreach ($parts as $idx => $val) { echo $idx; echo " "; echo $val; echo "< br >"; } Функция count позволяет получить количество элементов массива: $parts[2] = "K155ЛА3"; $parts[7] = "K155ЛА8"; $parts[20] = "K155ЛН1"; $parts[] = "KРЕН5В"; foreach ($parts as $val) { echo $val; echo "< br >"; } echo "Total ".count($parts)." parts"; Пример, который выводит все переменные окружения сервера: foreach ($_SERVER as $key => $val) { echo $key."& nbsp ; & nbsp ; & nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp "; echo $val; echo "< br >"; } Этот код не такой громоздкий, как был приведен ранее (п. 10), и выводит весь список существующих переменных. Коды & nbsp ; выводят пробелы, которые не обрезаются до одного. Другие предопределенные массивы:
20. Строки < ?php // Получение первого символа строки $str = 'Это тест.'; $first = $str{0}; // Получение третьего символа строки $third = $str{2}; // Получение последнего символа строки $str = 'Это все еще тест.'; $last = $str{strlen($str)-1}; // Изменение последнего символа строки $str = 'Посмотри на море'; $str{strlen($str)-1} = 'я'; ? > Функции для работы со строками и символами: mixed str_replace (mixed search, mixed replace, mixed subject[, int &count]) возвращает строку, в subject, в которой все search заменены на replace. В переменной count подсчитывается количество замен. int ord (string string) возвращает ASCII-код первого символа в строке. string chr (int ascii) возвращает строку из одного символа, код которого задан аргументом ascii. 21. Удобные функции для работы с массивами array split (string pattern, string string [, int limit]) позволяет получить массив из строки string, помещая её по частям, границы которых выделяются разделителем pattern. При этом pattern может состоять как из одного символа, так и из нескольких, а также из регулярного выражения (подробнее см. help). В результирующие элементы получаемого массива pattern не попадает. Функцию удобно использовать для разделения текста на отдельные строки, для разбиения html-кода на блоки с помощью тегов, для обработки CSV-таблиц и т. д. Если указан необязательный элемент limit, то массив будет состоять из не более чем limit элементов. В случае ошибки функция возвращает FALSE. Пример (открывается простой текстовый файл, каждая строка которого состоит из ссылки, и этими ссылками по разделителю \r\n заполняется массив $good_links): $file_good_links_content = file_get_contents ('../good_links.txt'); $good_links = split (chr(0x0D).chr(0x0A), $file_good_links_content); bool in_array (mixed needle, array haystack [, bool strict]) ищет в массиве haystack значение needle и возвращает TRUE в случае удачи, FALSE в противном случае. Чрезвычайно удобная функция, одной строкой заменяющая цикл поиска по элементам массива. Если третий параметр strict установлен в TRUE, тогда функция in_array() также проверит соответствие types параметра needle и соответствующего значения массива haystack. Если needle - строка, сравнение будет регистрозависимым. Пример: function DeleteBadLinks (&$html) // Функция вырезает из текста $html “битые” ссылки - те, которых // нет в файле good_links.txt. // $good_links - массив хороших ссылок // $html_block - массив блоков текста $html, каждый блок начинается на ссылку // string get_link (string) - функция выделяет из блока значение ссылки { $file_good_links_content = file_get_contents ('../good_links.txt'); $good_links = split (chr(0x0D).chr(0x0A), $file_good_links_content); $html_block = split (HREF_START, $html); $html = ''; foreach ($html_block as $block) // для каждого блока проверяем наличие ссылки в массиве $good_links { $block = HREF_START.$block; $test_link = get_link($block); //$test_link содержит ссылку из блока if ($test_link == '') continue; else { // проверим ссылку, если она верная, блок сохраняем в $html if (in_array($test_link, $good_links)) $html .= $block; } } } |