Создать страницу на php. Чем отличается php-файл от html-файла
Как создать php файл?
Дата: 2010-09-08
Чем отличается php-файл от html-файла.Создание автоматизированных сайтов, как Вы понимаете - это уже следующая ступенька в сайтостроении. Если простой сайт можно создать на обычном языке HTML, то автоматизированный сайт можно создать только с использованием PHP и очень часто с использованием баз (одной или нескольких) данных.
Но в основе web-страницы на PHP, лежит все таки язык HTML. А следовательно все правила создания страниц обоих типов общие. И я буду исходить из того, что Вы уже знакомы с HTML и знаете, как создаются простые web-страницы. Если не в курсе этого или же подзыбыли:) , то обновите свои познания в разделе . Отсюда вытекает очень важное правило: Все теги, которые мы изучали в разделе , так же прекрасно работают в php файлах и мы будем этими тегами пользоваться . Так что Вы должны знать HTML.
По своей структуре PHP файл напоминает обычный HTML файл, но со специальными вставками php кода. Эти вставки кода вставляются в код web-страницы с помощью специальных операторов, которые иногда еще называют дескрипторами :
Дескриптор .
Примечание: Иногда можно встретить сокращенную запись дескрипторов: . Рекомендуется избегать такой записи. Сценарий PHP записанный в сокращенном виде может работать не на всех серверах.
Когда сервер (или локальный сервер) встречает такую вставку, то подключается (установленный на сервере), PHP-код обрабатывается и пользователю (посетителю сайта), выдается уже обработанная и готовая web-страница. Именно поэтому если мы попытаемся посмотреть код php-страницы уже загруженной браузером (правая кнопка мыши, Посмотреть HTML-код), мы не увидим таких вставок (они уже обработаны сервером).
Создается php файл так же, как и html файл простым переименование расширения текстового файла и сделать это можно в обычном Блокноте . Про это мы уже беседовали в уроке: " поэтому не буду повторяться.
PHP файл имеет расширение .php . Первый файл, загружаемый по умолчанию, так же как и в HTML всегда называется index.php , но как Вы заметили имеет расширение .php . Все PHP файлы имеют вид имя.php , конечно же все имена файлов пишутся по английски.
Сервер, когда у него запрашивают такой файл (проще говоря нажимают на ссылку), уже "понимает", что в этом файле содержится php-код и его нужно обработать прежде чем отдать посетителю. HTML-код при этом просто пропускается сервером, точнее препроцессором PHP без обработки.
Давайте теперь рассмотрим простейший файл с php-кодом. Для определенности назовем его например name.php . Итак смотрим Листинг 1 :
Листинг 1.
Как видите код этого php-файл отличается от html-файла расширением .php (в имени файла) и вставкой php-кода Листинг 2 :
Листинг 2.
|
Оператор echo - переводится как вывести , в данном случае имеется ввиду вывести на экран монитора. Т.е. надпись Привет, меня зовут Иван просто отобразится на мониторе при запуске этого файла.
После вывода каждой команды ставится точка с запитой (; ) . Если команда одна, как у нас сейчас, точку с запитой можно не ставить, но если команд несколько, то точка с запитой должны ставиться после каждой команды , тогда это разделитель между командами. После точки с запитой считается, что команда выполнена. Кроме того это считается хорошим тоном при программировании на PHP.
Начиная писать программы для веба, многие начинающие программисты сталкиваются с такой ошибкой. Они рассматривают систему браузер-сервер, как обычное приложение. Интерактивное. Нажал кнопку - система среагировала. Провел мышкой - среагировала. Вся информация, которая доступна клиенту - доступна и программе, программа все время находится в памяти.
Так вот, в веб-программировании это не так! .
В момент, когда пользователь видит перед собой страницу и начинает совершать какие-то действия с ней, PHP уже завершил работу ! И пользователь взаимодействует не с PHP скриптом, а со своей страницей HTML, которую он получил в браузер. Результатом работы скрипта на PHP в большинстве случаев является обычный текст. Текст HTML страницы. Которая отдается браузеру и показывается им, как обычный HTML. Вы сами можете в этом убедиться, написав в скрипте
;
А потом просмотрев в браузере исходный текст полученной страницы. Никаких тегов PHP там нет! Только
Привет, Вася!
Потому, что PHP исполняется на сервере!
Сервер и браузер общаются, посылая друг другу запросы по особому протоколу - HTTP . Соединение может инициировать только браузер. Он посылает серверу запрос - показать такой-то файл. Сервер клиенту файл посылает.
Только так и происходит. Клиент запросил - сервер отдал. И забыл сразу о клиенте. Отсюда становится понятным ответ на вопрос, можно ли точно узнать, сколько юзеров сечас на сайте. Нельзя. потому, что "на сайте" нету ни одного. Они соединяются, запрашивают страницу, и отсоединяются. Не имеют постоянного cоединения с сервером, как, например, игроки в Кваку. Узнать можно только примерно, записывая время каждого соединения и выбирая записи за определенный промежуток времени.
Пример общения браузера с сервером:
Пользователь нажимает на ссылку, браузер посылает запрос серверу и ждет ответа:
Браузер -> PHP
PHP выполняет скрипт, отдает результат в браузер и завершает работу:
PHP -> браузер
Браузер отображает страницу, "просматривая" её на предмет ссылок, которые надо запросить у сервера (теги ,
и так далее) и посылает соответствующие запросы. Их можно увидеть, просматривая обмен заголовками, о чем речь будет чуть ниже:
Браузер -> сервер, Браузер -> сервер, Браузер -> сервер...
Пользователь заполняет форму и нажимает на кнопку:
Браузер -> PHP
PHP обрабатывает форму, записывает данные в базу и посылает браузеру заголовок
Location:
PHP -> браузер
Браузер, получив этот заголовок, запрашивает указанную страницу
Браузер -> PHP
PHP выполняет ее... и так далее.
Просмотр обмена HTTP заголовками
Я очень рекомендую попрактиковаться с HTTP заголовками, посмотреть, как ими обмениваются сервер и клиент.
Для этого есть множество разных способов. Если у вас стоит популярный download manager FlashGet, то можно использовать его. Так же заголовки показывает популярная программа Proxomitron, можно скачать какие-нибудь специальные утилиты.
Для IE можно предложить плагин http://blunck.se/iehttpheaders/iehttpheaders.html
Для браузера Mozilla есть удобный плагин http://livehttpheaders.mozdev.org/
Так же, существует много других утилит, легко находимых в сети по запросу HTTP sniffer.
Обязательно воспользуйтесь любым способом посмотреть HTTP заголовки, которыми обменивается браузер с сервером. Это очень хорошая практика, а так же проверка - что шлет твой скрипт. Удобно при отладке установки кук или проблемах с сессиями.
Примерное представление о пришедших заголовках можно также получить, воспользовавшись функцией getallheaders()
. Но следует учитывать, что работает она только если PHP собран, как модуль.
ОЧЕНЬ ВАЖНОЕ ЗАМЕЧАНИЕ
Из того факта, что PHP исполняется на сервере, и посылает результат своей работы браузеру, следует один простой, но очень важный вывод. Что PHP в принципе НЕ МОЖЕТ отобразить в браузере ничего такого, что невозможно было бы сделать средствами html.
ПРЕЖДЕ, чем что-то писать на PHP - попробуйте это сделать чистым HTML.
"Нажатие на Энтер" не переводит строку? А в html вы не пробовали таким образом строки переводить? Не получилось? Какая досада. Прочитайте, как в html сделать перевод строки и приходите снова.
PHP в результате своей работы формирует не картинку с текстами, как вы ее видите на экране монитора! PHP формирует HTML код! И этот код ЗНАЧИТЕЛЬНО отличается от того изображения, которое вы видите на экране. Если у вас что-то не получается, то надо всегда смотреть именно ИСХОДНЫЙ код страницы, а не то, как вам ее рисует браузер. В браузере Internet Explorer исходный код можно посмотреть, выбрав в меню Вид - Просмотр HTML-кода.
Если у вас не работает яваскрипт, сформированный PHP скриптом, или html показывает не то, что вы хотите, то исправить эту проблему очень просто.
1. Сначала пишете нужный яваскрипт или html руками.
Если у вас с этим проблемы - обратитесь в соотвествующий форум - по яваскрипту или html. PHP тут не при чём.
2. Сравниваете с тем, что получено из PHP
3. Вносите исправления в PHP скрипт, чтобы текст, отдаваемый им, не отличался от написанного руками.
Браузер не умеет показывать файлы, в которые напихан одновременно и html картинки. Браузер умеет показывать только известные ему типы данных. В частности, это ИЛИ html ИЛИ картинка. Но не вместе. Если картинка - то ОДНА. Несколько картинок подряд браузер показывать не умеет. Браузер умеет показывать HTML, в котором прописаны ССЫЛКИ на несколько картинок.
Пожалуйста, прежде, чем изучать PHP - изучите хотя бы основы HTML! Прежде, чем что-то требовать от PHP - попробуйте сделать это на html.
С помощью сессии PHP сервер идентифицирует вас и позволяет выполнять необходимые операции: изменение информации на различных веб-страницах, добавление новой информации и т.д. После завершения работы на сайте вы удаляете текущую сессию, нажав на кнопку «Выйти »:
Что такое сессия PHP?Сессия PHP представляет собой способ хранения информации в переменных сессии, которые могут быть использованы для аутентификации на нескольких веб-страницах. В отличие от куков, информация сессии не хранится на компьютере пользователя. Вместо этого сессия создает файл на сервере во временном каталоге.
Эта информация, хранимая на протяжении сессии, доступна для всех веб-страниц ресурса. На сервере расположение временного файла определяется параметром session.save_path в конфигурационном файле php.ini .
При создании PHP-сессии выполняются следующие три действия:
- Когда создается сессия, PHP генерирует уникальный идентификатор, который представляет собой случайную строку из 32 шестнадцатеричных чисел. Идентификатор времени жизни сессии PHP выглядит примерно так: 9c8foj87c3jj973actop1re472e8774 ;
- Сервер отправляет на компьютер пользователя куки, называемые PHPSESSID , для хранения строки уникального идентификатора сессии;
- Сервер генерирует в указанном временном каталоге файл, который содержит имя уникального идентификатора сессии с префиксом sess _g. sess_9c8foj87c3jj973actop1re472e8774 .
Эти установки помогают скрипту PHP извлекать из файла значения переменных сессии. На стороне клиента PHPSESSID содержит идентификатор сессии. Он подтверждает имя файла, который нужно искать в определенном каталоге на стороне сервера, из него переменные сессии могут быть извлечены и использованы для проверки.
Пользователь может завершить сеанс, нажав кнопку выхода из системы, которая вызывает функцию session_destroy() . Когда пользователь закрывает браузер, сессия PHP закрывается автоматически. Иначе сервер завершит сессию по истечении заданного периода времени.
Синтаксис сессий в PHPПри PHP авторизации через сессию она создается с помощью функции session_start() и удаляется с помощью функции session_destroy() . Глобальная переменная PHP , известная под именем $_SESSION , используется для установки значений переменных сессии. Сбросить все значения, установленные для переменных сессии, можно с помощью функции session_unset() .
Операции сессииМы рассмотрим следующие операции с использованием сессии PHP , а также их примеры.
- Запуск сессии PHP и установка ее переменных сессии: новая сессия PHP запускается с помощью функции session_start() . После того, как сессия была создана, можно установить значения ее переменных сессии с помощью $_SESSION . Мы установили значения для переменных “userID ” — “php_user ” и “password ” — “tutorials ”:
PHP-сессии - создание
Результат : в результате запуска приведенного выше PHP-кода на сервере будет выведено следующее сообщение:
- Получение значений переменных сессии PHP : Можно получить значения переменных, которые мы установили во время последней PHP сессии авторизации. Когда мы открываем PHP-сессию в начале каждой страницы (session_start () ), должен указываться код, приведенный ниже. Мы извлекаем и выводим эти значения с помощью глобальной переменной $_SESSION :
PHP-сессия - получение значений
Результат : когда мы запустим на сервере приведенный выше PHP-код , в результате мы получим следующее сообщение. Выводятся значения переменных сессии, которые мы установили ранее, после создания сессии PHP .
- Обновление значений переменных сессии PHP : Во время сессии можно обновить значения ее переменных. Сначала нам нужно открыть PHP-сессию в начале каждой страницы (session_start () ). В приведенном ниже коде мы обновляем значения переменных “userID ” — “new_php_user ” и “password ” — “education ”.
Можно вывести массив переменных сессии и их значений с помощью функции print_r($ _SESSION) , как показано ниже:
PHP-сессия - изменение значений
Результат : когда мы запустим на сервере приведенный выше PHP код, мы получим следующее сообщение. В нем будет приведен массив переменных сессии с их новыми значениями.
В этом вводном уроке я познакомлю вас с нужными программами и расскажу, что нужны для роботы с PHP.
Что нужно знатьТакже нужно знать как записывается PHP. В файле, PHP скрипт начинается со слова - . Все, что между это PHP код, запомните это.
Файлы, в котором записан PHP код нужно сохранять под расширением .php
Для того чтобы научится PHP (как и любому другому языку программирования) важно много практиковаться.
Когда вы будете читать уроки, то не копируйте код, а именно пишите сами, так будет лучше для Вас, так Вы быстрее запомните сам язык, и вам будет легче дальше.
Первая программа, которая вам нужна, это браузер (то, в чем Вы сейчас находитесь:D)
Веб-сервер. Для локального тестирования вам нужно установить веб-сервер. Я рекомендую поставить Open Server (Mini версии будет достаточно). Как установить Open Server . Open Server является портативным, т.е. вам нужно только разархивировать скачанный архив и запустить сервер через Open Server.exe . После старта программы вы увидите красный флажок в трее Windows (область возле системных часов). Чтобы включить непосредственно сам веб-сервер нажмите на флажок, далее выберите пункт меню Запустить.
Всем хорошего дня. Перед вами первая статья из серии PHP для начинающих разработчиков. Это будет необычная серия статей, тут не будет echo "Hello World" , тут будет hardcore из жизни PHP программистов с небольшой примесью “домашней работы” для закрепления материала.
Начну с сессий – это один из самых важных компонентов, с которыми вам придется работать. Не понимая принципов его работы – наворотите делов. Так что во избежание проблем я постараюсь рассказать о всех возможных нюансах.
Но для начала, чтобы понять зачем нам сессия, обратимся к истокам – к HTTP протоколу.
HTTP ProtocolHTTP протокол – это HyperText Transfer Protocol - «протокол передачи гипертекста» – т.е. по сути – текстовый протокол, и его понять не составит труда.
Изначально подразумевали, что по этому протоколу будет только HTML передаваться, отсель и название, а сейчас чего только не отправляют( _ㅅ_ )=^.^=
Чтобы не ходить вокруг да около, давайте я вам приведу пример общения по HTTP протоколу, вот запрос, каким его отправляет ваш браузер, когда вы запрашиваете страницу http://example.com:
GET / HTTP/1.1 Host: example.com Accept: text/html ...пустая строка...
А вот пример ответа:
HTTP/1.1 200 OK Content-Length: 1983 Content-Type: text/html; charset=utf-8 ... ...
Это очень упрощенные примеры, но и тут можно увидеть из чего состоят HTTP запрос и ответ:
Так, вроде с протоколом разобрались – он простой, ведёт свою историю аж с 1992-го года, так что идеальным его не назовешь, но какой есть – отправили запрос – получите ответ, и всё, сервер и клиент никоим образом более не связаны. Но подобный сценарий отнюдь не единственный возможный, у нас же может быть авторизация, сервер должен каким-то образом понимать, что вот этот запрос пришёл от определенного пользователя, т.е. клиент и сервер должны общаться в рамках некой сессии. И да, для этого придумали следующий механизм:
Для реализации этого механизма и были созданы (куки, печеньки) – простые текстовые файлы на вашем компьютере, по файлу для каждого домена (хотя некоторые браузеры более продвинутые, и используют для хранения SQLite базу данных), при этом браузер накладывает ограничение на количество записей и размер хранимых данных (для большинства браузеров это 4096 байт, см. RFC 2109 от 1997-го года)
Т.е. если украсть cookie из вашего браузера, то можно будет зайти на вашу страничку в facebook от вашего имени? Не пугайтесь, так сделать нельзя, по крайней мере с facebook, и дальше я вас научу как можно защититься от данного вида атаки на ваших пользователей.
Давайте теперь посмотрим как изменятся наши запрос-ответ, будь там авторизация:
POST /login/ HTTP/1.1 Host: example.com Accept: text/html login=Username&password=Userpass
Метод у нас изменился на POST, и в теле запроса у нас передаются логин и пароль (если использовать метод GET, то строка запроса будет содержать логин и пароль, и может оказаться сохраненной на каких нибудь промежуточных прокси серверах, что очень плохо).
HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Set-Cookie: KEY=VerySecretUniqueKey ... ...
Ответ сервер будет содержать заголовок Set-Cookie: KEY=VerySecretUniqueKey , что заставит браузер сохранить эти данные в файлы cookie, и при следующем обращении к серверу – они будут отправлены и опознаны сервером:
GET / HTTP/1.1 Host: example.com Accept: text/html Cookie: KEY=VerySecretUniqueKey ...пустая строка...
Как можно заметить, заголовки отправляемые браузером (Request Headers) и сервером (Response Headers) отличаются, хотя есть и общие и для запросов и для ответов (General Headers)
Сервер узнал нашего пользователя по присланным cookie, и дальше предоставит ему доступ к личной информации. Так, ну вроде с сессиями и HTTP разобрались, теперь можно вернутся к PHP и его особенностям.
PHP и сессияЯ надеюсь, у вас уже установлен PHP на компьютере, т.к. дальше я буду приводить примеры, и их надо будет запускать
Язык PHP создавался под стать протоколу HTTP – т.е. основная его задача – это дать ответ на HTTP запрос и “умереть” освободив память и ресурсы. Следовательно, и механизм сессий работает в PHP не в автоматическом режиме, а в ручном, и нужно знать что вызвать, да в каком порядке.
Перво-наперво необходимо “стартовать” сессию – для этого воспользуемся функцией session_start() , создайте файл session.start.php со следующим содержимым:
Session_start();
И теперь – обновляем страничку, и видим, что браузер отправляет эту куку на сервер, можете попробовать пару раз обновить страницу, результат будет идентичным:
Итого, что мы имеем – теория совпала с практикой, и это просто отлично.
Следующий шаг – сохраним в сессию произвольное значение, для этого в PHP используется супер-глобальная переменная $_SESSION , сохранять будем текущее время – для этого вызовем функцию date() :
Session_start(); $_SESSION["time"] = date("H:i:s"); echo $_SESSION["time"];
Обновляем страничку и видим время сервера, обновляем ещё раз – и время обновилось. Давайте теперь сделаем так, чтобы установленное время не изменялось при каждом обновлении страницы:
Session_start(); if (!isset($_SESSION["time"])) { $_SESSION["time"] = date("H:i:s"); } echo $_SESSION["time"];
Обновляем – время не меняется, то что нужно. Но при этом мы помним, PHP умирает, значит данную сессию он где-то хранит, и мы найдём это место…
Всё тайное становится явнымПо умолчанию, PHP хранит сессию в файлах – за это отвечает директива session.save_handler , путь по которому сохраняются файлы ищите в директиве session.save_path , либо воспользуйтесь функцией session_save_path() для получения необходимого пути.
В вашей конфигурации путь к файлам может быть не указан, тогда файлы сессии будут хранится во временных файлах вашей системы – вызовите функцию sys_get_temp_dir() и узнайте где это потаённое место.
Так, идём по данному пути и находим ваш файл сессии (у меня это файл sess_dap83arr6r3b56e0q7t5i0qf91), откроем его в текстовом редакторе:
Time|s:8:"16:19:51";
Как видим – вот оно наше время, вот в каком хитром формате хранится наша сессия, но мы можем внести правки, поменять время, или можем просто вписать любую строку, почему бы и нет:
Time|s:13:"\m/ (@.@) \m/";
Для преобразования этой строки в массив нужно воспользоваться функцией session_decode() , для обратного преобразования – session_encode() – это зовется сериализацией, вот только в PHP для сессий – она своя – особенная, хотя можно использовать и стандартную PHP сериализацию – пропишите в конфигурационной директиве session.serialize_handler значение php_serialize и будет вам счастье, и $_SESSION можно будет использовать без ограничений – в качестве индекса теперь вы сможете использовать цифры и специальные символы | и! в имени (за все 10+ лет работы, ни разу не надо было:)
Задание
Напишите свою функцию, аналогичную по функционалу session_decode() , вот вам тестовый набор данных для сессии (для решения знаний регулярных выражений не требуется), текст для преобразования возьмите из файла вашей текущей сессии:
$_SESSION["integer var"] = 123; $_SESSION["float var"] = 1.23; $_SESSION["octal var"] = 0x123; $_SESSION["string var"] = "Hello world"; $_SESSION["array var"] = ["one", "two", ]; $object = new stdClass(); $object->foo = "bar"; $object->arr = ["hello", "world"]; $_SESSION["object var"] = $object; $_SESSION["integer again"] = 42;
Так, что мы ещё не пробовали? Правильно – украсть “печеньки”, давайте запустим другой браузер и добавим в него теже самые cookie. Я вам для этого простенький javascript написал, скопируйте его в консоль браузера и запустите, только не забудьте идентификатор сессии поменять на свой:
Javascript:(function(){document.cookie="PHPSESSID=dap83arr6r3b56e0q7t5i0qf91;path=/;";window.location.reload();})()
Вот теперь у вас оба браузера смотрят на одну и туже сессию. Я выше упоминал, что расскажу о способах защиты, рассмотрим самый простой способ – привяжем сессию к браузеру, точнее к тому, как браузер представляется серверу – будем запоминать User-Agent и проверять его каждый раз:
Session_start(); if (!isset($_SESSION["time"])) { $_SESSION["ua"] = $_SERVER["HTTP_USER_AGENT"]; $_SESSION["time"] = date("H:i:s"); } if ($_SESSION["ua"] != $_SERVER["HTTP_USER_AGENT"]) { die("Wrong browser"); } echo $_SESSION["time"];
Это подделать сложнее, но всё ещё возможно, добавьте сюда ещё сохранение и проверку $_SERVER["REMOTE_ADDR"] и $_SERVER["HTTP_X_FORWARDED_FOR"] , и это уже более-менее будет похоже на защиту от злоумышленников посягающих на наши “печеньки”.
Ключевое слово в предыдущем абзаце похоже , в реальных проектах cookies уже давно «бегают» по HTTPS протоколу, таким образом никто их не сможет украсть без физического доступа к вашему компьютеру или смартфону
Задание
Добавьте в код проверку на IP пользователя, если проверка не прошла – удалите скомпрометированную сессию.
А теперь поясню по шагам алгоритм, как работает сессия в PHP, на примере следующего кода (настройки по умолчанию):
Session_start(); $_SESSION["id"] = 42;
- не находим – создаём пустой файл с именем sess_{$_COOKIE} (идентификатор может содержать лишь символы из диапазонов a-z , A-Z , 0-9 , запятую и знак минус)
- находим, читаем файл и распаковываем данные (см. session_decode()) в супер-глобальную переменную $_SESSION
Задание
Задайте в вашем браузере произвольное значение куки с именем PHPSESSID , пусть это будет 1234567890 , обновите страницу, проверьте, что у вас создался новый файл sess_1234567890
PHP может работать с сессией даже если cookie в браузере отключены, но тогда все URL на сайте будут содержать параметр с идентификатором вашей сессии, и да – это ещё настроить надо, но оно вам надо? Мне не приходилось это использовать, но если очень хочется – я просто скажу где копать:
А если надо сессию в базе данных хранить?Для хранения сессии в БД потребуется изменить хранилище сессии и указать PHP как им пользоваться, для этой цели создан интерфейс SessionHandlerInterface и функция session_set_save_handler .
Отдельно замечу, что не надо писать собственные обработчики сессий для redis и memcache – когда вы устанавливаете данные расширения, то вместе с ними идут и соответствующие обработчики, так что RTFM наше всё. Ну и да, обработчик нужно указывать до вызова session_start() ;)
Задание
Реализуйте SessionHandlerInterface для хранения сессии в MySQL, проверьте, работает ли он.
Это задание со звёздочкой, для тех кто уже познакомился с базами данных.
Интересный вопрос, можете задать его матёрым разработчикам – когда PHP удаляет файлы просроченных сессий? Ответ есть в официальном руководстве, но не в явном виде – так что запоминайте:
Сборщик мусора (garbage collection) может запускаться при вызове функции session_start() , вероятность запуска зависит от двух директив session.gc_probability и session.gc_divisor , первая выступает в качестве делимого, вторая – делителя, и по умолчанию эти значения 1 и 100, т.е. вероятность того, что сборщик будет запущен и файлы сессий будут удалены – примерно 1%.
Задание
Измените значение директивы session.gc_divisor так, чтобы сборщик мусора запускался каждый раз, проверьте что это так и происходит.
Ошибка у которой более полумиллиона результатов в выдаче Google:
Cannot send session cookie – headers already sent
by
Cannot send session cache limiter – headers already sent
Для получения таковой, создайте файл session.error.php со следующим содержимым:
Echo str_pad(" ", ini_get("output_buffering")); session_start();
Во второй строке странная “магия” – это фокус с буфером вывода, я ещё расскажу о нём в одной из следующих статей, пока считайте это лишь строкой длинной в 4096 символов, в данном случае – это всё пробелы
Запустите, предварительно удалив cookie, и получите приведенные ошибки, хоть текст ошибок и разный, но суть одна – поезд ушёл – сервер уже отправил браузеру содержимое страницы, и отправлять заголовки уже поздно, это не сработает, и в куках не появилось заветного идентификатора сессии. Если вы стокнулись с данной ошибкой – ищите место, где выводится текст
раньше времени, это может быть пробел до символов в одном из подключаемых файлов, и ладно если это пробел, может быть и какой-нить непечатный символ вроде BOM , так что будьте внимательны, и вас сия зараза не коснется (как-же, … гомерический смех).
Задание
Для проверки полученных знаний, я хочу, чтобы вы реализовали свой собственный механизм сессий и заставили приведенный код работать:
Require_once "include/sess.php"; sess_start(); if (isset($_SESS["id"])) { echo $_SESS["id"]; } else { $_SESS["id"] = 42; }
Для осуществления задуманного вам потребуется функция register_shutdown_function()
В заключениеВ этой статье вам дано шесть заданий, при этом они касаются не только работы с сессиями , но так же познакомят вас с MySQL и с функциями работы со строками . Для усвоения этого материала – отдельной статьи не нужно, хватит и мануала по приведенным ссылкам – никто за вас его читать не будет. Дерзайте!
P.S. Если узнали что-то новое из статьи – отблагодарите автора – зашарьте статью в социалках;)
Популярное
- Услуга конференц связь мтс отключить
- Музыка (Yandex music downloader)
- Новостной и аналитический портал "время электроники"
- Премиум шаблон Tempera. Супер тема wordpress. Вниманию пользователей Mantra, Nirvana, Parabola, Tempera: плагин Cryout Serious Theme Settings Случайные записи из рубрики
- Мощность: сколько ватт нужно АС
- Россию покроет «умная пыль Умная пыль нанотехнологии
- Обзор тарифов линейки «Просто супер» от МТС-Украина
- LG Spirit - Технические характеристики
- "Неполадки подключения или неверный код MMI "
- Обзор и тестирование смартфона Sony Xperia Z5 Compact
