Revision 1204
Added by Dietmar almost 15 years ago
pclzip.lib.php | ||
---|---|---|
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"); |
|
2191 | 2178 |
if (($v_result=$this->privOpenFd('rb')) != 1) |
2192 | 2179 |
{ |
2193 | 2180 |
// ----- Magic quotes trick |
2194 | 2181 |
$this->privSwapBackMagicQuotes(); |
2195 | 2182 |
|
2196 | 2183 |
// ----- Return |
2197 |
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); |
|
2198 | 2184 |
return $v_result; |
2199 | 2185 |
} |
2200 | 2186 |
|
... | ... | |
2204 | 2190 |
{ |
2205 | 2191 |
$this->privCloseFd(); |
2206 | 2192 |
$this->privSwapBackMagicQuotes(); |
2207 |
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); |
|
2208 | 2193 |
return $v_result; |
2209 | 2194 |
} |
2210 | 2195 |
|
2211 | 2196 |
// ----- Go to beginning of File |
2212 |
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'"); |
|
2213 | 2197 |
@rewind($this->zip_fd); |
2214 |
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'"); |
|
2215 | 2198 |
|
2216 | 2199 |
// ----- Creates a temporay file |
2217 | 2200 |
$v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; |
2218 | 2201 |
|
2219 | 2202 |
// ----- Open the temporary file in write mode |
2220 |
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode"); |
|
2221 | 2203 |
if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) |
2222 | 2204 |
{ |
2223 | 2205 |
$this->privCloseFd(); |
... | ... | |
2226 | 2208 |
PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); |
2227 | 2209 |
|
2228 | 2210 |
// ----- Return |
2229 |
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo()); |
|
2230 | 2211 |
return PclZip::errorCode(); |
2231 | 2212 |
} |
2232 | 2213 |
|
... | ... | |
2236 | 2217 |
while ($v_size != 0) |
2237 | 2218 |
{ |
2238 | 2219 |
$v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); |
2239 |
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes"); |
|
2240 | 2220 |
$v_buffer = fread($this->zip_fd, $v_read_size); |
2241 | 2221 |
@fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); |
2242 | 2222 |
$v_size -= $v_read_size; |
... | ... | |
2259 | 2239 |
$this->privSwapBackMagicQuotes(); |
2260 | 2240 |
|
2261 | 2241 |
// ----- Return |
2262 |
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); |
|
2263 | 2242 |
return $v_result; |
2264 | 2243 |
} |
2265 | 2244 |
|
2266 | 2245 |
// ----- Store the offset of the central dir |
2267 | 2246 |
$v_offset = @ftell($this->zip_fd); |
2268 |
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "New offset of central dir : $v_offset"); |
|
2269 | 2247 |
|
2270 | 2248 |
// ----- Copy the block of file headers from the old archive |
2271 | 2249 |
$v_size = $v_central_dir['size']; |
2272 | 2250 |
while ($v_size != 0) |
2273 | 2251 |
{ |
2274 | 2252 |
$v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); |
2275 |
//--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes"); |
|
2276 | 2253 |
$v_buffer = @fread($v_zip_temp_fd, $v_read_size); |
2277 | 2254 |
@fwrite($this->zip_fd, $v_buffer, $v_read_size); |
2278 | 2255 |
$v_size -= $v_read_size; |
... | ... | |
2290 | 2267 |
$this->privSwapBackMagicQuotes(); |
2291 | 2268 |
|
2292 | 2269 |
// ----- Return |
2293 |
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); |
|
2294 | 2270 |
return $v_result; |
2295 | 2271 |
} |
2296 | 2272 |
$v_count++; |
... | ... | |
2323 | 2299 |
$this->privSwapBackMagicQuotes(); |
2324 | 2300 |
|
2325 | 2301 |
// ----- Return |
2326 |
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); |
|
2327 | 2302 |
return $v_result; |
2328 | 2303 |
} |
2329 | 2304 |
|
... | ... | |
2351 | 2326 |
PclZipUtilRename($v_zip_temp_name, $this->zipname); |
2352 | 2327 |
|
2353 | 2328 |
// ----- Return |
2354 |
//--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result); |
Also available in: Unified diff
updated pclzip class