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
Форумы портала PHP.SU :: Версия для печати :: Сессия и cURL
Форумы портала PHP.SU » » HTTP и PHP » Сессия и cURL

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

1. mixalic - 16 Августа, 2013 - 08:10:54 - перейти к сообщению
Приветствую всех! Прошу о помощи, так как на последнем этапе разработки столкнулся с очень неприятной проблемой. Ситуация такая:

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 на сервере дергать, та же ситуация. Может кто-то сказать. что я не так делаю?
2. 3d_killer - 16 Августа, 2013 - 08:17:48 - перейти к сообщению
может я ошибаюсь, но разве в файле
curl.php
не нужно делать?
3. avtor.fox - 16 Августа, 2013 - 08:40:03 - перейти к сообщению
mixalic, если честно, то я ничего не понял. Не понял почему такая реализация кеша в принципе. Курлом что-то дёргать, что-то тянуть из сессий и что-то катить в гору. Нипанятна.


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

Возможно, что не ошибаетесь.
4. mixalic - 16 Августа, 2013 - 09:11:17 - перейти к сообщению
3d_killer, на первый взгляд именно в это дело. Будет доступ к ПК попробую. Благодарю. Действительно очевидная ошибка, как мне кажется.

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

mixalic пишет:
Если считаете, что что-то не оптимально написано, поделитесь как Вы бы это сделали.
Боюсь он не сможет дать совет, потому что
avtor.fox пишет:
если честно, то я ничего не понял.
Улыбка
6. avtor.fox - 16 Августа, 2013 - 09:55:46 - перейти к сообщению
DelphinPRO, почему же? Вы меня совсем за человека не считаете Огорчение

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

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

* Это самое простое в реализации кеша.
* Помнится у товарища EuGen был пост с описанием реализации кеширования (если не изменяет память то).
* Зачем какие-то сессии и прочая мурня?
* И кстати, Вы не показав собственно файл cache.php спрашиваете в чём ошибка, а ошибка может быть и в нём.
7. mixalic - 18 Августа, 2013 - 13:57:24 - перейти к сообщению
avtor.fox, спасибо способ хороший, поробую в будущем. Сейчас же переписывать ничего не буду, ведь осталось решить последнюю проблему. Файл cachee.php и приведен во втором листинге. Приводить файлы использующиеся для кэширования не вижу смысла, из браузера все отлично кэшируется. Сессия теряется только при работе с cURL.

Совет 3d_killer не помог. Файл cache.php по прежнему не видит переменных сессии.
8. caballero - 18 Августа, 2013 - 15:40:35 - перейти к сообщению
Цитата:
Сессия теряется только при работе с cURL.

А с чего бы сессии работать при обращении через курл.
9. mixalic - 18 Августа, 2013 - 18:05:08 - перейти к сообщению
caballero, спасибо, я заметил, что она не работает. Очень ценное замечание.

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

Жестко привязываем сессию к скрипту:
CODE (Linux):
скопировать код в буфер обмена
  1. curl -b PHPSESSID=session_id url

 

Powered by ExBB FM 1.0 RC1