|
|
|
| Я совсем недавно начал изучать web-технологии. Сейчас добрался до сессий. Проблема в следующем:
<?php
session_start( );
// Тут пока ничего нет
session_destroy( );
?>
Почему-то IE выдает в результате следующий текст:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at d:\webshare\wwwroot\test_session.php:11) in d:\webshare\wwwroot\test_session.php on line 18
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at d:\webshare\wwwroot\test_session.php:11) in d:\webshare\wwwroot\test_session.php on line 18
В 18-той строке находится session_start( );.
У меня установлен веб-сервер Apache 1.3, который вроде работает. По крайней мере php-страницы, которые не содержат функций сессий он обрабатывает верно.
Еще одна проблема: почему-то php не передает на страницу параметры после знака «?». Например, в IE видно, что строка содержит параметр: www........?start=10
Как я понимаю после этого открываемая страница должна получить переменную $start=10, но этого не происходит - $start остается равной 0.
| |
|
|
|
|
|
|
|
для: Odin Kg
(02.07.2004 в 19:57)
| | >Почему-то IE выдает в результате следующий текст:
>Warning: session_start() [function.session-start]: Cannot
>send session cookie - headers already sent by (output
>started at d:websharewwwroot est_session.php:11) in
>d:websharewwwroot est_session.php on line 18
>В 18-той строке находится session_start( );.
А что находится в 11 строке? Судя по предупреждению, происходит вывод в окно браузера. В этом случае сессии не будут работать, так как информация для их организации формируется через HTTP-заголовок, который уже отправлен клиенту (так как вы что-то выводите в браузер).
>Еще одна проблема: почему-то php не передает на страницу
>параметры после знака «?». Например, в IE видно, что строка
>содержит параметр: www........?start=10
>Как я понимаю после этого открываемая страница должна
>получить переменную $start=10, но этого не происходит -
>$start остается равной 0.
Дело в отключенной переменной register_globals, если вы работаете на локальной машине в php.ini следует исправить её на
Но лучше сразу разрабатывать скрипты с использованием суперглобальных массивов.
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=51&page=1 | |
|
|
|
|
|
|
|
для: cheops
(02.07.2004 в 21:52)
| | А что находится в 11 строке? Судя по предупреждению, происходит вывод в окно браузера. В этом случае сессии не будут работать, так как информация для их организации формируется через HTTP-заголовок, который уже отправлен клиенту (так как вы что-то выводите в браузер).
Для понятности высылаю полный текст сценария заново. Проблема происходит в строке 4 из-за строки 2.
1
2 <?
3
4 session_start( );
5
6 session_destroy( );
7
8 ?>
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at d:\webshare\wwwroot\test_session.php:2) in d:\webshare\wwwroot\test_session.php on line 4
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at d:\webshare\wwwroot\test_session.php:2) in d:\webshare\wwwroot\test_session.php on line 4
Дело в отключенной переменной register_globals, если вы работаете на локальной машине в php.ini следует исправить её на register_globals = On
Но лучше сразу разрабатывать скрипты с использованием суперглобальных массивов.
Большое спасибо – совет помог. Если можно ответьте на детский вопрос: почему так лучше не делать? И что такое суперглобальные массивы (как ими пользоваться)?
Большое спасибо
| |
|
|
|
|
|
|
|
для: Odin Kg
(03.07.2004 в 13:10)
| | Пока в форуме нет cheopsa попробую ответить я.
>Но лучше сразу разрабатывать скрипты с использованием суперглобальных массивов.
>Большое спасибо – совет помог. Если можно ответьте на детский вопрос: почему так лучше не делать?
Новая 5 версия PHP вышла с отключенными по умолчанию register_globals. И скоро хостеры в массовом порядке будут переходить на php5. А вот что они сделают с register_globals (включат или оставят выключенной) большой вопрос.
А используя суперглобальные массивы Вы будете независимы от этой опции.
Суперглобальные массивы… лучше об этом расскажет cheops, а я на примере покажу
Для того, чтобы получить переданную в скрипт переменную через форму или через строку браузера нужно писать так:
Вот $_GET - это и есть суперглобальный массив
А вот такие пробемы (по ссылке) могут быть из-за отключенных register_globals
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=51&page=1 | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(03.07.2004 в 13:27)
| | >Суперглобальные массивы… лучше об этом расскажет cheops
Разделение труда? :))) | |
|
|
|
|
|
|
|
для: Odin Kg
(03.07.2004 в 13:10)
| | Давайте попробуем вот так:
1 <?
2 session_start( );
3 session_destroy( );
4 ?>
Символ переноса строки перед <? тоже может отправлятся в окно браузера.
Использование суперглобальных массивов необходимо для увеличения безопасности скриптов. PHP ведь позволяет не объявлять и не инициализировать переменные и через строку запроса такие переменные можно установить.
Обычно приводят следующий классический пример, из формы index.php в обработчик handler.php передаётся два параметра user и password, для имени и пароля, по которым посетителю предоставляется доступ к какой-либо странице, ну допустим управлению его виртуальным счётом:
<?php
// Файл handler.php, принимающий от формы index.php два параметра
// $user и $password для имени пользователя и пароля, соответственно
if($user == "user1" && $password == "password1")
{
$access = 1;
}
if($access)
{
// Доступ к виртуальному счёту
}
?>
|
А вот теперь если в строке запроса обратится по адресу handler.php?access=1 вы будете пущены вообще минуя форму. Обойти, это конечно очень просто, но в больших Web-приложениях могут быть неочевидные ситуации. На фоне того, что злоумышленник может автоматически обращатся и анализировать ответы, или коды выложены для всеобщего доступа, вероятность взлома возрастает значительно, так как отследить все такие ситуации сложно.
Для этого введены так называемые суперглобальные массивы - предопределённые массивы в которых размещаются внешние переменные. При отключенной директиве register_globals из скрипта не доступны внешние переменные, такие как параметры запроса, параметры возвращаемые формой по методу POST, cookie, сессии и т.п. просто по имени $variable. Для этого используются суперглобальные массивы
$_GET['variable'] - для строки запроса (метод GET);
$_POST['variable'] - для метода POST
$_FILES['variable'] - для файлов передаваемых из формы
$_SESSION['variable'] - для сессий
$_COOKIE['variable'] - для cookie
и др. | |
|
|
|
|
|
|
|
для: cheops
(03.07.2004 в 16:09)
| | Немного уточню по поводу массива $_FILES. Он несколько отличается от других тем, что он - двумерный суперглобальный массив. Возможны следующие варианты его использования:
$_FILES["filename"]["name"] (содержит исходное имя файла на клиентской машине);
$_FILES["filename"]["size"] (содержит размер загруженного файла в байтах);
$_FILES["filename"]["type"] (содержит MIME-тип файла);
$_FILES["filename"]["tmp_file"] (содержит имя временного файла, в кото-рый сохраняется загруженный файл).
| |
|
|
|
|
автор: Drank (03.07.2004 в 16:46) |
|
|
для: Odin Kg
(02.07.2004 в 19:57)
| | Слушай как ты добрался до этого?
Я например не знаю как установить php сервер на своём компе, а нужно это делать, где ты раздобыл описание? | |
|
|
|
|
|
|
|
для: Drank
(03.07.2004 в 16:46)
| | Первым делом, хочу поблагодарить Дизайнера, cheopsа и Кузнецова М.В за подробные объяснения. Связь с новичками у вас отлично поставлена. Спасибо.
Теперь попытаюсь помочь Drankу.
Видимо, Вы спрашивали как запустить в работу систему web-сервер – PHP. Сразу скажу, что я работают под Windows (с Unix-ом так не получится).
Первым делом, чтобы не возиться с web-сервером я скачал себе среду для работы с PHP. Таковая имеется на www.phpexperteditor.com (где-то 2,5 MB). Далее скачал PHP5 с www.php.net/downloads . Теперь разархивируйте php в папку c:\PHP. После этого в среде уже можно работать. Однако IE воспринимать Ваши php-файлы не будет – нужен web-сервер.
Кстати, чтобы php.ini файл воспринимался нужно положить его в каталог Windows. Сделать этот файл можно методом переименования файла php.ini-dist, который будет лежать у Вас в папке c:\PHP.
Скачайте веб-сервер Apache 1.3 (ссылок на него полно).
Теперь сообщите мне свой e-mail (можете в форуме, можете написать мне письмо), и я вышлю Вам конфигурационный файл с пояснениями.
| |
|
|
|
|
|
|
|
для: Drank
(03.07.2004 в 16:46)
| | Хм... пожалуй действительно стоит написать статью в раздел "Статьи о PHP" об инсталляции связки PHP и Apache.
/*задумчиво оглядываясь по сторонам*/ кого-бы заставить... | |
|
|
|
|
|
|
|
для: Drank
(03.07.2004 в 16:46)
| | Почему-то никак не отправляется письмо по вашему адресу... вероятно mail.ru в борьбе со спамом окончательно решил принимать письма только со своих почтовых ящиков :))) Я уже был вынужден отказаться от их услуг, так как ничего невозможно ни отправить и ни получить... Надеюсь вы сюда загляните...
>Как установить php сервер на соём компьютере?
>Очень много справочной информации по программированию,
>но нет простого описания по установке php сервера и ссылок на ftp ресурсы с дистрибутивом.
Вероятно вам PHP нужен для работы с Web, тогда кроме самого PHP потребуется Web-сервер, настроенный для работы на локальной машине. Обычно для этого используют Apache, как наиболее распространённый и удобный сервер. После того как на системе запускается Apache к нему прикручивают PHP, который работет как его модуль или CGI-скрипт.
Скачать Apache можно с зеркал приведённых на официальном сайте http://www.apache.org/dyn/closer.cgi. При поиске следует помнить, что Apache так же может называться httpd, по имени его демона в UNIX. На зеркалах обычно много различных файлов, например:
httpd-2.0.49-win32-src.zip - это архив с исходными кодами (src) для Windows (win32) Web-сервера Apache (httpd) версии 2.0.49.
httpd-2.0.49.tar.gz - тоже самое, но для Linux, в котором программы принято распрастранять в исходных кодах.
apache_2.0.50-win32-x86-no_ssl.exe - а вот это, откомпилированный под архитектуру (x86) для Windows (win32) без поддержки SSL(no_ssl) сервер Apache (apache) версии 2.0.50 - вот он и нужен.
Чтобы вам не мучатся, вот ресурс где можно его взять: http://apache.rin.ru/dist/httpd/binaries/win32/
После этого его необходимо поставить, указав в качестве ServerName и Network Domain имя localhost (это имя для использования сервера на локальной машине, которое связано с IP-адресом 127.0.0.1, который зарезервирован для локального использования).
После успешной инсталляции при наборе в окне браузера http://localhost/ или http://127.0.0.1/ - должна загрузится страница сервера.
После этого к нему можно прикручивать PHP, для этого необходимо его скачать, ну например со страницы http://ru2.php.net/get/php-4.3.7-installer.exe/from/a/mirror. После этого его устанавливаем в папку C:/PHP, для того, чтобы PHP и Apache начали взаимодействовать (здесь PHP будет выступать в качестве CGI-скрипта), в конфигурационном файле Apache (conf/httpd.conf) необходимо добавить строки
AddType application/x-httpd-php phtml php
<Directory "c:/php">
Options ExecCGI
</Directory>
ScriptAlias "/php_dir/" "c:/php/"
Action application/x-httpd-php "/php_dir/php.exe"
|
Если что-то не получается пишите - будем разбираться. | |
|
|
|
|
автор: elenaki (20.07.2004 в 15:05) |
|
|
для: cheops
(04.07.2004 в 12:11)
| | караул! HELP! СОС! внезапно, т.е. абсолютно ни с того ни с сего стало выдаваться такое же
сообщение:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /******//top.php:8) in /*******/offers2.php on line 2
2 раза, вместо ***** адрес сайта.
в строке 2 файла offers2.php - вызов сессии, в строке 8 файла top.php - meta-tag keywords
register_globals = On, сессии в другой папке на том же сайте работают. что опять случилось?
какую еще свинью мне этот "условно-бесплатный" хостер подложил?...
| |
|
|
|
|
автор: elenaki (20.07.2004 в 15:15) |
|
|
для: elenaki
(20.07.2004 в 15:05)
| | sorry. не два раза. там разные строки - session cookie и session cashe limiter | |
|
|
|
|
автор: elenaki (20.07.2004 в 16:09) |
|
|
для: elenaki
(20.07.2004 в 15:15)
| | исправили. работают сессии. заразы! экспериментаторы хреновы!
как они меня задолбали! только закончила один скрипт, хотела шефу показать - ни фига не работает. ни новое ни старое!
предложили мне за php upload сходить на php.net... я им ответила, что скрипт работает и
дело не в скрипте, а в их настройках сервера. я еще на одном сервере проверила, там PHP
как cgi установлен. все работает. надо будет после отпуска все-таки поговорить с шефом
на тему смены хостинга. невозможно с такой "поддержой" работать.
| |
|
|
|
|
|
|
|
для: elenaki
(20.07.2004 в 15:05)
| | Т.е. top.php включён в offers2.php оператором include?
До, или после вызова сессии? | |
|
|
|
|
автор: elenaki (20.07.2004 в 17:01) |
|
|
для: cheops
(20.07.2004 в 15:58)
| | до. а какая разница? раньше-то все работало. и сейчас работает. это они там на сервере мудрят. | |
|
|
|
|
|
|
|
для: elenaki
(20.07.2004 в 17:01)
| | Тогда действительно никакой :))) | |
|
|
|