Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / информировать пользователя о начале экспорта данных в PHP / 25 сообщений из 40, страница 1 из 2
16.04.2012, 15:45:56
    #37755660
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
Здравствуйте.
Нужн предоставить приложению экспортировать данные бд в файл, количество данных из бд может быть довольно значительным, например, десятки и сотни мегабайт. Пока данные все данные не получены из бд, страница висит, что может смущать пользователя и браузер не выдает окно сохранения файла. Я видел системы, которые очень быстро начинали выдавать данные клиенту. Можно ли как-нибудь улучшить код для индикации начала экспорта.
Код примерно такой:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
       $this->getResponse()->setHeader('Content-Type', 'text/csv; charset=utf-8')
                            ->setHeader('Content-Disposition', 'attachment; filename="'. $fileName . '"');      

        $contacts = new Contact();
       $fp = fopen('php://output', 'w');        
       foreach ($mongodbCursor as $subscriber) {
           $row = formRow($subscriber);
       fputcsv($fp, $row);
       }      




Спасибо за информацию.
...
Рейтинг: 0 / 0
16.04.2012, 15:48:45
    #37755664
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
OLEG_2005,

я так понимаю вы говарите о функции flush() ?
имхо данные таких размеров надо зиповать перед выдачей юзеру.
и у меня такое ощющение что еще тормазит ваша ООП оболочка под базу.
...
Рейтинг: 0 / 0
16.04.2012, 15:53:01
    #37755675
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
Нет, я не говорил о функции flush.
...
Рейтинг: 0 / 0
16.04.2012, 15:54:47
    #37755682
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
РенатOLEG_2005,

я так понимаю вы говарите о функции flush() ?
имхо данные таких размеров надо зиповать перед выдачей юзеру.
и у меня такое ощющение что еще тормазит ваша ООП оболочка под базу.

Могли бы вы скачать, что вы имели в виду о функции flush?
...
Рейтинг: 0 / 0
16.04.2012, 16:08:50
    #37755710
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
OLEG_2005,

у вас идет генерация файла больших размеров. Вы хотите чтобы файл отправлялся сразу не ожидая окончания генерации. Правильно я вас понял? Ну используйте эту функцию для того что отправить все что в кеше - браузеру пользователя.
Если не парвильно то скажите что хотите
...
Рейтинг: 0 / 0
16.04.2012, 16:13:24
    #37755723
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
Да, я хочц чтобы файл отправлялся сразу не ожидая окончания генерации.
...
Рейтинг: 0 / 0
16.04.2012, 16:14:08
    #37755728
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
Да, я хочу, чтобы файл отправлялся сразу, не ожидая окончания генерации.
...
Рейтинг: 0 / 0
16.04.2012, 17:22:44
    #37755861
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
Просто интересно, что получит в итоге клиент, если он будет принимать файл быстрее, чем этот файл формируется скриптом? Размер файла заранее неизвестен, если правильно понимаю.
...
Рейтинг: 0 / 0
16.04.2012, 17:27:44
    #37755879
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
Да, размер файла сейчас не передается клиенту.
...
Рейтинг: 0 / 0
17.04.2012, 10:22:24
    #37756641
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
Данные код не работает. Данные всё равно отправляеются только после получения всех данных.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    ini_set('output_buffering', 0);
    ini_set('zlib.output_compression', 0);
    $this->getResponse()->setHeader('Content-Type', 'text/csv; charset=utf-8')
                            ->setHeader('Content-Disposition', 'attachment; filename="'. $fileName . '"');      

	ob_flush();
	flush();

        $contacts = new Contact();
       $fp = fopen('php://output', 'w');        
       foreach ($mongodbCursor as $subscriber) {
           $row = formRow($subscriber);
       fputcsv($fp, $row);
       }      
...
Рейтинг: 0 / 0
17.04.2012, 11:08:46
    #37756742
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
OLEG_2005,

я всегда удмал это надо в цикле делать...
...
Рейтинг: 0 / 0
17.04.2012, 11:18:01
    #37756760
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
Вот довольно простой пример. Данные выводятся, только когда цикл закончил работу.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
		ini_set('output_buffering', 0);
		ini_set('zlib.output_compression', 0);	
		

		ob_start();

		$buffer = str_repeat(" ", 4096);
		$buffer .= "\r\n<span></span>\r\n";

		for ($i=0; $i<5; $i++) {
  			echo $buffer.$i;
  			ob_flush();
  			flush();
  			sleep(1);
		}
		ob_end_flush();		
...
Рейтинг: 0 / 0
17.04.2012, 11:23:11
    #37756769
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
Я думаю, в данном случае buffer даже лишнее, но тоже не работает:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
		ini_set('output_buffering', 0);
		ini_set('zlib.output_compression', 0);	
		

		ob_start();

		for ($i=0; $i<5; $i++) {
  			echo $i;
  			ob_flush();
  			flush();
  			sleep(1);
		}
		ob_end_flush();		
