Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Странное поведение PHP на Ubuntu Server
Покинул форум
Сообщений всего: 12
Дата рег-ции: Июль 2006 Откуда: Москва
Помог: 1 раз(а)
Есть сайт, написанный на PHP. На этом сайте у авторизованных пользователей есть возможность загружать на сервер картинки. Картинки загружаются при помощи SWFUpload 2. Всё работало как часы, но недавно пользователи начали жаловаться, что картинки не загружаются. Начал разбираться и оказалось, что в файле, которому SWFUpload передаёт загружаемую картинку, пусть он будет называться upload.php, происходят странные вещи. В upload.php в POST параметрах передаются нужные для сохранения данные, а также PHPSESSID. Далее upload.php, используя полученный PHPSESSID пытается стартануть сессию ( session_id( $_POST['PHPSESSID'] ); session_start(); ). Вот в этом моменте и начается веселье. Сессия стартует, но пустая! Причём через раз она действительно очищается и пользователь, находящийся на сайте, вылетает. На остальном сайте сессия стартуется через COOKIE и работает отлично. В файл upload.php COOKIE не передаются, так как он вызывается из Flash.
Кто знает что делать и куда копать?
Не могу вспомнить чтобы что-нибудь менял на сервере. Последнее что делал на нём — устанавливал задачу на автозапуск php-скрипта в cron.
Лог того, что происходит в файле upload.php: http://pastebin[dot]com/aKGSaFQV
Конфигурация сервера: Ubuntu Server / Apache 2 / PHP Version 5.2.6-3ubuntu4.6
----- And remember, respect is everything!
Uchkuma
Отправлено: 08 Ноября, 2010 - 21:32:07
Участник
Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010 Откуда: Киров
Помог: 6 раз(а)
Так вы же сами ее потираете:
Zeboton пишет:
session_id( $_POST['PHPSESSID'] );
Zeboton
Отправлено: 08 Ноября, 2010 - 22:09:52
Новичок
Покинул форум
Сообщений всего: 12
Дата рег-ции: Июль 2006 Откуда: Москва
Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010 Откуда: Киров
Помог: 6 раз(а)
Zeboton пишет:
Или я что-то неправильно в мануале понял?
Давайте все же по-русски, понятнее будет.
Цитата:
session_id() возвращает id текущей сессии. Если id специфицирован, он замещает текущий session id.
Зачем вам замещать текущий id?
php автоматически принимает PHPSESSID и продолжает сессию, если такой id существует. Его не нужно принудительно специфицировать. Ф-я session_id используется для того, чтобы изменить текущий id на другой. В течение сессии этот id не меняется.
OrmaJever
Отправлено: 08 Ноября, 2010 - 23:14:59
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
session_id() возвращает id текущей сессии.
попробуйте вывести session_id() и $_POST['PHPSESSID']
Если значения разные то не удивителньо что меняется сесия.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Zeboton
Отправлено: 09 Ноября, 2010 - 06:48:35
Новичок
Покинул форум
Сообщений всего: 12
Дата рег-ции: Июль 2006 Откуда: Москва
Помог: 1 раз(а)
Uchkuma, перевод того, что написано в мануале:
Цитата:
Если id задан, то это заменит текущий id сессии. session_id() должна быть вызвана до session_start(), чтобы от неё был эффект.
Uchkuma, OrmaJever, г-да, поверьте мне, и пробовал и с session_id( $_POST['PHPSESSID'] и без — результат одинаковый. Чтобы это доказать — вот: http://pastebin[dot]com/pdNh0npV
Смотрите п.3.0.1 (вызван до session_id( $_POST['PHPSESSID'] ), п.3.0.2 (вызван сразу после). Без session_id( $_POST['PHPSESSID']): http://pastebin[dot]com/SQDcQ4VG
И ещё раз повторю — это скрипт ( с session_id( $_POST['PHPSESSID']) ) прекрасно работал на этом же сервере до какого-то момента! Я больше склоняюсь, что сбилось что-то в конфигурации сервера или PHP.
P.S.
Uchkuma, я — сама экономность: у меня на клавиатуре нет лампочек
----- And remember, respect is everything!
Uchkuma
Отправлено: 09 Ноября, 2010 - 08:44:56
Участник
Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010 Откуда: Киров
Помог: 6 раз(а)
Zeboton пишет:
Чтобы это доказать — вот: http://pastebin.com/pdNh0npV
Посмотрел. А вы попробуйте вызовите session_id после session_start и без аргументов. Что она вернет?
JustUserR
Отправлено: 09 Ноября, 2010 - 12:29:11
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Zeboton Для обеспечение мануального управление идентификаторами сессии и блоком их инициализации возможно использование такой схемы - первоначально обеспечивается такая настройка PHP-интерпретатора осуществляющая блокировку автоматической передачи информационного поля с идентификатором сессии - в cookie-значения или trans_sid-подстановку После проведения указанного действия возможна реализация управления встроенных механизмом cookie посредством использования набора функций - в таком случае применение session_start с передачей идентификатора сессии в качесмтве аргумента осуществляет ее возобновления - в то время как session_id используется для мануального получения информационного поля phpsessid
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Zeboton
Отправлено: 10 Ноября, 2010 - 03:58:56
Новичок
Покинул форум
Сообщений всего: 12
Дата рег-ции: Июль 2006 Откуда: Москва
Помог: 1 раз(а)
Uchkuma пишет:
Посмотрел. А вы попробуйте вызовите session_id после session_start и без аргументов. Что она вернет?
п.3.2. в логе
JustUserR, что-то я не нашёл в документации, что session_start можно передавать аргументы, но попробовал — не помогло.
----- And remember, respect is everything!
OrmaJever
Отправлено: 10 Ноября, 2010 - 13:04:44
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Zeboton пишет:
что-то я не нашёл в документации, что session_start можно передавать аргументы
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
JustUserR
Отправлено: 11 Ноября, 2010 - 09:38:30
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Zeboton пишет:
JustUserR, что-то я не нашёл в документации, что session_start можно передавать аргументы, но попробовал — не помогло
Для осуществления диагностики механихма сессии в пределах администрируемого вами web-ресурса возможно использование следующей схемы - главным критерием обеспечение запуска и остановки сессии а также извлечения и переади ее идентификатора производится исключительно в мануальном режиме посредством применения соответствующих PHP-фукнций с требуемыми аргументами - в таком случае возможность проверки используемой сессии и назначение целевого значения обеспечивется исключительно информационными полями на клиентской стороне
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Zeboton
Отправлено: 14 Ноября, 2010 - 08:14:04
Новичок
Покинул форум
Сообщений всего: 12
Дата рег-ции: Июль 2006 Откуда: Москва
Помог: 1 раз(а)
Проблема явно была в конфликте чего с чем-то на сервере или в самом PHP, так как после переустановки серверного ПО всё заработало как нужно.
----- And remember, respect is everything!
JustUserR
Отправлено: 14 Ноября, 2010 - 18:57:19
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Zeboton пишет:
Проблема явно была в конфликте чего с чем-то на сервере или в самом PHP, так как после переустановки серверного ПО всё заработало как нужно.
Возможной причиной неправильной работы механихма сессий в испольуемых вами PHP-скриптах являлось наличие конфигурационных директив - обеспечивающих автоматизацию продления инстанции сессии в текущем выполнении - в то время как используемые в PHP-скриптах функциональные компоненты обеспечивали самостоятельное управление даным процессом
Как правило для решения указаной задачи - необходимо произвести включение или выключение директив use_cookies и use_trans_sid а также опцию автоматического проления сессии - в зависимости от конструкционных особенностей web-приложения
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Zeboton
Отправлено: 14 Ноября, 2010 - 21:18:51
Новичок
Покинул форум
Сообщений всего: 12
Дата рег-ции: Июль 2006 Откуда: Москва
Помог: 1 раз(а)
JustUserR, всё работало и работает сейчас, а значит был сбой.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.