Примеры скриптов php с описанием. Программирование на PHP в примерах. Никогда, никогда не доверяйте своим пользователям

Страница 4 из 4

Сжатие выходных данных

Для того чтобы сжать буфер вывода нужно передать функции ob_start() параметр - имя функции - компрессора, например ob_gzhandler .При этом будет выполнена проверка поддержки сжатия и если такая поддержка есть, то данные будут сжиматься:

// Здесь мы включили сжатие буфера: ob_start("ob_gzhandler"); echo "Contrary ... section"; ob_end_flush();

Результат обведён красным:

А вот результат без сжатия вывода:

Сжатие работает только применительно к HTML - коду , к картинкам и прочему это не относится. Учитывайте это. А ещё PHP позволяет сжимать только один буфер вывода , так как содержимое должно сжиматься всё и сразу. Имейте это ввиду, если вы используете стек буферов вывода.

Переписывание URL

Output_add_rewrite_var("name", "value")

Эта функция принимает два параметра, первый это имя переменной, а второй это значение этой переменной. Эта пара ключ-значение добавиться ко всем URL, формам и атрибутам SRC - элементов FRAME, в виде GET - переменных строки запроса. К формам добавятся скрытые поля с соответствующими значениями. В общем проще показать на примере:

"; echo "LINK"; ob_end_flush();

Выдаст такой HTML - код:

LINK

Заметьте атрибуты action тега form - остались не тронуты! Пример с тегами FRAME:

Ob_start(); output_add_rewrite_var("somevar", "someval"); echo " "; ob_end_flush();

Выдаст такой HTML - код:

Функцию output_add_rewrite_var() можно вызывать несколько раз с разными параметрами, в этом случае пары будут добавляться согласно формату кодирования данных: "application/x-www-form-urlencoded" разделяясь знаками амперсанда а в формы будут добавляться новые скрытые поля. Вот так будет выглядеть пример:

Ob_start(); output_add_rewrite_var("somevar", "someval"); output_add_rewrite_var("somevar1", "someval1"); output_add_rewrite_var("somevar2", "someval2"); echo "

"; echo "LINK"; ob_end_flush();

Выдаст такой HTML - код:

LINK

А вот если в конце примера вызвать функцию output_reset_rewrite_vars() - то она отменит все изменения произведённые вызовами функций output_add_rewrite_var(...) т.е. все ссылки вернуться к исходному состоянию.

Ну, вот надеюсь я доступно объяснил что такое буферизация вывода в PHP и с чем её едят.


1. Подружитесь со справочником по PHP

Если вы новичок в PHP, значит, пришло время познакомиться с внушающим почтение справочником PHP. Справочник по PHP невероятно исчерпывающий и содержит действительно полезные комментарии к каждой статье. Перед тем, как задавать вопросы или пытаться самостоятельно разрешить проблему, сэкономьте время и просто возьмите курс на справочник. Ответы на ваши вопросы уже удобно разместились в полезной статье на сайте PHP.net.
В данном случае мы Вам рекомендуем поискать самостоятельно справочники на русском языке, лучше php для начинающих. Будем рады, если Вы дадите ссылке на полезные справочники в комментариях к статье (Просто учитывайте, что это перевод статьи).

2. Включите отчет об ошибках

6. Делайте отступы и используйте пробелы в коде для читаемости

Если вы не используете отступы и пробелы в коде, то результат выглядит, как картина Джексона Поллака (Jackson Pollack). Обеспечьте читаемость своего кода и нормальный поиск, потому что почти наверняка в будущем вы будете делать в нем изменения. IDE и современные текстовые редакторы могут автоматически делать отступы в коде.

7. Делайте код многоуровневым

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

8. Всегда используйте

Часто программисты пытаются использовать сокращения в операторах PHP. Вот как это обычно делается:

<% echo "Hello world"; %>

echo "Hello world" ;

<% echo "Hello world" ; %>