...
Рейтинг: 0 / 0
17.04.2012, 11:40:52
    #37756822
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
Используется php 5.3 и apache.
...
Рейтинг: 0 / 0
17.04.2012, 11:44:59
    #37756836
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
OLEG_2005Данные всё равно отправляеются только после получения всех данных.В некоторых случаях такое поведение имеет место быть. Конфигурацию вебсервера опишите подробно.
...
Рейтинг: 0 / 0
17.04.2012, 11:48:34
    #37756848
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
Код: 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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
allow_call_time_pass_reference	Off	Off
allow_url_fopen	On	On
allow_url_include	Off	Off
always_populate_raw_post_data	Off	Off
arg_separator.input	&	&
arg_separator.output	&	&
asp_tags	Off	Off
auto_append_file	no value	no value
auto_globals_jit	On	On
auto_prepend_file	no value	no value
browscap	no value	no value
default_charset	UTF-8	no value
default_mimetype	text/html	text/html
define_syslog_variables	Off	Off
disable_classes	no value	no value
disable_functions	no value	no value
display_errors	Off	Off
display_startup_errors	Off	Off
doc_root	no value	no value
docref_ext	no value	no value
docref_root	no value	no value
enable_dl	Off	Off
error_append_string	no value	no value
error_log	no value	no value
error_prepend_string	no value	no value
error_reporting	22527	22527
exit_on_timeout	Off	Off
expose_php	On	On
extension_dir	/usr/lib/php5/20090626	/usr/lib/php5/20090626
file_uploads	On	On
highlight.bg	#FFFFFF	#FFFFFF
highlight.comment	#FF8000	#FF8000
highlight.default	#0000BB	#0000BB
highlight.html	#000000	#000000
highlight.keyword	#007700	#007700
highlight.string	#DD0000	#DD0000
html_errors	Off	Off
ignore_repeated_errors	Off	Off
ignore_repeated_source	Off	Off
ignore_user_abort	Off	Off
implicit_flush	Off	Off
include_path	.:/usr/share/php:/usr/share/pear	.:/usr/share/php:/usr/share/pear
log_errors	On	On
log_errors_max_len	1024	1024
magic_quotes_gpc	Off	Off
magic_quotes_runtime	Off	Off
magic_quotes_sybase	Off	Off
mail.add_x_header	On	On
mail.force_extra_parameters	no value	no value
mail.log	no value	no value
max_execution_time	30	30
max_file_uploads	20	20
max_input_nesting_level	64	64
max_input_time	60	60
max_input_vars	1000	1000
memory_limit	256M	256M
open_basedir	no value	no value
output_buffering	4096	4096
output_handler	no value	no value
post_max_size	64M	64M
precision	14	14
realpath_cache_size	16K	16K
realpath_cache_ttl	120	120
register_argc_argv	Off	Off
register_globals	Off	Off
register_long_arrays	Off	Off
report_memleaks	On	On
report_zend_debug	On	On
request_order	GP	GP
safe_mode	Off	Off
safe_mode_exec_dir	no value	no value
safe_mode_gid	Off	Off
safe_mode_include_dir	no value	no value
sendmail_from	no value	no value
sendmail_path	/usr/sbin/sendmail -t -i 	/usr/sbin/sendmail -t -i 
serialize_precision	100	100
short_open_tag	On	On
SMTP	localhost	localhost
smtp_port	25	25
sql.safe_mode	Off	Off
track_errors	Off	Off
unserialize_callback_func	no value	no value
upload_max_filesize	16M	16M
upload_tmp_dir	no value	no value
user_dir	no value	no value
user_ini.cache_ttl	300	300
user_ini.filename	.user.ini	.user.ini
variables_order	GPCS	GPCS
xmlrpc_error_number	0	0
xmlrpc_errors	Off	Off
y2k_compliance	On	On
zend.enable_gc	On
...
Рейтинг: 0 / 0
17.04.2012, 11:54:51
    #37756862
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
В коде я задаю параметры:
Код: php
1.
2.
ini_set('output_buffering', 0);
ini_set('zlib.output_compression', 0);	



Не совсем понятно, в чем могут быть проблемы.
...
Рейтинг: 0 / 0
17.04.2012, 13:00:50
    #37757004
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
PHP как установлен - модуль, cgi, fastcgi, другой способ? С модулем должно работать. Апач сам отдает контент или за фронтендом прячется?
...
Рейтинг: 0 / 0
17.04.2012, 13:34:56
    #37757078
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
PHP установлен на модуль. Используется только Apache.
...
Рейтинг: 0 / 0
17.04.2012, 14:29:20
    #37757170
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
OLEG_2005В коде я задаю параметры:
Код: php
1.
2.
ini_set('output_buffering', 0);
ini_set('zlib.output_compression', 0);	



Не совсем понятно, в чем могут быть проблемы.
вы точно понимаете что делаете?
выставляете output_buffering в ноль а ниже пытаетесь управлять буферизацией)
почитайте мануал.
...
Рейтинг: 0 / 0
17.04.2012, 14:35:50
    #37757182
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
А что здесь не так?
...
Рейтинг: 0 / 0
17.04.2012, 14:39:06
    #37757191
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
Здесь я отключаю буферизцию и сжатие, полагаю, что вторая инструкция лишняя, так как это значение по умлочанию.
...
Рейтинг: 0 / 0
17.04.2012, 15:38:38
    #37757347
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
OLEG_2005А что здесь не так?
почитайте - будет полезно
http://www.php.su/functions/?cat=outcontrol
...
Рейтинг: 0 / 0
17.04.2012, 15:58:41
    #37757407
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
РенатOLEG_2005А что здесь не так?
почитайте - будет полезно
http://www.php.su/functions/?cat=outcontrol

Похоже данные у меня установлены также:
utput_buffering "0"
output_handler no value
implicit_flush "0"

Пока непонятно, в чем проблема.
...
Рейтинг: 0 / 0
17.04.2012, 17:36:03
    #37757674
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
информировать пользователя о начале экспорта данных в PHP
OLEG_2005, вы тут привели не весь код, и скорее всего долгое выполнение у вас до этого цикла.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / информировать пользователя о начале экспорта данных в PHP / 25 сообщений из 40, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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