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 :: Сессия и cURL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Нет доступа к переменным сессии из cURL
mixalic
Отправлено: 16 Августа, 2013 - 08:10:54
Post Id



Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Июль 2011  
Откуда: Воскресенск


Помог: 0 раз(а)




Приветствую всех! Прошу о помощи, так как на последнем этапе разработки столкнулся с очень неприятной проблемой. Ситуация такая:

1. Есть сессия в рамках которой есть некое количество переменных, она инициализируется файлом session.php;
2. Есть файл cache.php, который берет данные из этой сессии и генерирует кэш-файл, который потом будет подтягиваться к html-таблице.

Если запустить файл сессии из браузера, а потом запустить cache.php, то в него быстро и легко подтягиваются значения из переменных, находящихся в сессии - это работает отлично.

Но! Мне необходимо автоматически генерировать кэш. Я создал файл curl.php и дергаю в нем поочередно сначала файл session.php, а потом cache.php - и переменные из него не поддтягиваются! Ну хоть ты тресни!

Собственно код:
PHP:
скопировать код в буфер обмена
  1.  
  2. //session.php
  3. $_SESSION["var1[$i]"] = myFunction('text_1', 'text_2');
  4. $_SESSION["var2[$i]"] = myFunction('text_1', 'text_2');
  5. $_SESSION["var3[$i]"] = myFunction('text_1', 'text_2');


PHP:
скопировать код в буфер обмена
  1.  
  2. //cache.php
  3. include ("../start_cache.php");
  4.  
  5.  
  6.         $var1[$i] = $_SESSION["var1[$i]"];
  7.         $var2[$i] = $_SESSION["var2[$i]"];
  8.         $var3[$i] = $_SESSION["var3[$i]"];
  9.  
  10. myFunction_2($var1, $var2, $var3); // Ощущения, что при cURL эти переменные не передаются
  11.  
  12. include ("../end_cache.php");


PHP:
скопировать код в буфер обмена
  1.  
  2. //curl.php
  3.  
  4. // создаем оба ресурса cURL
  5. $ch1 = curl_init();
  6. $ch2 = curl_init();
  7.  
  8. // устанавливаем URL и другие соответствующие опции
  9. curl_setopt($ch1, CURLOPT_URL, "http://mysite.ru/session.php?".session_name().'='.session_id());
  10. curl_setopt($ch1, CURLOPT_HEADER, 0);
  11.  
  12. curl_setopt($ch2, CURLOPT_URL, "http://mysite.ru/tables/cache.php?cache_name=my_cache&".session_name().'='.session_id());
  13. curl_setopt($ch2, CURLOPT_HEADER, 0);
  14.  
  15. //создаем набор дескрипторов cURL
  16.  
  17. //добавляем два дескриптора
  18.  
  19. $active = null;
  20. //запускаем дескрипторы
  21. do {
  22.     $mrc = curl_multi_exec($mh, $active);
  23. } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  24.  
  25. while ($active && $mrc == CURLM_OK) {
  26.     if (curl_multi_select($mh) != -1) {
  27.         do {
  28.             $mrc = curl_multi_exec($mh, $active);
  29.         } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  30.     }
  31. }
  32.  
  33. //закрываем все дескрипторы


Я зашел в тупик, если curl через shell на сервере дергать, та же ситуация. Может кто-то сказать. что я не так делаю?

(Отредактировано автором: 16 Августа, 2013 - 08:12:43)

 
 Top
3d_killer
Отправлено: 16 Августа, 2013 - 08:17:48
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




может я ошибаюсь, но разве в файле
curl.php
не нужно делать?
 
My status
 Top
avtor.fox
Отправлено: 16 Августа, 2013 - 08:40:03
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




mixalic, если честно, то я ничего не понял. Не понял почему такая реализация кеша в принципе. Курлом что-то дёргать, что-то тянуть из сессий и что-то катить в гору. Нипанятна.


3d_killer пишет:
может я ошибаюсь, но

Возможно, что не ошибаетесь.
 
 Top