Хотя это действительно экономит несколько символов, все эти методы являются устаревшими и неофициальными. Придерживайтесь стандартного , так как это гарантированно будет поддерживаться всеми будущими версиями.

9. Используйте содержательные, последовательные названия

Именование – не только для вашего собственного удовольствия. Нет ничего хуже, чем продираться сквозь бессмысленные условные обозначения другого программиста. Помогите самому себе и другим, используя для своих классов и свойств имена, имеющие смысл.

10. Комментируйте, комментируйте, комментируйте

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

11. Установите MAMP/WAMP

MySQL — самый популярный вид базы данных, используемый с PHP (хотя и не единственный). Если нужно настроить локальное окружение для разработки и тестирования ваших PHP-приложений на компьютере, предусмотрите установку MAMP (Mac) или WAMP (Windows). Установка MySQL на ваш собственный компьютер может стать утомительным процессом, а оба этих программных пакета содержат MySQL. Ловко и просто.

12. Установите лимиты своим скриптам

Установка лимита времени на PHP-скрипты – очень ответственная вещь. Бывают моменты, когда скрипты выходят из строя, и когда это произойдет, вам придется использовать свойство set_time_limit (установить лимит времени), чтобы избежать бесконечно повторяющихся циклов и истечения таймаутов времени соединения с базой данных. Set_time_limit устанавливает лимит времени на максимальное количество секунд, за которое выполняется скрипт (по умолчанию 30). По истечении этого времени возбуждается неустранимая ошибка.

13. Используйте объекты (или ООП)

Объектно-ориентированное программирование (ООП) использует объекты, чтобы представлять компоненты приложения. ООП – это не только способ разбить свой код на отдельные логические секции, оно также снижает количество повторений кода и делает намного более легким его модифицирование в будущем.

14. Поймите разницу между одинарными и двойными кавычками

Использование одинарных кавычек в строках более эффективно, так как парсеру (синтаксическому анализатору) не приходится просеивать код в поиске специальных символов (прим. перев. escape-последовательностей) и прочих вещей, что позволяют двойные кавычки. Там, где это возможно, старайтесь всегда использовать одинарные кавычки.

Возражение: Собственно, это не обязательно верно. Тесты Benchmark показывают, что при тестировании строк без переменных существуют определенные преимущества быстродействия при использовании двойных кавычек.

15. Не ставьте phpinfo() в свой Webroot

Phpinfo – чудесная вещь. Просто создав PHP-файл, в котором есть:

и пристроив его где-нибудь на сервере, вы сможете незамедлительно узнавать все об окружении своего сервера. Тем не менее, множество новичков поместит файл, содержащий phpinfo() в webroot сервера. Это чрезвычайно небезопасная практика, и если чей-то пытливый ум получит доступ, он может потенциально сглазить ваш сервер. Убедитесь, что phpinfo() находится в безопасном месте, а в качестве дополнительной меры удалите его, как только закончите.

16. Никогда, никогда не доверяйте своим пользователям

Если в приложении есть места для входа пользователей, вы всегда должны предполагать, что кто-то попробует ввести сомнительный код. (Мы не подразумеваем, что ваши пользователи — плохие люди. Это просто здравый смысл.) Отличный способ уберечь свой сайт от хакеров – всегда инициализировать свои переменные для защиты сайта от XSS-атак. На PHP.net есть пример должным образом закрытой формы с инициализированными переменными:

if (correct_user ($_POST [ "user" ] , $_POST [ "password" ] ) {

$login = true ;

if ($login ) {

forward_to_secure_environment () ;

17. Храните пароли зашифрованными

Многие новички в PHP часто сбрасывают деликатные данные, такие как пароли, в базу данных, не применяя шифрование. Рассмотрите использование MD5 для шифрования паролей перед тем, как выкладывать их базу данных.

echo md5("myPassword"); // renders -

echo md5 ("myPassword" ) ; // renders -

Возражение: Тем не менее, помните, что хэши MD5 уже давно скомпрометированы. Безусловно, они скорее безопасны, чем нет, но с помощью гигантской “спектральной таблицы” хакеры могут восстановить ваш хэш. Для обеспечения еще большей безопасности обдумайте возможность добавления «соли» (помех в виде «белого шума»). «Соль» – это обычно дополнительный набор символов, которые вы присоединяете к пользовательской строке.

18. Используйте инструменты визуализации баз данных

Если вам кажется сложным планировать и изменять базы данных для своих PHP-приложений, можно было бы рассмотреть возможность использования инструмента визуализации баз данных. Пользователи MySQL могут работать с DBDesigner и MySQL Workbench для визуального дизайна своих баз данных.

19. Используйте буферизацию вывода

Буферизация вывода – это простой способ очень сильно улучшить качество и скорость вашего PHP-скрипта. Без буферизации вывода ваш скрипт будет показывать HTML на странице так, как он обрабатывается – частями. Добавление буферизации вывода позволяет PHP хранить HTML как переменную и посылать его на браузер единой порцией.

Для активирования функции буферизации вывода просто добавьте ob_start() как здесь в начале файла.

Возражение: Хотя это и не требуется, обычно считается хорошей практикой просто взять и прикрепить функцию “ob_end_flush();” к концу документа. P.S. Хотите также сжать HTML? Просто смените “ob_start();”на “ob_start(‘ob_gzhandler’)”;

XHTML

untitled

untitled

20. Оберегайте свой скрипт от атаки SQL-injection

Если вы не отделяете (escape) символы, использующиеся в строках SQL, ваш код уязвим для атаки SQL-injection. Избежать этого можно, используя либо функцию mysql_real_escape_string (прим. перев. для отделения символов), либо подготовленные операторы SQL (prepared statements).

Вот пример mysql_real_escape_string в действии:

$username = mysql_real_escape_string($GET["username"]);

$username = mysql_real_escape_string ($GET [ "username" ] ) ;

И подготовленного оператора:

21. Попробуйте ORM

Если вы пишете объектно-ориентированный PHP, то можете использовать OR-mapping (ORM). ORM позволяет вам преобразовывать данные между реляционными базами данных и языками объектно-ориентированного программирования. Короче говоря, ORM дает возможность работать с базами данных таким же образом, каким вы работаете с классами и объектами в PHP.

Для PHP есть множество ORM-библиотек, таких как Propel, а также ORM встроен в фреймворки PHP, такие, как CakePHP.

22. Кэшируйте страницы, управляемые базой данных

Кэширование PHP-страниц, управляемых базой данных – отличная идея для улучшения скорости загрузки и производительности своего скрипта. В действительности не так уж трудно создать и извлечь статические файлы содержимого при помощи нашего доброго друга ob_start(). Вот пример, взятый со Snipe.net:

// TOP of your script $cachefile = "cache/".basename($_SERVER["SCRIPT_URI"]); $cachetime = 120 * 60; // 2 hours // Serve from the cache if it is younger than $cachetime if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile))) { include($cachefile); echo ""; exit; } ob_start(); // start the output buffer // Your normal PHP script and HTML content here // BOTTOM of your script $fp = fopen($cachefile, "w"); // open the cache file for writing fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file fclose($fp); // close the file ob_end_flush(); // Send the output to the browser

// TOP of your script

$cachefile = "cache/" . basename ($_SERVER [ "SCRIPT_URI" ] ) ;

$cachetime = 120 * 60 ; // 2 hours

// Serve from the cache if it is younger than $cachetime

if (file_exists ($cachefile ) && (time () - $cachetime < filemtime ($cachefile ) ) ) {

include ($cachefile ) ;

Последнее обновление: 1.11.2015

Сейчас мы создадим небольшой сайтик, который призван дать начальное понимание работы с PHP.

Для создания программ на PHP нам потребуется текстовый редактор. Наиболее популярным на сегодняшний день является программа Notepad++

Перейдем к ранее созданному каталогу C:\localhost , который будет хранить все документы сайта. Создадим текстовый файл и назовем его index.html . Откроем его в текстовом редакторе и добавим в него следующий код:

Первый сайт на PHP

Введи свои данные:

Введите имя:

Введите фамилию:

Код html содержит форму с двумя текстовыми полями. При нажатии на кнопку данные этой формы отсылаются скрипту display.php , так как он указан в атрибуте action .

Теперь создадим этот скрипт, который будет обрабатывать данные. Добавим в папку C:\localhost новый текстовый файл. Переименуем его в display.php. По умолчанию файлы программ на php имеют расширение .php . Итак, добавим в файл display.php следующий код:

Первый сайт на PHP ".$name . " " . $surname . ""; ?>

Здесь уже в разметке html идут вкрапления кода PHP. Для добавления выражений PHP на страницу используются теги , между которыми идут инструкции на языке PHP. В коде php мы получаем данные формы и выводим их на страницу.

Каждое отдельное выражение PHP должно завершаться точкой с запятой. В данном случае у нас три выражения. Два из них получают переданные данные формы, например, $name = $_POST["firstname"]; .

$name - это переменная, которая будет хранить некоторое значение. Все переменные в PHP предваряются знаком $. И так как форма на странице index.html использует для отправки метод POST, то с помощью выражения $_POST["firstname"] мы можем получить значение, которое было введено в текстовое поле с атрибутом name="firstname" . И это значение попадает в переменную $name.

С помощью оператора echo можно вывести на страницу любое значение или текст, которые идут после оператора. В данном случае (echo "Ваше имя: ".$name . " " . $surname . "") с помощью знака точки текст в кавычках соединяется со значениями переменных $name и $surname и выводится на страницу.

Теперь обратимся к форме ввода, перейдя по адресу http://localhost:8080 :

Введем какие-нибудь данные и нажмем на кнопку отправить:

Итак, у нас сработал скрипт display.php , который получил и вывел отправленные данные на страницу.

Шаг 3. С чего начинается Родина? (основы языка)

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

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

Начнем с того, что для PHP сущестует 4-е способа отделения его от общего кода HTML (имеется ввиду для интерпретации).

Далее необходимо коненчо сказать и о том, что инструкции в PHP отделяются друг от друга сишно-паскалевско-перловым способом - точкой с запятой. Хотя перед закрывающим тегом (?>) точку с запятой ставит не обязательно.

Типы.

PHP поддерживает следующие типы данных:

  • integer (целочисленные)
  • floating-point numbers или double (числа с плавающей запятой)
  • string (строки, текст)
  • array (массивы)
  • object (обьекты)

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

Разрешенный преобразования:

  • (int), (integer) - cast to integer
  • (real), (double), (float) - cast to double
  • (string) - cast to string
  • (array) - cast to array
  • (object) - cast to object

К стати, определить тип переменной можно функциями gettype(), is_long(), is_double(), is_string(), is_array() и is_object().

Область видимости переменных.

Во-первых. Все переменные начинаются с символа $

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

Поясню на примере:

Таким образом в функции используется локальная, собственная переменная и результатом прогарммы будет вывод чисел 2 и 1, а не 2 и 2, как некоторые могли подумать.

Ну а если вы хотите в функции использовать глобальные переменные, необходимо сделать так (декларировать с помощью оператора global):

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

Обратите внимание переменная в массиве указывается без символа $

Кроме этог о PHP предоставляет возможность исопльзовать статические переменный. Все как в C/C++.

Данная запись означает, что переменной с именем a мы присваиваем значение "hello". Следующей операцией переменной с именем, хранящимся в переменной с именем a, то есть - переменной hello мы присваиваем занчение "world"

echo "$a ${$a}";

тоже самое, что и

echo "$a $hello";

В результаты мы получим на экране hello world

Дело ненмого усложняется, если вы хотите использовать подобные массивы. Ведь есл вы запишете $$a - интерпретатору надо будет знать, что использовать в качестве переменной - $a или $$a (имя, зранящееся в $a). В таком случаем вам прийдется исопльзовать следующий синтаксис - ${$a} в случае, если вы хотите использовать переменную с именем, зранящимся в массиве $a с индексмо 1 и ${$a} в другом случае (если вы хотите использовать элемент 1 массива с именем, зранящимся в переменной $a.

Надеюсь все понятно. Тогда переходим к следующей главе.

Create a file named hello.php and put it in your web server"s root directory (DOCUMENT_ROOT) with the following content:

Example #1 Our first PHP script: hello.php



PHP Test


Hello World

" ; ?>

Use your browser to access the file with your web server"s URL, ending with the /hello.php file reference. When developing locally this URL will be something like http://localhost/hello.php or http://127.0.0.1/hello.php but this depends on the web server"s configuration. If everything is configured correctly, this file will be parsed by PHP and the following output will be sent to your browser:

PHP Test

Hello World

This program is extremely simple and you really did not need to use PHP to create a page like this. All it does is display: Hello World using the PHP echo statement. Note that the file does not need to be executable or special in any way. The server finds out that this file needs to be interpreted by PHP because you used the ".php" extension, which the server is configured to pass on to PHP. Think of this as a normal HTML file which happens to have a set of special tags available to you that do a lot of interesting things.

If you tried this example and it did not output anything, it prompted for download, or you see the whole file as text, chances are that the server you are on does not have PHP enabled, or is not configured properly. Ask your administrator to enable it for you using the Installation chapter of the manual. If you are developing locally, also read the installation chapter to make sure everything is configured properly. Make sure that you access the file via http with the server providing you the output. If you just call up the file from your file system, then it will not be parsed by PHP. If the problems persist anyway, do not hesitate to use one of the many options.

The point of the example is to show the special PHP tag format. In this example we used to indicate the start of a PHP tag. Then we put the PHP statement and left PHP mode by adding the closing tag, ?> . You may jump in and out of PHP mode in an HTML file like this anywhere you want. For more details, read the manual section on the basic PHP syntax .

Note : A Note on Line Feeds

Line feeds have little meaning in HTML, however it is still a good idea to make your HTML look nice and clean by putting line feeds in. A linefeed that follows immediately after a closing ?> will be removed by PHP. This can be extremely useful when you are putting in many blocks of PHP or include files containing PHP that aren"t supposed to output anything. At the same time it can be a bit confusing. You can put a space after the closing ?> to force a space and a line feed to be output, or you can put an explicit line feed in the last echo/print from within your PHP block.

Note : A Note on Text Editors

There are many text editors and Integrated Development Environments (IDEs) that you can use to create, edit and manage PHP files. A partial list of these tools is maintained at » PHP Editors List . If you wish to recommend an editor, please visit the above page and ask the page maintainer to add the editor to the list. Having an editor with syntax highlighting can be helpful.

Note : A Note on Word Processors

Word processors such as StarOffice Writer, Microsoft Word and Abiword are not optimal for editing PHP files. If you wish to use one for this test script, you must ensure that you save the file as plain text or PHP will not be able to read and execute the script.

Note : A Note on Windows Notepad

If you are writing your PHP scripts using Windows Notepad, you will need to ensure that your files are saved with the .php extension. (Notepad adds a .txt extension to files automatically unless you take one of the following steps to prevent it.) When you save the file and are prompted to provide a name for the file, place the filename in quotes (i.e. " hello.php "). Alternatively, you can click on the "Text Documents" drop-down menu in the "Save" dialog box and change the setting to "All Files". You can then enter your filename without quotes.

Now that you have successfully created a working PHP script, it is time to create the most famous PHP script! Make a call to the phpinfo() function and you will see a lot of useful information about your system and setup such as available predefined variables , loaded PHP modules, and configuration settings. Take some time and review this important information.

Example #2 Get system information from PHP




Top