Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Проблемы с хранением массива в SESSION / 11 сообщений из 11, страница 1 из 1
22.03.2014, 14:34
    #38593573
Sublime
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с хранением массива в SESSION
Добрый день!

Делаю парсер с отображением процента выполнения. Суть в том что при загрузке парсера запускается сессия session_start();, далее я нажимаю на кнопку и отправляется ajax запрос к тому же файлу, только условие if другое, в этом условии генерируется массив, который я сохраняю в сессию, и вывожу некий результат обратно, и по циклу снова отправляется ajax запрос где происходит тоже самое, только массив добавляю в сессию под другим ключом.

Может что в коде не так, не могу разобраться. Помогите плиз!

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
ini_set('max_execution_time', '3600');

//
if($_POST['ret'] == 'count'){
	session_start();
	$content = file_get_contents($_POST['ur']l);
	preg_match('!(?<=<span>).*?(?=</span>)!si', $content, $array_result);
	echo $array_result[0];
}
if($_POST['ret'] == 'creat_table'){
	$content = '';
	$pattern = array(
		'processing' => '/<select name=\"PROP[PROCESSING]\">.*?<option.*?selected.*?>(.*?)<\//s'
	);
	if($_POST['each_id'] == 0) $i = 20;
	elseif($_POST['each_id'] == 21) $i = 70;
	else $i = $_POST['each_id'];
	while ($i <= $_POST['count']) {
		$content = $content = file_get_contents('http://razrez.v1rt.ru/?login=yes&backurl=/&AUTH_FORM=Y&TYPE=AUTH&USER_LOGIN=manager&USER_PASSWORD=a12354&ID='.$i);
		$array_result[$i]['processing'] = $processing[0];
		if($data_drilling[0] !== ''){
			$i++;
			$_SESSION['array_result'] = $array_result;
			break;
		}
		$array_result = '';
		$i++;
	}
	$len_array = count($_SESSION['array_result']);
	$procent_1 = ceil($_POST['count'] * 0.01);
	if($len_array > $procent_1) $procent = ceil($len_array/$procent_1);
	else $procent = 1;
	if($procent === 100){
		session_destroy();
		print_r($_SESSION['array_result']);
	}
	else{
		echo $procent.'|'.$i;
		print_r($_SESSION['array_result']);
	}
}
...
Рейтинг: 0 / 0
22.03.2014, 15:42
    #38593597
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с хранением массива в SESSION
session_start() должно быть отработано в любом случае до использования массива $_SESSION.
...
Рейтинг: 0 / 0
22.03.2014, 16:30
    #38593610
Sublime
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с хранением массива в SESSION
Фактически я использую session_start() один раз при загрузке скрипта

Код: php
1.
2.
3.
4.
5.
6.
if($_POST['ret'] == 'count'){
	session_start();
	$content = file_get_contents($_POST['ur']l);
	preg_match('!(?<=<span>).*?(?=</span>)!si', $content, $array_result);
	echo $array_result[0];
}



Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
if($_POST['ret'] == 'creat_table'){
	$content = '';
	$pattern = array(
		'processing' => '/<select name=\"PROP[PROCESSING]\">.*?<option.*?selected.*?>(.*?)<\//s'
	);
	if($_POST['each_id'] == 0) $i = 20;
	elseif($_POST['each_id'] == 21) $i = 70;
	else $i = $_POST['each_id'];
	while ($i <= $_POST['count']) {
		$content = $content = file_get_contents('http://razrez.v1rt.ru/?login=yes&backurl=/&AUTH_FORM=Y&TYPE=AUTH&USER_LOGIN=manager&USER_PASSWORD=a12354&ID='.$i);
		$array_result[$i]['processing'] = $processing[0];
		if($data_drilling[0] !== ''){
			$i++;
			$_SESSION['array_result'] = $array_result;
			break;
		}
		$array_result = '';
		$i++;
	}
	$len_array = count($_SESSION['array_result']);
	$procent_1 = ceil($_POST['count'] * 0.01);
	if($len_array > $procent_1) $procent = ceil($len_array/$procent_1);
	else $procent = 1;
	if($procent === 100){
		session_destroy();
		print_r($_SESSION['array_result']);
	}
	else{
		echo $procent.'|'.$i;
		print_r($_SESSION['array_result']);
	}
}



Эта часть скрипта загружается во вторую очередь, т.е. через ajax.

Я так понимаю, когда я задаю session_start() создается PHPSESSID, который является идентификатором сессии, и по логике получается что в файле этой PHPSESSID должны храниться данные о переменной $_SESSION, которые теряются как только вторая конструкция возвращает результат.

