1 |
1 |
<?php
|
2 |
2 |
// --------------------------------------------------------------------------------
|
3 |
|
// PhpConcept Library - Zip Module 2.6
|
|
3 |
// PhpConcept Library - Zip Module 2.8.2
|
4 |
4 |
// --------------------------------------------------------------------------------
|
5 |
|
// License GNU/LGPL - Vincent Blavet - March 2006
|
|
5 |
// License GNU/LGPL - Vincent Blavet - August 2009
|
6 |
6 |
// http://www.phpconcept.net
|
7 |
7 |
// --------------------------------------------------------------------------------
|
8 |
8 |
//
|
... | ... | |
22 |
22 |
// The use of this software is at the risk of the user.
|
23 |
23 |
//
|
24 |
24 |
// --------------------------------------------------------------------------------
|
25 |
|
// $Id: pclzip.lib.php,v 1.47 2007/07/20 13:56:07 vblavet Exp $
|
|
25 |
// $Id: pclzip.lib.php,v 1.60 2009/09/30 21:01:04 vblavet Exp $
|
26 |
26 |
// --------------------------------------------------------------------------------
|
27 |
27 |
|
28 |
28 |
// ----- Constants
|
... | ... | |
66 |
66 |
define( 'PCLZIP_TEMPORARY_DIR', '' );
|
67 |
67 |
}
|
68 |
68 |
|
|
69 |
// ----- Optional threshold ratio for use of temporary files
|
|
70 |
// Pclzip sense the size of the file to add/extract and decide to
|
|
71 |
// use or not temporary file. The algorythm is looking for
|
|
72 |
// memory_limit of PHP and apply a ratio.
|
|
73 |
// threshold = memory_limit * ratio.
|
|
74 |
// Recommended values are under 0.5. Default 0.47.
|
|
75 |
// Samples :
|
|
76 |
// define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.5 );
|
|
77 |
if (!defined('PCLZIP_TEMPORARY_FILE_RATIO')) {
|
|
78 |
define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.47 );
|
|
79 |
}
|
|
80 |
|
69 |
81 |
// --------------------------------------------------------------------------------
|
70 |
82 |
// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED *****
|
71 |
83 |
// --------------------------------------------------------------------------------
|
72 |
84 |
|
73 |
85 |
// ----- Global variables
|
74 |
|
$g_pclzip_version = "2.6";
|
|
86 |
$g_pclzip_version = "2.8.2";
|
75 |
87 |
|
76 |
88 |
// ----- Error codes
|
77 |
89 |
// -1 : Unable to open file in binary write mode
|
... | ... | |
134 |
146 |
// which is not correctly supported by PHP ...
|
135 |
147 |
//define( 'PCLZIP_OPT_CRYPT', 77018 );
|
136 |
148 |
define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 );
|
|
149 |
define( 'PCLZIP_OPT_TEMP_FILE_THRESHOLD', 77020 );
|
|
150 |
define( 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD', 77020 ); // alias
|
|
151 |
define( 'PCLZIP_OPT_TEMP_FILE_ON', 77021 );
|
|
152 |
define( 'PCLZIP_OPT_ADD_TEMP_FILE_ON', 77021 ); // alias
|
|
153 |
define( 'PCLZIP_OPT_TEMP_FILE_OFF', 77022 );
|
|
154 |
define( 'PCLZIP_OPT_ADD_TEMP_FILE_OFF', 77022 ); // alias
|
137 |
155 |
|
138 |
156 |
// ----- File description attributes
|
139 |
157 |
define( 'PCLZIP_ATT_FILE_NAME', 79001 );
|
... | ... | |
196 |
214 |
// --------------------------------------------------------------------------------
|
197 |
215 |
function PclZip($p_zipname)
|
198 |
216 |
{
|
199 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::PclZip', "zipname=$p_zipname");
|
200 |
217 |
|
201 |
218 |
// ----- Tests the zlib
|
202 |
219 |
if (!function_exists('gzopen'))
|
203 |
220 |
{
|
204 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 1, "zlib extension seems to be missing");
|
205 |
221 |
die('Abort '.basename(__FILE__).' : Missing zlib extensions');
|
206 |
222 |
}
|
207 |
223 |
|
... | ... | |
211 |
227 |
$this->magic_quotes_status = -1;
|
212 |
228 |
|
213 |
229 |
// ----- Return
|
214 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 1);
|
215 |
230 |
return;
|
216 |
231 |
}
|
217 |
232 |
// --------------------------------------------------------------------------------
|
... | ... | |
255 |
270 |
// --------------------------------------------------------------------------------
|
256 |
271 |
function create($p_filelist)
|
257 |
272 |
{
|
258 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::create', "filelist='$p_filelist', ...");
|
259 |
273 |
$v_result=1;
|
260 |
274 |
|
261 |
275 |
// ----- Reset the error handler
|
... | ... | |
267 |
281 |
|
268 |
282 |
// ----- Look for variable options arguments
|
269 |
283 |
$v_size = func_num_args();
|
270 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
|
271 |
284 |
|
272 |
285 |
// ----- Look for arguments
|
273 |
286 |
if ($v_size > 1) {
|
... | ... | |
280 |
293 |
|
281 |
294 |
// ----- Look for first arg
|
282 |
295 |
if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
|
283 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options detected");
|
284 |
296 |
|
285 |
297 |
// ----- Parse the options
|
286 |
298 |
$v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
|
... | ... | |
290 |
302 |
PCLZIP_CB_PRE_ADD => 'optional',
|
291 |
303 |
PCLZIP_CB_POST_ADD => 'optional',
|
292 |
304 |
PCLZIP_OPT_NO_COMPRESSION => 'optional',
|
293 |
|
PCLZIP_OPT_COMMENT => 'optional'
|
|
305 |
PCLZIP_OPT_COMMENT => 'optional',
|
|
306 |
PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
|
|
307 |
PCLZIP_OPT_TEMP_FILE_ON => 'optional',
|
|
308 |
PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
|
294 |
309 |
//, PCLZIP_OPT_CRYPT => 'optional'
|
295 |
310 |
));
|
296 |
311 |
if ($v_result != 1) {
|
297 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
298 |
312 |
return 0;
|
299 |
313 |
}
|
300 |
314 |
}
|
... | ... | |
303 |
317 |
// Here we need to support the first historic synopsis of the
|
304 |
318 |
// method.
|
305 |
319 |
else {
|
306 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
|
307 |
320 |
|
308 |
321 |
// ----- Get the first argument
|
309 |
322 |
$v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0];
|
... | ... | |
315 |
328 |
else if ($v_size > 2) {
|
316 |
329 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
|
317 |
330 |
"Invalid number / type of arguments");
|
318 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
319 |
331 |
return 0;
|
320 |
332 |
}
|
321 |
333 |
}
|
322 |
334 |
}
|
|
335 |
|
|
336 |
// ----- Look for default option values
|
|
337 |
$this->privOptionDefaultThreshold($v_options);
|
323 |
338 |
|
324 |
339 |
// ----- Init
|
325 |
340 |
$v_string_list = array();
|
... | ... | |
351 |
366 |
// ----- Invalid variable type for $p_filelist
|
352 |
367 |
else {
|
353 |
368 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist");
|
354 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
355 |
369 |
return 0;
|
356 |
370 |
}
|
357 |
371 |
|
... | ... | |
362 |
376 |
$v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
|
363 |
377 |
}
|
364 |
378 |
else {
|
365 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Ignore an empty filename");
|
366 |
379 |
}
|
367 |
380 |
}
|
368 |
381 |
}
|
... | ... | |
382 |
395 |
$v_options,
|
383 |
396 |
$v_supported_attributes);
|
384 |
397 |
if ($v_result != 1) {
|
385 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
386 |
398 |
return 0;
|
387 |
399 |
}
|
388 |
400 |
}
|
... | ... | |
390 |
402 |
// ----- Expand the filelist (expand directories)
|
391 |
403 |
$v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
|
392 |
404 |
if ($v_result != 1) {
|
393 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
394 |
405 |
return 0;
|
395 |
406 |
}
|
396 |
407 |
|
397 |
408 |
// ----- Call the create fct
|
398 |
409 |
$v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options);
|
399 |
410 |
if ($v_result != 1) {
|
400 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
401 |
411 |
return 0;
|
402 |
412 |
}
|
403 |
413 |
|
404 |
414 |
// ----- Return
|
405 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list);
|
406 |
415 |
return $p_result_list;
|
407 |
416 |
}
|
408 |
417 |
// --------------------------------------------------------------------------------
|
... | ... | |
444 |
453 |
// --------------------------------------------------------------------------------
|
445 |
454 |
function add($p_filelist)
|
446 |
455 |
{
|
447 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::add', "filelist='$p_filelist', ...");
|
448 |
456 |
$v_result=1;
|
449 |
457 |
|
450 |
458 |
// ----- Reset the error handler
|
... | ... | |
456 |
464 |
|
457 |
465 |
// ----- Look for variable options arguments
|
458 |
466 |
$v_size = func_num_args();
|
459 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
|
460 |
467 |
|
461 |
468 |
// ----- Look for arguments
|
462 |
469 |
if ($v_size > 1) {
|
... | ... | |
469 |
476 |
|
470 |
477 |
// ----- Look for first arg
|
471 |
478 |
if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
|
472 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options detected");
|
473 |
479 |
|
474 |
480 |
// ----- Parse the options
|
475 |
481 |
$v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
|
... | ... | |
481 |
487 |
PCLZIP_OPT_NO_COMPRESSION => 'optional',
|
482 |
488 |
PCLZIP_OPT_COMMENT => 'optional',
|
483 |
489 |
PCLZIP_OPT_ADD_COMMENT => 'optional',
|
484 |
|
PCLZIP_OPT_PREPEND_COMMENT => 'optional'
|
|
490 |
PCLZIP_OPT_PREPEND_COMMENT => 'optional',
|
|
491 |
PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
|
|
492 |
PCLZIP_OPT_TEMP_FILE_ON => 'optional',
|
|
493 |
PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
|
485 |
494 |
//, PCLZIP_OPT_CRYPT => 'optional'
|
486 |
495 |
));
|
487 |
496 |
if ($v_result != 1) {
|
488 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
489 |
497 |
return 0;
|
490 |
498 |
}
|
491 |
499 |
}
|
... | ... | |
494 |
502 |
// Here we need to support the first historic synopsis of the
|
495 |
503 |
// method.
|
496 |
504 |
else {
|
497 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
|
498 |
505 |
|
499 |
506 |
// ----- Get the first argument
|
500 |
507 |
$v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];
|
... | ... | |
508 |
515 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
|
509 |
516 |
|
510 |
517 |
// ----- Return
|
511 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
512 |
518 |
return 0;
|
513 |
519 |
}
|
514 |
520 |
}
|
515 |
521 |
}
|
516 |
522 |
|
|
523 |
// ----- Look for default option values
|
|
524 |
$this->privOptionDefaultThreshold($v_options);
|
|
525 |
|
517 |
526 |
// ----- Init
|
518 |
527 |
$v_string_list = array();
|
519 |
528 |
$v_att_list = array();
|
... | ... | |
544 |
553 |
// ----- Invalid variable type for $p_filelist
|
545 |
554 |
else {
|
546 |
555 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist");
|
547 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
548 |
556 |
return 0;
|
549 |
557 |
}
|
550 |
558 |
|
... | ... | |
570 |
578 |
$v_options,
|
571 |
579 |
$v_supported_attributes);
|
572 |
580 |
if ($v_result != 1) {
|
573 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
574 |
581 |
return 0;
|
575 |
582 |
}
|
576 |
583 |
}
|
... | ... | |
578 |
585 |
// ----- Expand the filelist (expand directories)
|
579 |
586 |
$v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
|
580 |
587 |
if ($v_result != 1) {
|
581 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
582 |
588 |
return 0;
|
583 |
589 |
}
|
584 |
590 |
|
585 |
591 |
// ----- Call the create fct
|
586 |
592 |
$v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options);
|
587 |
593 |
if ($v_result != 1) {
|
588 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
589 |
594 |
return 0;
|
590 |
595 |
}
|
591 |
596 |
|
592 |
597 |
// ----- Return
|
593 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list);
|
594 |
598 |
return $p_result_list;
|
595 |
599 |
}
|
596 |
600 |
// --------------------------------------------------------------------------------
|
... | ... | |
623 |
627 |
// write protected
|
624 |
628 |
// newer_exist : the file was not extracted because a newer file exists
|
625 |
629 |
// path_creation_fail : the file is not extracted because the folder
|
626 |
|
// does not exists and can not be created
|
|
630 |
// does not exist and can not be created
|
627 |
631 |
// write_error : the file was not extracted because there was a
|
628 |
632 |
// error while writing the file
|
629 |
633 |
// read_error : the file was not extracted because there was a error
|
... | ... | |
638 |
642 |
// --------------------------------------------------------------------------------
|
639 |
643 |
function listContent()
|
640 |
644 |
{
|
641 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::listContent', "");
|
642 |
645 |
$v_result=1;
|
643 |
646 |
|
644 |
647 |
// ----- Reset the error handler
|
... | ... | |
646 |
649 |
|
647 |
650 |
// ----- Check archive
|
648 |
651 |
if (!$this->privCheckFormat()) {
|
649 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
650 |
652 |
return(0);
|
651 |
653 |
}
|
652 |
654 |
|
... | ... | |
655 |
657 |
if (($v_result = $this->privList($p_list)) != 1)
|
656 |
658 |
{
|
657 |
659 |
unset($p_list);
|
658 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
|
659 |
660 |
return(0);
|
660 |
661 |
}
|
661 |
662 |
|
662 |
663 |
// ----- Return
|
663 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
|
664 |
664 |
return $p_list;
|
665 |
665 |
}
|
666 |
666 |
// --------------------------------------------------------------------------------
|
... | ... | |
699 |
699 |
// --------------------------------------------------------------------------------
|
700 |
700 |
function extract()
|
701 |
701 |
{
|
702 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::extract", "");
|
703 |
702 |
$v_result=1;
|
704 |
703 |
|
705 |
704 |
// ----- Reset the error handler
|
... | ... | |
707 |
706 |
|
708 |
707 |
// ----- Check archive
|
709 |
708 |
if (!$this->privCheckFormat()) {
|
710 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
711 |
709 |
return(0);
|
712 |
710 |
}
|
713 |
711 |
|
... | ... | |
720 |
718 |
|
721 |
719 |
// ----- Look for variable options arguments
|
722 |
720 |
$v_size = func_num_args();
|
723 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
|
724 |
721 |
|
725 |
722 |
// ----- Default values for option
|
726 |
723 |
$v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
|
... | ... | |
732 |
729 |
|
733 |
730 |
// ----- Look for first arg
|
734 |
731 |
if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
|
735 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options");
|
736 |
732 |
|
737 |
733 |
// ----- Parse the options
|
738 |
734 |
$v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
|
... | ... | |
751 |
747 |
PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional',
|
752 |
748 |
PCLZIP_OPT_REPLACE_NEWER => 'optional'
|
753 |
749 |
,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
|
754 |
|
,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional'
|
|
750 |
,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional',
|
|
751 |
PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
|
|
752 |
PCLZIP_OPT_TEMP_FILE_ON => 'optional',
|
|
753 |
PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
|
755 |
754 |
));
|
756 |
755 |
if ($v_result != 1) {
|
757 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
758 |
756 |
return 0;
|
759 |
757 |
}
|
760 |
758 |
|
... | ... | |
781 |
779 |
// Here we need to support the first historic synopsis of the
|
782 |
780 |
// method.
|
783 |
781 |
else {
|
784 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
|
785 |
782 |
|
786 |
783 |
// ----- Get the first argument
|
787 |
784 |
$v_path = $v_arg_list[0];
|
... | ... | |
795 |
792 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
|
796 |
793 |
|
797 |
794 |
// ----- Return
|
798 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
|
799 |
795 |
return 0;
|
800 |
796 |
}
|
801 |
797 |
}
|
802 |
798 |
}
|
803 |
799 |
|
|
800 |
// ----- Look for default option values
|
|
801 |
$this->privOptionDefaultThreshold($v_options);
|
|
802 |
|
804 |
803 |
// ----- Trace
|
805 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "path='$v_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_path?'true':'false')."'");
|
806 |
804 |
|
807 |
805 |
// ----- Call the extracting fct
|
808 |
806 |
$p_list = array();
|
... | ... | |
810 |
808 |
$v_remove_all_path, $v_options);
|
811 |
809 |
if ($v_result < 1) {
|
812 |
810 |
unset($p_list);
|
813 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
|
814 |
811 |
return(0);
|
815 |
812 |
}
|
816 |
813 |
|
817 |
814 |
// ----- Return
|
818 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
|
819 |
815 |
return $p_list;
|
820 |
816 |
}
|
821 |
817 |
// --------------------------------------------------------------------------------
|
... | ... | |
860 |
856 |
//function extractByIndex($p_index, options...)
|
861 |
857 |
function extractByIndex($p_index)
|
862 |
858 |
{
|
863 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::extractByIndex", "index='$p_index', ...");
|
864 |
859 |
$v_result=1;
|
865 |
860 |
|
866 |
861 |
// ----- Reset the error handler
|
... | ... | |
868 |
863 |
|
869 |
864 |
// ----- Check archive
|
870 |
865 |
if (!$this->privCheckFormat()) {
|
871 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
872 |
866 |
return(0);
|
873 |
867 |
}
|
874 |
868 |
|
... | ... | |
881 |
875 |
|
882 |
876 |
// ----- Look for variable options arguments
|
883 |
877 |
$v_size = func_num_args();
|
884 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
|
885 |
878 |
|
886 |
879 |
// ----- Default values for option
|
887 |
880 |
$v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
|
... | ... | |
897 |
890 |
|
898 |
891 |
// ----- Look for first arg
|
899 |
892 |
if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
|
900 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options");
|
901 |
893 |
|
902 |
894 |
// ----- Parse the options
|
903 |
895 |
$v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
|
... | ... | |
911 |
903 |
PCLZIP_OPT_SET_CHMOD => 'optional',
|
912 |
904 |
PCLZIP_OPT_REPLACE_NEWER => 'optional'
|
913 |
905 |
,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
|
914 |
|
,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional'
|
|
906 |
,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional',
|
|
907 |
PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
|
|
908 |
PCLZIP_OPT_TEMP_FILE_ON => 'optional',
|
|
909 |
PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
|
915 |
910 |
));
|
916 |
911 |
if ($v_result != 1) {
|
917 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
918 |
912 |
return 0;
|
919 |
913 |
}
|
920 |
914 |
|
... | ... | |
937 |
931 |
}
|
938 |
932 |
if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) {
|
939 |
933 |
$v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
|
940 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Option PCLZIP_OPT_EXTRACT_AS_STRING not set.");
|
941 |
934 |
}
|
942 |
935 |
else {
|
943 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Option PCLZIP_OPT_EXTRACT_AS_STRING set.");
|
944 |
936 |
}
|
945 |
937 |
}
|
946 |
938 |
|
... | ... | |
948 |
940 |
// Here we need to support the first historic synopsis of the
|
949 |
941 |
// method.
|
950 |
942 |
else {
|
951 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
|
952 |
943 |
|
953 |
944 |
// ----- Get the first argument
|
954 |
945 |
$v_path = $v_arg_list[0];
|
... | ... | |
962 |
953 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
|
963 |
954 |
|
964 |
955 |
// ----- Return
|
965 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
966 |
956 |
return 0;
|
967 |
957 |
}
|
968 |
958 |
}
|
969 |
959 |
}
|
970 |
960 |
|
971 |
961 |
// ----- Trace
|
972 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "index='$p_index', path='$v_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_path?'true':'false')."'");
|
973 |
962 |
|
974 |
963 |
// ----- Trick
|
975 |
964 |
// Here I want to reuse extractByRule(), so I need to parse the $p_index
|
... | ... | |
979 |
968 |
$v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick,
|
980 |
969 |
array (PCLZIP_OPT_BY_INDEX => 'optional' ));
|
981 |
970 |
if ($v_result != 1) {
|
982 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
983 |
971 |
return 0;
|
984 |
972 |
}
|
985 |
973 |
$v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX];
|
986 |
974 |
|
|
975 |
// ----- Look for default option values
|
|
976 |
$this->privOptionDefaultThreshold($v_options);
|
|
977 |
|
987 |
978 |
// ----- Call the extracting fct
|
988 |
979 |
if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) {
|
989 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
|
990 |
980 |
return(0);
|
991 |
981 |
}
|
992 |
982 |
|
993 |
983 |
// ----- Return
|
994 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
|
995 |
984 |
return $p_list;
|
996 |
985 |
}
|
997 |
986 |
// --------------------------------------------------------------------------------
|
... | ... | |
1016 |
1005 |
// --------------------------------------------------------------------------------
|
1017 |
1006 |
function delete()
|
1018 |
1007 |
{
|
1019 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::delete", "");
|
1020 |
1008 |
$v_result=1;
|
1021 |
1009 |
|
1022 |
1010 |
// ----- Reset the error handler
|
... | ... | |
1024 |
1012 |
|
1025 |
1013 |
// ----- Check archive
|
1026 |
1014 |
if (!$this->privCheckFormat()) {
|
1027 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
1028 |
1015 |
return(0);
|
1029 |
1016 |
}
|
1030 |
1017 |
|
... | ... | |
1033 |
1020 |
|
1034 |
1021 |
// ----- Look for variable options arguments
|
1035 |
1022 |
$v_size = func_num_args();
|
1036 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
|
1037 |
1023 |
|
1038 |
1024 |
// ----- Look for arguments
|
1039 |
1025 |
if ($v_size > 0) {
|
... | ... | |
1047 |
1033 |
PCLZIP_OPT_BY_PREG => 'optional',
|
1048 |
1034 |
PCLZIP_OPT_BY_INDEX => 'optional' ));
|
1049 |
1035 |
if ($v_result != 1) {
|
1050 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
1051 |
1036 |
return 0;
|
1052 |
1037 |
}
|
1053 |
1038 |
}
|
... | ... | |
1060 |
1045 |
if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) {
|
1061 |
1046 |
$this->privSwapBackMagicQuotes();
|
1062 |
1047 |
unset($v_list);
|
1063 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
|
1064 |
1048 |
return(0);
|
1065 |
1049 |
}
|
1066 |
1050 |
|
... | ... | |
1068 |
1052 |
$this->privSwapBackMagicQuotes();
|
1069 |
1053 |
|
1070 |
1054 |
// ----- Return
|
1071 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_list);
|
1072 |
1055 |
return $v_list;
|
1073 |
1056 |
}
|
1074 |
1057 |
// --------------------------------------------------------------------------------
|
... | ... | |
1081 |
1064 |
// --------------------------------------------------------------------------------
|
1082 |
1065 |
function deleteByIndex($p_index)
|
1083 |
1066 |
{
|
1084 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::deleteByIndex", "index='$p_index'");
|
1085 |
1067 |
|
1086 |
1068 |
$p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index);
|
1087 |
1069 |
|
1088 |
1070 |
// ----- Return
|
1089 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
|
1090 |
1071 |
return $p_list;
|
1091 |
1072 |
}
|
1092 |
1073 |
// --------------------------------------------------------------------------------
|
... | ... | |
1107 |
1088 |
// --------------------------------------------------------------------------------
|
1108 |
1089 |
function properties()
|
1109 |
1090 |
{
|
1110 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::properties", "");
|
1111 |
1091 |
|
1112 |
1092 |
// ----- Reset the error handler
|
1113 |
1093 |
$this->privErrorReset();
|
... | ... | |
1118 |
1098 |
// ----- Check archive
|
1119 |
1099 |
if (!$this->privCheckFormat()) {
|
1120 |
1100 |
$this->privSwapBackMagicQuotes();
|
1121 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
1122 |
1101 |
return(0);
|
1123 |
1102 |
}
|
1124 |
1103 |
|
... | ... | |
1132 |
1111 |
if (@is_file($this->zipname))
|
1133 |
1112 |
{
|
1134 |
1113 |
// ----- Open the zip file
|
1135 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
|
1136 |
1114 |
if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
|
1137 |
1115 |
{
|
1138 |
1116 |
$this->privSwapBackMagicQuotes();
|
... | ... | |
1141 |
1119 |
PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
|
1142 |
1120 |
|
1143 |
1121 |
// ----- Return
|
1144 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), 0);
|
1145 |
1122 |
return 0;
|
1146 |
1123 |
}
|
1147 |
1124 |
|
... | ... | |
1150 |
1127 |
if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
|
1151 |
1128 |
{
|
1152 |
1129 |
$this->privSwapBackMagicQuotes();
|
1153 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
1154 |
1130 |
return 0;
|
1155 |
1131 |
}
|
1156 |
1132 |
|
... | ... | |
1167 |
1143 |
$this->privSwapBackMagicQuotes();
|
1168 |
1144 |
|
1169 |
1145 |
// ----- Return
|
1170 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_prop);
|
1171 |
1146 |
return $v_prop;
|
1172 |
1147 |
}
|
1173 |
1148 |
// --------------------------------------------------------------------------------
|
... | ... | |
1186 |
1161 |
// --------------------------------------------------------------------------------
|
1187 |
1162 |
function duplicate($p_archive)
|
1188 |
1163 |
{
|
1189 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::duplicate", "");
|
1190 |
1164 |
$v_result = 1;
|
1191 |
1165 |
|
1192 |
1166 |
// ----- Reset the error handler
|
... | ... | |
1195 |
1169 |
// ----- Look if the $p_archive is a PclZip object
|
1196 |
1170 |
if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip'))
|
1197 |
1171 |
{
|
1198 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The parameter is valid PclZip object '".$p_archive->zipname."'");
|
1199 |
1172 |
|
1200 |
1173 |
// ----- Duplicate the archive
|
1201 |
1174 |
$v_result = $this->privDuplicate($p_archive->zipname);
|
... | ... | |
1204 |
1177 |
// ----- Look if the $p_archive is a string (so a filename)
|
1205 |
1178 |
else if (is_string($p_archive))
|
1206 |
1179 |
{
|
1207 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The parameter is a filename '$p_archive'");
|
1208 |
1180 |
|
1209 |
1181 |
// ----- Check that $p_archive is a valid zip file
|
1210 |
1182 |
// TBC : Should also check the archive format
|
... | ... | |
1228 |
1200 |
}
|
1229 |
1201 |
|
1230 |
1202 |
// ----- Return
|
1231 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
|
1232 |
1203 |
return $v_result;
|
1233 |
1204 |
}
|
1234 |
1205 |
// --------------------------------------------------------------------------------
|
... | ... | |
1249 |
1220 |
// --------------------------------------------------------------------------------
|
1250 |
1221 |
function merge($p_archive_to_add)
|
1251 |
1222 |
{
|
1252 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::merge", "");
|
1253 |
1223 |
$v_result = 1;
|
1254 |
1224 |
|
1255 |
1225 |
// ----- Reset the error handler
|
... | ... | |
1257 |
1227 |
|
1258 |
1228 |
// ----- Check archive
|
1259 |
1229 |
if (!$this->privCheckFormat()) {
|
1260 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
|
1261 |
1230 |
return(0);
|
1262 |
1231 |
}
|
1263 |
1232 |
|
1264 |
1233 |
// ----- Look if the $p_archive_to_add is a PclZip object
|
1265 |
1234 |
if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip'))
|
1266 |
1235 |
{
|
1267 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The parameter is valid PclZip object");
|
1268 |
1236 |
|
1269 |
1237 |
// ----- Merge the archive
|
1270 |
1238 |
$v_result = $this->privMerge($p_archive_to_add);
|
... | ... | |
1273 |
1241 |
// ----- Look if the $p_archive_to_add is a string (so a filename)
|
1274 |
1242 |
else if (is_string($p_archive_to_add))
|
1275 |
1243 |
{
|
1276 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The parameter is a filename");
|
1277 |
1244 |
|
1278 |
1245 |
// ----- Create a temporary archive
|
1279 |
1246 |
$v_object_archive = new PclZip($p_archive_to_add);
|
... | ... | |
1291 |
1258 |
}
|
1292 |
1259 |
|
1293 |
1260 |
// ----- Return
|
1294 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
|
1295 |
1261 |
return $v_result;
|
1296 |
1262 |
}
|
1297 |
1263 |
// --------------------------------------------------------------------------------
|
... | ... | |
1406 |
1372 |
// --------------------------------------------------------------------------------
|
1407 |
1373 |
function privCheckFormat($p_level=0)
|
1408 |
1374 |
{
|
1409 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCheckFormat", "");
|
1410 |
1375 |
$v_result = true;
|
1411 |
1376 |
|
1412 |
1377 |
// ----- Reset the file system cache
|
... | ... | |
1419 |
1384 |
if (!is_file($this->zipname)) {
|
1420 |
1385 |
// ----- Error log
|
1421 |
1386 |
PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'");
|
1422 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo());
|
1423 |
1387 |
return(false);
|
1424 |
1388 |
}
|
1425 |
1389 |
|
... | ... | |
1427 |
1391 |
if (!is_readable($this->zipname)) {
|
1428 |
1392 |
// ----- Error log
|
1429 |
1393 |
PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'");
|
1430 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo());
|
1431 |
1394 |
return(false);
|
1432 |
1395 |
}
|
1433 |
1396 |
|
... | ... | |
1441 |
1404 |
// TBC
|
1442 |
1405 |
|
1443 |
1406 |
// ----- Return
|
1444 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
|
1445 |
1407 |
return $v_result;
|
1446 |
1408 |
}
|
1447 |
1409 |
// --------------------------------------------------------------------------------
|
... | ... | |
1463 |
1425 |
// --------------------------------------------------------------------------------
|
1464 |
1426 |
function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false)
|
1465 |
1427 |
{
|
1466 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privParseOptions", "");
|
1467 |
1428 |
$v_result=1;
|
1468 |
1429 |
|
1469 |
1430 |
// ----- Read the options
|
1470 |
1431 |
$i=0;
|
1471 |
1432 |
while ($i<$p_size) {
|
1472 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Looking for table index $i, option = '".PclZipUtilOptionText($p_options_list[$i])."(".$p_options_list[$i].")'");
|
1473 |
1433 |
|
1474 |
1434 |
// ----- Check if the option is supported
|
1475 |
1435 |
if (!isset($v_requested_options[$p_options_list[$i]])) {
|
... | ... | |
1477 |
1437 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method");
|
1478 |
1438 |
|
1479 |
1439 |
// ----- Return
|
1480 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1481 |
1440 |
return PclZip::errorCode();
|
1482 |
1441 |
}
|
1483 |
1442 |
|
... | ... | |
1493 |
1452 |
PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1494 |
1453 |
|
1495 |
1454 |
// ----- Return
|
1496 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1497 |
1455 |
return PclZip::errorCode();
|
1498 |
1456 |
}
|
1499 |
1457 |
|
1500 |
1458 |
// ----- Get the value
|
1501 |
1459 |
$v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE);
|
1502 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
|
1503 |
1460 |
$i++;
|
1504 |
1461 |
break;
|
1505 |
1462 |
|
|
1463 |
case PCLZIP_OPT_TEMP_FILE_THRESHOLD :
|
|
1464 |
// ----- Check the number of parameters
|
|
1465 |
if (($i+1) >= $p_size) {
|
|
1466 |
PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
|
1467 |
return PclZip::errorCode();
|
|
1468 |
}
|
|
1469 |
|
|
1470 |
// ----- Check for incompatible options
|
|
1471 |
if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) {
|
|
1472 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'");
|
|
1473 |
return PclZip::errorCode();
|
|
1474 |
}
|
|
1475 |
|
|
1476 |
// ----- Check the value
|
|
1477 |
$v_value = $p_options_list[$i+1];
|
|
1478 |
if ((!is_integer($v_value)) || ($v_value<0)) {
|
|
1479 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
|
1480 |
return PclZip::errorCode();
|
|
1481 |
}
|
|
1482 |
|
|
1483 |
// ----- Get the value (and convert it in bytes)
|
|
1484 |
$v_result_list[$p_options_list[$i]] = $v_value*1048576;
|
|
1485 |
$i++;
|
|
1486 |
break;
|
|
1487 |
|
|
1488 |
case PCLZIP_OPT_TEMP_FILE_ON :
|
|
1489 |
// ----- Check for incompatible options
|
|
1490 |
if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) {
|
|
1491 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'");
|
|
1492 |
return PclZip::errorCode();
|
|
1493 |
}
|
|
1494 |
|
|
1495 |
$v_result_list[$p_options_list[$i]] = true;
|
|
1496 |
break;
|
|
1497 |
|
|
1498 |
case PCLZIP_OPT_TEMP_FILE_OFF :
|
|
1499 |
// ----- Check for incompatible options
|
|
1500 |
if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) {
|
|
1501 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'");
|
|
1502 |
return PclZip::errorCode();
|
|
1503 |
}
|
|
1504 |
// ----- Check for incompatible options
|
|
1505 |
if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) {
|
|
1506 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'");
|
|
1507 |
return PclZip::errorCode();
|
|
1508 |
}
|
|
1509 |
|
|
1510 |
$v_result_list[$p_options_list[$i]] = true;
|
|
1511 |
break;
|
|
1512 |
|
1506 |
1513 |
case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION :
|
1507 |
1514 |
// ----- Check the number of parameters
|
1508 |
1515 |
if (($i+1) >= $p_size) {
|
... | ... | |
1510 |
1517 |
PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1511 |
1518 |
|
1512 |
1519 |
// ----- Return
|
1513 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1514 |
1520 |
return PclZip::errorCode();
|
1515 |
1521 |
}
|
1516 |
1522 |
|
... | ... | |
1518 |
1524 |
if ( is_string($p_options_list[$i+1])
|
1519 |
1525 |
&& ($p_options_list[$i+1] != '')) {
|
1520 |
1526 |
$v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE);
|
1521 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
|
1522 |
1527 |
$i++;
|
1523 |
1528 |
}
|
1524 |
1529 |
else {
|
1525 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." set with an empty value is ignored.");
|
1526 |
1530 |
}
|
1527 |
1531 |
break;
|
1528 |
1532 |
|
... | ... | |
1534 |
1538 |
PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1535 |
1539 |
|
1536 |
1540 |
// ----- Return
|
1537 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1538 |
1541 |
return PclZip::errorCode();
|
1539 |
1542 |
}
|
1540 |
1543 |
|
... | ... | |
1550 |
1553 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1551 |
1554 |
|
1552 |
1555 |
// ----- Return
|
1553 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1554 |
1556 |
return PclZip::errorCode();
|
1555 |
1557 |
}
|
1556 |
|
////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
|
1557 |
1558 |
$i++;
|
1558 |
1559 |
break;
|
1559 |
1560 |
|
1560 |
1561 |
// ----- Look for options that request an EREG or PREG expression
|
1561 |
1562 |
case PCLZIP_OPT_BY_EREG :
|
|
1563 |
// ereg() is deprecated starting with PHP 5.3. Move PCLZIP_OPT_BY_EREG
|
|
1564 |
// to PCLZIP_OPT_BY_PREG
|
|
1565 |
$p_options_list[$i] = PCLZIP_OPT_BY_PREG;
|
1562 |
1566 |
case PCLZIP_OPT_BY_PREG :
|
1563 |
1567 |
//case PCLZIP_OPT_CRYPT :
|
1564 |
1568 |
// ----- Check the number of parameters
|
... | ... | |
1567 |
1571 |
PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1568 |
1572 |
|
1569 |
1573 |
// ----- Return
|
1570 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1571 |
1574 |
return PclZip::errorCode();
|
1572 |
1575 |
}
|
1573 |
1576 |
|
... | ... | |
1580 |
1583 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1581 |
1584 |
|
1582 |
1585 |
// ----- Return
|
1583 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1584 |
1586 |
return PclZip::errorCode();
|
1585 |
1587 |
}
|
1586 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
|
1587 |
1588 |
$i++;
|
1588 |
1589 |
break;
|
1589 |
1590 |
|
... | ... | |
1600 |
1601 |
."'");
|
1601 |
1602 |
|
1602 |
1603 |
// ----- Return
|
1603 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1604 |
1604 |
return PclZip::errorCode();
|
1605 |
1605 |
}
|
1606 |
1606 |
|
... | ... | |
1616 |
1616 |
."'");
|
1617 |
1617 |
|
1618 |
1618 |
// ----- Return
|
1619 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1620 |
1619 |
return PclZip::errorCode();
|
1621 |
1620 |
}
|
1622 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
|
1623 |
1621 |
$i++;
|
1624 |
1622 |
break;
|
1625 |
1623 |
|
... | ... | |
1631 |
1629 |
PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1632 |
1630 |
|
1633 |
1631 |
// ----- Return
|
1634 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1635 |
1632 |
return PclZip::errorCode();
|
1636 |
1633 |
}
|
1637 |
1634 |
|
1638 |
1635 |
// ----- Get the value
|
1639 |
1636 |
$v_work_list = array();
|
1640 |
1637 |
if (is_string($p_options_list[$i+1])) {
|
1641 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is a string '".$p_options_list[$i+1]."'");
|
1642 |
1638 |
|
1643 |
1639 |
// ----- Remove spaces
|
1644 |
1640 |
$p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', '');
|
... | ... | |
1647 |
1643 |
$v_work_list = explode(",", $p_options_list[$i+1]);
|
1648 |
1644 |
}
|
1649 |
1645 |
else if (is_integer($p_options_list[$i+1])) {
|
1650 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an integer '".$p_options_list[$i+1]."'");
|
1651 |
1646 |
$v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1];
|
1652 |
1647 |
}
|
1653 |
1648 |
else if (is_array($p_options_list[$i+1])) {
|
1654 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an array");
|
1655 |
1649 |
$v_work_list = $p_options_list[$i+1];
|
1656 |
1650 |
}
|
1657 |
1651 |
else {
|
... | ... | |
1659 |
1653 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1660 |
1654 |
|
1661 |
1655 |
// ----- Return
|
1662 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1663 |
1656 |
return PclZip::errorCode();
|
1664 |
1657 |
}
|
1665 |
1658 |
|
... | ... | |
1693 |
1686 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1694 |
1687 |
|
1695 |
1688 |
// ----- Return
|
1696 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1697 |
1689 |
return PclZip::errorCode();
|
1698 |
1690 |
}
|
1699 |
1691 |
|
1700 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extracted index item = [".$v_result_list[$p_options_list[$i]][$j]['start'].",".$v_result_list[$p_options_list[$i]][$j]['end']."]");
|
1701 |
1692 |
|
1702 |
1693 |
// ----- Look for list sort
|
1703 |
1694 |
if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) {
|
1704 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The list should be sorted ...");
|
1705 |
1695 |
$v_sort_flag=true;
|
1706 |
1696 |
|
1707 |
1697 |
// ----- TBC : An automatic sort should be writen ...
|
... | ... | |
1709 |
1699 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1710 |
1700 |
|
1711 |
1701 |
// ----- Return
|
1712 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1713 |
1702 |
return PclZip::errorCode();
|
1714 |
1703 |
}
|
1715 |
1704 |
$v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];
|
... | ... | |
1718 |
1707 |
// ----- Sort the items
|
1719 |
1708 |
if ($v_sort_flag) {
|
1720 |
1709 |
// TBC : To Be Completed
|
1721 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "List sorting is not yet write ...");
|
1722 |
1710 |
}
|
1723 |
1711 |
|
1724 |
1712 |
// ----- Next option
|
... | ... | |
1733 |
1721 |
case PCLZIP_OPT_REPLACE_NEWER :
|
1734 |
1722 |
case PCLZIP_OPT_STOP_ON_ERROR :
|
1735 |
1723 |
$v_result_list[$p_options_list[$i]] = true;
|
1736 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
|
1737 |
1724 |
break;
|
1738 |
1725 |
|
1739 |
1726 |
// ----- Look for options that request an octal value
|
... | ... | |
1744 |
1731 |
PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1745 |
1732 |
|
1746 |
1733 |
// ----- Return
|
1747 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1748 |
1734 |
return PclZip::errorCode();
|
1749 |
1735 |
}
|
1750 |
1736 |
|
1751 |
1737 |
// ----- Get the value
|
1752 |
1738 |
$v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
|
1753 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
|
1754 |
1739 |
$i++;
|
1755 |
1740 |
break;
|
1756 |
1741 |
|
... | ... | |
1771 |
1756 |
PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1772 |
1757 |
|
1773 |
1758 |
// ----- Return
|
1774 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1775 |
1759 |
return PclZip::errorCode();
|
1776 |
1760 |
}
|
1777 |
1761 |
|
1778 |
1762 |
// ----- Get the value
|
1779 |
1763 |
$v_function_name = $p_options_list[$i+1];
|
1780 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "call-back ".PclZipUtilOptionText($p_options_list[$i])." = '".$v_function_name."'");
|
1781 |
1764 |
|
1782 |
1765 |
// ----- Check that the value is a valid existing function
|
1783 |
1766 |
if (!function_exists($v_function_name)) {
|
... | ... | |
1785 |
1768 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'");
|
1786 |
1769 |
|
1787 |
1770 |
// ----- Return
|
1788 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1789 |
1771 |
return PclZip::errorCode();
|
1790 |
1772 |
}
|
1791 |
1773 |
|
... | ... | |
1801 |
1783 |
.$p_options_list[$i]."'");
|
1802 |
1784 |
|
1803 |
1785 |
// ----- Return
|
1804 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1805 |
1786 |
return PclZip::errorCode();
|
1806 |
1787 |
}
|
1807 |
1788 |
|
... | ... | |
1814 |
1795 |
for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
|
1815 |
1796 |
// ----- Look for mandatory option
|
1816 |
1797 |
if ($v_requested_options[$key] == 'mandatory') {
|
1817 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Detect a mandatory option : ".PclZipUtilOptionText($key)."(".$key.")");
|
1818 |
1798 |
// ----- Look if present
|
1819 |
1799 |
if (!isset($v_result_list[$key])) {
|
1820 |
1800 |
// ----- Error log
|
1821 |
1801 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
|
1822 |
1802 |
|
1823 |
1803 |
// ----- Return
|
1824 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1825 |
1804 |
return PclZip::errorCode();
|
1826 |
1805 |
}
|
1827 |
1806 |
}
|
1828 |
1807 |
}
|
1829 |
1808 |
}
|
|
1809 |
|
|
1810 |
// ----- Look for default values
|
|
1811 |
if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) {
|
|
1812 |
|
|
1813 |
}
|
1830 |
1814 |
|
1831 |
1815 |
// ----- Return
|
1832 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
|
1833 |
1816 |
return $v_result;
|
1834 |
1817 |
}
|
1835 |
1818 |
// --------------------------------------------------------------------------------
|
1836 |
1819 |
|
1837 |
1820 |
// --------------------------------------------------------------------------------
|
|
1821 |
// Function : privOptionDefaultThreshold()
|
|
1822 |
// Description :
|
|
1823 |
// Parameters :
|
|
1824 |
// Return Values :
|
|
1825 |
// --------------------------------------------------------------------------------
|
|
1826 |
function privOptionDefaultThreshold(&$p_options)
|
|
1827 |
{
|
|
1828 |
$v_result=1;
|
|
1829 |
|
|
1830 |
if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
|
|
1831 |
|| isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) {
|
|
1832 |
return $v_result;
|
|
1833 |
}
|
|
1834 |
|
|
1835 |
// ----- Get 'memory_limit' configuration value
|
|
1836 |
$v_memory_limit = ini_get('memory_limit');
|
|
1837 |
$v_memory_limit = trim($v_memory_limit);
|
|
1838 |
$last = strtolower(substr($v_memory_limit, -1));
|
|
1839 |
|
|
1840 |
if($last == 'g')
|
|
1841 |
//$v_memory_limit = $v_memory_limit*1024*1024*1024;
|
|
1842 |
$v_memory_limit = $v_memory_limit*1073741824;
|
|
1843 |
if($last == 'm')
|
|
1844 |
//$v_memory_limit = $v_memory_limit*1024*1024;
|
|
1845 |
$v_memory_limit = $v_memory_limit*1048576;
|
|
1846 |
if($last == 'k')
|
|
1847 |
$v_memory_limit = $v_memory_limit*1024;
|
|
1848 |
|
|
1849 |
$p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit*PCLZIP_TEMPORARY_FILE_RATIO);
|
|
1850 |
|
|
1851 |
|
|
1852 |
// ----- Sanity check : No threshold if value lower than 1M
|
|
1853 |
if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) {
|
|
1854 |
unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]);
|
|
1855 |
}
|
|
1856 |
|
|
1857 |
// ----- Return
|
|
1858 |
return $v_result;
|
|
1859 |
}
|
|
1860 |
// --------------------------------------------------------------------------------
|
|
1861 |
|
|
1862 |
// --------------------------------------------------------------------------------
|
1838 |
1863 |
// Function : privFileDescrParseAtt()
|
1839 |
1864 |
// Description :
|
1840 |
1865 |
// Parameters :
|
... | ... | |
1844 |
1869 |
// --------------------------------------------------------------------------------
|
1845 |
1870 |
function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false)
|
1846 |
1871 |
{
|
1847 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privFileDescrParseAtt", "");
|
1848 |
1872 |
$v_result=1;
|
1849 |
1873 |
|
1850 |
1874 |
// ----- For each file in the list check the attributes
|
... | ... | |
1856 |
1880 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file");
|
1857 |
1881 |
|
1858 |
1882 |
// ----- Return
|
1859 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1860 |
1883 |
return PclZip::errorCode();
|
1861 |
1884 |
}
|
1862 |
1885 |
|
... | ... | |
1865 |
1888 |
case PCLZIP_ATT_FILE_NAME :
|
1866 |
1889 |
if (!is_string($v_value)) {
|
1867 |
1890 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
|
1868 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1869 |
1891 |
return PclZip::errorCode();
|
1870 |
1892 |
}
|
1871 |
1893 |
|
1872 |
1894 |
$p_filedescr['filename'] = PclZipUtilPathReduction($v_value);
|
1873 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
|
1874 |
1895 |
|
1875 |
1896 |
if ($p_filedescr['filename'] == '') {
|
1876 |
1897 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'");
|
1877 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1878 |
1898 |
return PclZip::errorCode();
|
1879 |
1899 |
}
|
1880 |
1900 |
|
... | ... | |
1883 |
1903 |
case PCLZIP_ATT_FILE_NEW_SHORT_NAME :
|
1884 |
1904 |
if (!is_string($v_value)) {
|
1885 |
1905 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
|
1886 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1887 |
1906 |
return PclZip::errorCode();
|
1888 |
1907 |
}
|
1889 |
1908 |
|
1890 |
1909 |
$p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value);
|
1891 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
|
1892 |
1910 |
|
1893 |
1911 |
if ($p_filedescr['new_short_name'] == '') {
|
1894 |
1912 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'");
|
1895 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1896 |
1913 |
return PclZip::errorCode();
|
1897 |
1914 |
}
|
1898 |
1915 |
break;
|
... | ... | |
1900 |
1917 |
case PCLZIP_ATT_FILE_NEW_FULL_NAME :
|
1901 |
1918 |
if (!is_string($v_value)) {
|
1902 |
1919 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
|
1903 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1904 |
1920 |
return PclZip::errorCode();
|
1905 |
1921 |
}
|
1906 |
1922 |
|
1907 |
1923 |
$p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value);
|
1908 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
|
1909 |
1924 |
|
1910 |
1925 |
if ($p_filedescr['new_full_name'] == '') {
|
1911 |
1926 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'");
|
1912 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1913 |
1927 |
return PclZip::errorCode();
|
1914 |
1928 |
}
|
1915 |
1929 |
break;
|
... | ... | |
1918 |
1932 |
case PCLZIP_ATT_FILE_COMMENT :
|
1919 |
1933 |
if (!is_string($v_value)) {
|
1920 |
1934 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
|
1921 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1922 |
1935 |
return PclZip::errorCode();
|
1923 |
1936 |
}
|
1924 |
1937 |
|
1925 |
1938 |
$p_filedescr['comment'] = $v_value;
|
1926 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
|
1927 |
1939 |
break;
|
1928 |
1940 |
|
1929 |
1941 |
case PCLZIP_ATT_FILE_MTIME :
|
1930 |
1942 |
if (!is_integer($v_value)) {
|
1931 |
1943 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". Integer expected for attribute '".PclZipUtilOptionText($v_key)."'");
|
1932 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1933 |
1944 |
return PclZip::errorCode();
|
1934 |
1945 |
}
|
1935 |
1946 |
|
1936 |
1947 |
$p_filedescr['mtime'] = $v_value;
|
1937 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
|
1938 |
1948 |
break;
|
1939 |
1949 |
|
1940 |
1950 |
case PCLZIP_ATT_FILE_CONTENT :
|
1941 |
1951 |
$p_filedescr['content'] = $v_value;
|
1942 |
|
////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
|
1943 |
1952 |
break;
|
1944 |
1953 |
|
1945 |
1954 |
default :
|
... | ... | |
1948 |
1957 |
"Unknown parameter '".$v_key."'");
|
1949 |
1958 |
|
1950 |
1959 |
// ----- Return
|
1951 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1952 |
1960 |
return PclZip::errorCode();
|
1953 |
1961 |
}
|
1954 |
1962 |
|
... | ... | |
1957 |
1965 |
for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
|
1958 |
1966 |
// ----- Look for mandatory option
|
1959 |
1967 |
if ($v_requested_options[$key] == 'mandatory') {
|
1960 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Detect a mandatory option : ".PclZipUtilOptionText($key)."(".$key.")");
|
1961 |
1968 |
// ----- Look if present
|
1962 |
1969 |
if (!isset($p_file_list[$key])) {
|
1963 |
1970 |
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
|
1964 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
1965 |
1971 |
return PclZip::errorCode();
|
1966 |
1972 |
}
|
1967 |
1973 |
}
|
... | ... | |
1972 |
1978 |
}
|
1973 |
1979 |
|
1974 |
1980 |
// ----- Return
|
1975 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
|
1976 |
1981 |
return $v_result;
|
1977 |
1982 |
}
|
1978 |
1983 |
// --------------------------------------------------------------------------------
|
... | ... | |
1980 |
1985 |
// --------------------------------------------------------------------------------
|
1981 |
1986 |
// Function : privFileDescrExpand()
|
1982 |
1987 |
// Description :
|
|
1988 |
// This method look for each item of the list to see if its a file, a folder
|
|
1989 |
// or a string to be added as file. For any other type of files (link, other)
|
|
1990 |
// just ignore the item.
|
|
1991 |
// Then prepare the information that will be stored for that file.
|
|
1992 |
// When its a folder, expand the folder with all the files that are in that
|
|
1993 |
// folder (recursively).
|
1983 |
1994 |
// Parameters :
|
1984 |
1995 |
// Return Values :
|
1985 |
1996 |
// 1 on success.
|
... | ... | |
1987 |
1998 |
// --------------------------------------------------------------------------------
|
1988 |
1999 |
function privFileDescrExpand(&$p_filedescr_list, &$p_options)
|
1989 |
2000 |
{
|
1990 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privFileDescrExpand", "");
|
1991 |
2001 |
$v_result=1;
|
1992 |
2002 |
|
1993 |
2003 |
// ----- Create a result list
|
... | ... | |
1995 |
2005 |
|
1996 |
2006 |
// ----- Look each entry
|
1997 |
2007 |
for ($i=0; $i<sizeof($p_filedescr_list); $i++) {
|
1998 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Looking for file ".$i.".");
|
1999 |
2008 |
|
2000 |
2009 |
// ----- Get filedescr
|
2001 |
2010 |
$v_descr = $p_filedescr_list[$i];
|
2002 |
2011 |
|
2003 |
2012 |
// ----- Reduce the filename
|
2004 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filedescr before reduction :'".$v_descr['filename']."'");
|
2005 |
|
$v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename']);
|
|
2013 |
$v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename'], false);
|
2006 |
2014 |
$v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']);
|
2007 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filedescr after reduction :'".$v_descr['filename']."'");
|
2008 |
2015 |
|
2009 |
2016 |
// ----- Look for real file or folder
|
2010 |
2017 |
if (file_exists($v_descr['filename'])) {
|
2011 |
2018 |
if (@is_file($v_descr['filename'])) {
|
2012 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a file");
|
2013 |
2019 |
$v_descr['type'] = 'file';
|
2014 |
2020 |
}
|
2015 |
2021 |
else if (@is_dir($v_descr['filename'])) {
|
2016 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a folder");
|
2017 |
2022 |
$v_descr['type'] = 'folder';
|
2018 |
2023 |
}
|
2019 |
2024 |
else if (@is_link($v_descr['filename'])) {
|
2020 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Unsupported file type : link");
|
2021 |
2025 |
// skip
|
2022 |
2026 |
continue;
|
2023 |
2027 |
}
|
2024 |
2028 |
else {
|
2025 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Unsupported file type : unknown type");
|
2026 |
2029 |
// skip
|
2027 |
2030 |
continue;
|
2028 |
2031 |
}
|
... | ... | |
2030 |
2033 |
|
2031 |
2034 |
// ----- Look for string added as file
|
2032 |
2035 |
else if (isset($v_descr['content'])) {
|
2033 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a string added as a file");
|
2034 |
2036 |
$v_descr['type'] = 'virtual_file';
|
2035 |
2037 |
}
|
2036 |
2038 |
|
2037 |
2039 |
// ----- Missing file
|
2038 |
2040 |
else {
|
2039 |
2041 |
// ----- Error log
|
2040 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_descr['filename']."' does not exists");
|
2041 |
|
PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$v_descr['filename']."' does not exists");
|
|
2042 |
PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$v_descr['filename']."' does not exist");
|
2042 |
2043 |
|
2043 |
2044 |
// ----- Return
|
2044 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
|
2045 |
2045 |
return PclZip::errorCode();
|
2046 |
2046 |
}
|
2047 |
2047 |
|
... | ... | |
2058 |
2058 |
$v_dirlist_nb = 0;
|
2059 |
2059 |
if ($v_folder_handler = @opendir($v_descr['filename'])) {
|
2060 |
2060 |
while (($v_item_handler = @readdir($v_folder_handler)) !== false) {
|
2061 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Looking for '".$v_item_handler."' in the directory");
|
2062 |
2061 |
|
2063 |
2062 |
// ----- Skip '.' and '..'
|
2064 |
2063 |
if (($v_item_handler == '.') || ($v_item_handler == '..')) {
|
... | ... | |
2071 |
2070 |
// ----- Look for different stored filename
|
2072 |
2071 |
// Because the name of the folder was changed, the name of the
|
2073 |
2072 |
// files/sub-folders also change
|
2074 |
|
if ($v_descr['stored_filename'] != $v_descr['filename']) {
|
|
2073 |
if (($v_descr['stored_filename'] != $v_descr['filename'])
|
|
2074 |
&& (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) {
|
2075 |
2075 |
if ($v_descr['stored_filename'] != '') {
|
2076 |
2076 |
$v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler;
|
2077 |
2077 |
}
|
... | ... | |
2086 |
2086 |
@closedir($v_folder_handler);
|
2087 |
2087 |
}
|
2088 |
2088 |
else {
|
2089 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to open dir '".$v_descr['filename']."' in read mode. Skipped.");
|
2090 |
2089 |
// TBC : unable to open folder in read mode
|
2091 |
2090 |
}
|
2092 |
2091 |
|
... | ... | |
2094 |
2093 |
if ($v_dirlist_nb != 0) {
|
2095 |
2094 |
// ----- Expand
|
2096 |
2095 |
if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) {
|
2097 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
|
2098 |
2096 |
return $v_result;
|
2099 |
2097 |
}
|
2100 |
2098 |
|
2101 |
2099 |
// ----- Concat the resulting list
|
2102 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Merging result list (size '".sizeof($v_result_list)."') with dirlist (size '".sizeof($v_dirlist_descr)."')");
|
2103 |
2100 |
$v_result_list = array_merge($v_result_list, $v_dirlist_descr);
|
2104 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "merged result list is size '".sizeof($v_result_list)."'");
|
2105 |
2101 |
}
|
2106 |
2102 |
else {
|
2107 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Nothing in this folder to expand.");
|
2108 |
2103 |
}
|
2109 |
2104 |
|
2110 |
2105 |
// ----- Free local array
|
... | ... | |
2116 |
2111 |
$p_filedescr_list = $v_result_list;
|
2117 |
2112 |
|
2118 |
2113 |
// ----- Return
|
2119 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
|
2120 |
2114 |
return $v_result;
|
2121 |
2115 |
}
|
2122 |
2116 |
// --------------------------------------------------------------------------------
|
... | ... | |
2129 |
2123 |
// --------------------------------------------------------------------------------
|
2130 |
2124 |
function privCreate($p_filedescr_list, &$p_result_list, &$p_options)
|
2131 |
2125 |
{
|
2132 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCreate", "list");
|
2133 |
2126 |
$v_result=1;
|
2134 |
2127 |
$v_list_detail = array();
|
2135 |
2128 |
|
... | ... | |
2140 |
2133 |
if (($v_result = $this->privOpenFd('wb')) != 1)
|
2141 |
2134 |
{
|
2142 |
2135 |
// ----- Return
|
2143 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
|
2144 |
2136 |
return $v_result;
|
2145 |
2137 |
}
|
2146 |
2138 |
|
... | ... | |
2154 |
2146 |
$this->privSwapBackMagicQuotes();
|
2155 |
2147 |
|
2156 |
2148 |
// ----- Return
|
2157 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
|
2158 |
2149 |
return $v_result;
|
2159 |
2150 |
}
|
2160 |
2151 |
// --------------------------------------------------------------------------------
|
... | ... | |
2167 |
2158 |
// --------------------------------------------------------------------------------
|
2168 |
2159 |
function privAdd($p_filedescr_list, &$p_result_list, &$p_options)
|
2169 |
2160 |
{
|
2170 |
|
//--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAdd", "list");
|
2171 |
2161 |
$v_result=1;
|
2172 |
2162 |
$v_list_detail = array();
|
2173 |
2163 |
|
2174 |
2164 |
// ----- Look if the archive exists or is empty
|
2175 |
2165 |
if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0))
|
2176 |
2166 |
{
|
2177 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive does not exist, or is empty, create it.");
|
2178 |
2167 |
|
2179 |
2168 |
// ----- Do a create
|
2180 |
2169 |
$v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options);
|
2181 |
2170 |
|
2182 |
2171 |
// ----- Return
|
2183 |
|
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
|
2184 |
2172 |
return $v_result;
|
2185 |
2173 |
}
|
2186 |
2174 |
// ----- Magic quotes trick
|
2187 |
2175 |
$this->privDisableMagicQuotes();
|
2188 |
2176 |
|
2189 |
2177 |
// ----- Open the zip file
|
2190 |
|
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
|
updated pclzip class