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

Делаю парсер с отображением процента выполнения. Суть в том что при загрузке парсера запускается сессия 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
Проблемы с хранением массива в SESSION
    #38593597
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
session_start() должно быть отработано в любом случае до использования массива $_SESSION.
...
Рейтинг: 0 / 0
Проблемы с хранением массива в SESSION
    #38593610
Sublime
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фактически я использую 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
Проблемы с хранением массива в SESSION
    #38593614
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблемы с хранением массива в SESSION
    #38593636
Sublime
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Проблемы с хранением массива в SESSION
    #38593642
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблемы с хранением массива в SESSION
    #38593655
Sublime
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Програмёр, да, сессия показывает это, сейчас поставил session start() в начало скрипта, как и ожидал изменений не произошло.

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

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


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