Странно, но на мой взгляд такого происходить не должно...
...
Рейтинг: 0 / 0
22.03.2014, 16:43
    #38593614
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с хранением массива в SESSION
Sublime, наверно, Вам следует начать с изучения основ программирования. Вот, смотрите на Ваш код:

1. Блок if($_POST['ret'] == 'count') содержит старт сессии.
2. В блоке if($_POST['ret'] == 'creat_table') старт сессии отсутствует.
3. Блок if($_POST['ret'] == 'count') со стартом сессии не может быть выполнен в том же вызове, что и блок if($_POST['ret'] == 'creat_table') по той простой причине, что переменная $_POST['ret'] не может иметь два различных значения одновременно.

Самое простое и правильное решение - вынести старт сессии в самое начало скрипта.
...
Рейтинг: 0 / 0
22.03.2014, 17:24
    #38593636
Sublime
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с хранением массива в SESSION
vkle, это я понимаю. Логика следующая:
Загружается страница <body onload=""> загружает скрипт, который загружает данный файл с параметром $_POST['ret'] = 'count', как только файл вернул ответ жмем на кнопку и загружается файл уже во второй раз с параметром $_POST['ret'] = 'creat_table', когда по условиям возвращается ответ, то в $_SESSION['array_result'] записывается массив и ответ идет обратно по ajax, где рекурсивно загружается функция с ajax запросом, где передается $_POST['ret'] = 'creat_table' + еще несколько параметров для определения места остановки парсинга сайта.

Вы мне лучше напишите причину почему $_SESSION сбрасывается если в первой конструкции сессия уже была запущена, а во второй $_SESSION['array_result'] всего лишь должна пополняться новыми многомерными массивами.
...
Рейтинг: 0 / 0
22.03.2014, 17:40
    #38593642
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с хранением массива в SESSION
Sublimevkle, это я понимаю. Логика следующая:
Загружается страница <body onload=""> загружает скрипт, который загружает данный файл с параметром $_POST['ret'] = 'count', как только файл вернул ответ жмем на кнопку и загружается файл уже во второй раз с параметром $_POST['ret'] = 'creat_table', когда по условиям возвращается ответ, то в $_SESSION['array_result'] записывается массив и ответ идет обратно по ajax, где рекурсивно загружается функция с ajax запросом, где передается $_POST['ret'] = 'creat_table' + еще несколько параметров для определения места остановки парсинга сайта.

Вы мне лучше напишите причину почему $_SESSION сбрасывается если в первой конструкции сессия уже была запущена, а во второй $_SESSION['array_result'] всего лишь должна пополняться новыми многомерными массивами.

Не люблю такое писать ))) Но Вам в основы...

SublimeФактически я использую session_start() один раз при загрузке скрипта

Фактически Вы запускаете скрипт 3 раза (или сколько там), а session_start только 1 раз выполняете... так что "один раз при загрузке скрипта" - Вы так не делаете...

Отсюда суть ошибки :)

session_start - это запрос на старт/доступ к сессии. :) Потому его надо выполнять при каждом обращении к серверу. Иначе при очередном запросе к серверу он понятия иметь не будет, что Вы хотите обратиться к сессии.
...
Рейтинг: 0 / 0
22.03.2014, 18:19
    #38593655
Sublime
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с хранением массива в SESSION
Програмёр, да, сессия показывает это, сейчас поставил session start() в начало скрипта, как и ожидал изменений не произошло.

Тут дело скорей не в том как сессия запускается и работает http://www.php.su/functions/?cat=session уважаемый, а в том что теряется значение или точней она сама.
...
Рейтинг: 0 / 0
22.03.2014, 18:47
    #38593674
Sublime
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с хранением массива в SESSION
Прошу прощения, вы правы, session_start() нужно запускать каждый раз
...
Рейтинг: 0 / 0
22.03.2014, 19:05
    #38593681
Sublime
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с хранением массива в SESSION
И еще одну ошибку нашел, вместо
$_SESSION['array_result'] = $array_result;
нужно было
$_SESSION['array_result'][$i] = $array_result;
...
Рейтинг: 0 / 0
22.03.2014, 19:30
    #38593690
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с хранением массива в SESSION
автор
Код: php
1.
$content = $content = file_get_contents('http://raz.....

Это, типа, чтобы крепче запомнить и больше не использовать? ;-)
...
Рейтинг: 0 / 0
22.03.2014, 19:34
    #38593694
Sublime
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с хранением массива в SESSION
vkle, вроде того) магия программирования)
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Проблемы с хранением массива в SESSION / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]