mixalic
Отправлено: 16 Августа, 2013 - 09:11:17
Post Id



Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Июль 2011  
Откуда: Воскресенск


Помог: 0 раз(а)




3d_killer, на первый взгляд именно в это дело. Будет доступ к ПК попробую. Благодарю. Действительно очевидная ошибка, как мне кажется.

avtor.fox, я создал тему не для того, чтобы рассказать о своем проекте, а для решения проблемы по конкретному коду. Так что понимать что это и для чего, чтобы дать совет в принципе и не обязательно. Если считаете, что что-то не оптимально написано, поделитесь как Вы бы это сделали. С интересом почитаю, опыта мало, возможно узнаю что-то новое.
 
 Top
DelphinPRO
Отправлено: 16 Августа, 2013 - 09:19:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)





mixalic пишет:
Если считаете, что что-то не оптимально написано, поделитесь как Вы бы это сделали.
Боюсь он не сможет дать совет, потому что
avtor.fox пишет:
если честно, то я ничего не понял.
Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
avtor.fox
Отправлено: 16 Августа, 2013 - 09:55:46
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




DelphinPRO, почему же? Вы меня совсем за человека не считаете Огорчение

mixalic, дело в том, что реализация гкхмм. А что нам нужно? Нам нужен независимый* кеш.

One(?)
* Смотрим, какие данные тянутся. Например каталог товара. Какие камни? Более полумиллиона позиций. Что нам нужно? Нам нужно создать для каждой позиции кеш! (полноценное кеширование (на товар по кешу) | кеширование области страницы (сложности)).
* Хотим кешировать странички полностью и не трогать базу для выборки позиций! Для этого нам потребуется таблица с примерными колонками - page | filecashe | some collumn.
* "Зачем нам база данных, если мы хотим кешировать данные, а к ней всё равно обращаемся?" - дело в том, что обращения к базе будут происходить в любом случае (в противном, работайте с файлами, пожалуйста), но эти запросы относительно ничтожны.
* Как нам создать кеш и потом к нему обратиться?
1. Смотрим на юрлу, проверяем её наличие в базе. Нет значения? Собираем необходимую информацию (в абсолютном порядке) и пишем в файл.
2. Итак, файл создан. Но, что дальше? Дальше имя файла и адрес страницы по которой обратились заносим в таблицу.
3. Повторяем пункт 1/ и находим нужную строку в таблице. Тянем нужный файл и отдаём его.

* Это самое простое в реализации кеша.
* Помнится у товарища EuGen был пост с описанием реализации кеширования (если не изменяет память то).
* Зачем какие-то сессии и прочая мурня?
* И кстати, Вы не показав собственно файл cache.php спрашиваете в чём ошибка, а ошибка может быть и в нём.
 
 Top
mixalic
Отправлено: 18 Августа, 2013 - 13:57:24
Post Id



Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Июль 2011  
Откуда: Воскресенск


Помог: 0 раз(а)




avtor.fox, спасибо способ хороший, поробую в будущем. Сейчас же переписывать ничего не буду, ведь осталось решить последнюю проблему. Файл cachee.php и приведен во втором листинге. Приводить файлы использующиеся для кэширования не вижу смысла, из браузера все отлично кэшируется. Сессия теряется только при работе с cURL.

Совет 3d_killer не помог. Файл cache.php по прежнему не видит переменных сессии.
 
 Top
caballero
Отправлено: 18 Августа, 2013 - 15:40:35
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Сессия теряется только при работе с cURL.

А с чего бы сессии работать при обращении через курл.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
mixalic
Отправлено: 18 Августа, 2013 - 18:05:08
Post Id



Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Июль 2011  
Откуда: Воскресенск


Помог: 0 раз(а)




caballero, спасибо, я заметил, что она не работает. Очень ценное замечание.

Решение было на поверхности, дико обидно что я потерял на него весь день.

Жестко привязываем сессию к скрипту:
CODE (Linux):
скопировать код в буфер обмена
  1. curl -b PHPSESSID=session_id url
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB