Project

General

Profile

« Previous | Next » 

Revision 1204

Added by Dietmar over 14 years ago

updated pclzip class

View differences:

branches/2.8.x/CHANGELOG
11 11
! = Update/Change
12 12

  
13 13
------------------------------------- 2.8.1 -------------------------------------
14
01-Dez-2009 Dietmar Woellbrink (Luisehahne)
15
!	updated pclzip class
14 16
29-Nov-2009 Dietmar Woellbrink (Luisehahne)
15 17
!	update module info.php (thanks to Waldschwein)
16 18
29-Nov-2009 Dietmar Woellbrink (Luisehahne)
branches/2.8.x/wb/include/pclzip/readme.txt
1 1
// --------------------------------------------------------------------------------
2
// PclZip 2.6 - readme.txt
2
// PclZip 2.8.2 - readme.txt
3 3
// --------------------------------------------------------------------------------
4
// License GNU/LGPL - March 2006
4
// License GNU/LGPL - August 2009
5 5
// Vincent Blavet - vincent@phpconcept.net
6 6
// http://www.phpconcept.net
7 7
// --------------------------------------------------------------------------------
8
// $Id: readme.txt,v 1.49 2007/07/20 13:56:07 vblavet Exp $
8
// $Id: readme.txt,v 1.60 2009/09/30 20:35:21 vblavet Exp $
9 9
// --------------------------------------------------------------------------------
10 10

  
11 11

  
......
32 32
2 - What's new
33 33
==============
34 34

  
35
  Version 2.8.2 :
36
    - PCLZIP_CB_PRE_EXTRACT and PCLZIP_CB_POST_EXTRACT are now supported with 
37
      extraction as a string (PCLZIP_OPT_EXTRACT_AS_STRING). The string
38
      can also be modified in the post-extract call back.
39
    **Bugs correction :
40
    - PCLZIP_OPT_REMOVE_ALL_PATH was not working correctly    
41
    - Remove use of eval() and do direct call to callback functions
42
    - Correct support of 64bits systems (Thanks to WordPress team)
43

  
44
  Version 2.8.1 :
45
    - Move option PCLZIP_OPT_BY_EREG to PCLZIP_OPT_BY_PREG because ereg() is
46
      deprecated in PHP 5.3. When using option PCLZIP_OPT_BY_EREG, PclZip will
47
      automatically replace it by PCLZIP_OPT_BY_PREG.
48
  
49
  Version 2.8 :
50
    - Improve extraction of zip archive for large files by using temporary files
51
      This feature is working like the one defined in r2.7.
52
      Options are renamed : PCLZIP_OPT_TEMP_FILE_ON, PCLZIP_OPT_TEMP_FILE_OFF,
53
      PCLZIP_OPT_TEMP_FILE_THRESHOLD
54
    - Add a ratio constant PCLZIP_TEMPORARY_FILE_RATIO to configure the auto
55
      sense of temporary file use.
56
    - Bug correction : Reduce filepath in returned file list to remove ennoying
57
      './/' preambule in file path.
58

  
59
  Version 2.7 :
60
    - Improve creation of zip archive for large files :
61
      PclZip will now autosense the configured memory and use temporary files
62
      when large file is suspected.
63
      This feature can also ne triggered by manual options in create() and add()
64
      methods. 'PCLZIP_OPT_ADD_TEMP_FILE_ON' force the use of temporary files,
65
      'PCLZIP_OPT_ADD_TEMP_FILE_OFF' disable the autosense technic, 
66
      'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD' allow for configuration of a size
67
      threshold to use temporary files.
68
      Using "temporary files" rather than "memory" might take more time, but
69
      might give the ability to zip very large files :
70
      Tested on my win laptop with a 88Mo file :
71
        Zip "in-memory" : 18sec (max_execution_time=30, memory_limit=180Mo)
72
        Zip "tmporary-files" : 23sec (max_execution_time=30, memory_limit=30Mo)
73
    - Replace use of mktime() by time() to limit the E_STRICT error messages.
74
    - Bug correction : When adding files with full windows path (drive letter)
75
      PclZip is now working. Before, if the drive letter is not the default
76
      path, PclZip was not able to add the file.
77

  
35 78
  Version 2.6 :
36 79
    - Code optimisation
37 80
    - New attributes PCLZIP_ATT_FILE_COMMENT gives the ability to
......
302 345
  In Version 2.x :
303 346
    - PclZip does only support file uncompressed or compressed with deflate (compression method 8)
304 347
    - PclZip does not support password protected zip archive
348
    - Some concern were seen when changing mtime of a file while archiving. 
349
      Seems to be linked to Daylight Saving Time (PclTest_changing_mtime).
305 350

  
306 351
  In Version 1.2 :
307 352

  
branches/2.8.x/wb/include/pclzip/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");
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff