wp/wp-admin/includes/class-pclzip.php
author ymh <ymh.work@gmail.com>
Tue, 15 Dec 2020 13:49:49 +0100
changeset 16 a86126ab1dd4
parent 7 cf61fcea0001
child 18 be944660c56a
permissions -rw-r--r--
update enmi-conf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
// --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
// PhpConcept Library - Zip Module 2.8.2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
// --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
// License GNU/LGPL - Vincent Blavet - August 2009
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
// http://www.phpconcept.net
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
// --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
// Presentation :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
//   PclZip is a PHP library that manage ZIP archives.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
//   So far tests show that archives generated by PclZip are readable by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
//   WinZip application and other tools.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
// Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
//   See readme.txt and http://www.phpconcept.net
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
// Warning :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
//   This library and the associated files are non commercial, non professional
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
//   work.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
//   It should not have unexpected results. However if any damage is caused by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
//   this software the author can not be responsible.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
//   The use of this software is at the risk of the user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
// --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
// $Id: pclzip.lib.php,v 1.60 2009/09/30 21:01:04 vblavet Exp $
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
// --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
  // ----- Constants
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
  if (!defined('PCLZIP_READ_BLOCK_SIZE')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    define( 'PCLZIP_READ_BLOCK_SIZE', 2048 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
  // ----- File list separator
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
  // In version 1.x of PclZip, the separator for file list is a space
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
  // (which is not a very smart choice, specifically for windows paths !).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
  // A better separator should be a comma (,). This constant gives you the
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    37
  // ability to change that.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
  // However notice that changing this value, may have impact on existing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
  // scripts, using space separated filenames.
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    40
  // Recommended values for compatibility with older versions :
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
  //define( 'PCLZIP_SEPARATOR', ' ' );
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    42
  // Recommended values for smart separation of filenames.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
  if (!defined('PCLZIP_SEPARATOR')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    define( 'PCLZIP_SEPARATOR', ',' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
  // ----- Error configuration
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
  // 0 : PclZip Class integrated error handling
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
  // 1 : PclError external library error handling. By enabling this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
  //     you must ensure that you have included PclError library.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
  // [2,...] : reserved for futur use
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
  if (!defined('PCLZIP_ERROR_EXTERNAL')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    define( 'PCLZIP_ERROR_EXTERNAL', 0 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
  // ----- Optional static temporary directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
  //       By default temporary files are generated in the script current
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
  //       path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
  //       If defined :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
  //       - MUST BE terminated by a '/'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
  //       - MUST be a valid, already created directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
  //       Samples :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
  // define( 'PCLZIP_TEMPORARY_DIR', '/temp/' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
  // define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
  if (!defined('PCLZIP_TEMPORARY_DIR')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    define( 'PCLZIP_TEMPORARY_DIR', '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
  // ----- Optional threshold ratio for use of temporary files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
  //       Pclzip sense the size of the file to add/extract and decide to
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    71
  //       use or not temporary file. The algorithm is looking for
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
  //       memory_limit of PHP and apply a ratio.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
  //       threshold = memory_limit * ratio.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
  //       Recommended values are under 0.5. Default 0.47.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
  //       Samples :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
  // define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.5 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
  if (!defined('PCLZIP_TEMPORARY_FILE_RATIO')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.47 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
// --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED *****
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
// --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
  // ----- Global variables
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
  $g_pclzip_version = "2.8.2";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
  // ----- Error codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
  //   -1 : Unable to open file in binary write mode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
  //   -2 : Unable to open file in binary read mode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
  //   -3 : Invalid parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
  //   -4 : File does not exist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
  //   -5 : Filename is too long (max. 255)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
  //   -6 : Not a valid zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
  //   -7 : Invalid extracted file size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
  //   -8 : Unable to create directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
  //   -9 : Invalid archive extension
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
  //  -10 : Invalid archive format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
  //  -11 : Unable to delete file (unlink)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
  //  -12 : Unable to rename file (rename)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
  //  -13 : Invalid header checksum
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
  //  -14 : Invalid archive size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
  define( 'PCLZIP_ERR_USER_ABORTED', 2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
  define( 'PCLZIP_ERR_NO_ERROR', 0 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
  define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
  define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
  define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
  define( 'PCLZIP_ERR_MISSING_FILE', -4 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
  define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
  define( 'PCLZIP_ERR_INVALID_ZIP', -6 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
  define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
  define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
  define( 'PCLZIP_ERR_BAD_EXTENSION', -9 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
  define( 'PCLZIP_ERR_BAD_FORMAT', -10 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
  define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
  define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
  define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
  define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
  define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
  define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
  define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
  define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
  define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
  define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
  define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
  // ----- Options values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
  define( 'PCLZIP_OPT_PATH', 77001 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
  define( 'PCLZIP_OPT_ADD_PATH', 77002 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
  define( 'PCLZIP_OPT_REMOVE_PATH', 77003 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
  define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
  define( 'PCLZIP_OPT_SET_CHMOD', 77005 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
  define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
  define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
  define( 'PCLZIP_OPT_BY_NAME', 77008 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
  define( 'PCLZIP_OPT_BY_INDEX', 77009 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
  define( 'PCLZIP_OPT_BY_EREG', 77010 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
  define( 'PCLZIP_OPT_BY_PREG', 77011 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
  define( 'PCLZIP_OPT_COMMENT', 77012 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
  define( 'PCLZIP_OPT_ADD_COMMENT', 77013 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
  define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
  define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
  define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
  define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
  // Having big trouble with crypt. Need to multiply 2 long int
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
  // which is not correctly supported by PHP ...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
  //define( 'PCLZIP_OPT_CRYPT', 77018 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
  define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
  define( 'PCLZIP_OPT_TEMP_FILE_THRESHOLD', 77020 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
  define( 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD', 77020 ); // alias
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
  define( 'PCLZIP_OPT_TEMP_FILE_ON', 77021 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
  define( 'PCLZIP_OPT_ADD_TEMP_FILE_ON', 77021 ); // alias
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
  define( 'PCLZIP_OPT_TEMP_FILE_OFF', 77022 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
  define( 'PCLZIP_OPT_ADD_TEMP_FILE_OFF', 77022 ); // alias
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
  // ----- File description attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
  define( 'PCLZIP_ATT_FILE_NAME', 79001 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
  define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
  define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
  define( 'PCLZIP_ATT_FILE_MTIME', 79004 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
  define( 'PCLZIP_ATT_FILE_CONTENT', 79005 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
  define( 'PCLZIP_ATT_FILE_COMMENT', 79006 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
  // ----- Call backs values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
  define( 'PCLZIP_CB_PRE_EXTRACT', 78001 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
  define( 'PCLZIP_CB_POST_EXTRACT', 78002 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
  define( 'PCLZIP_CB_PRE_ADD', 78003 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
  define( 'PCLZIP_CB_POST_ADD', 78004 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
  /* For futur use
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
  define( 'PCLZIP_CB_PRE_LIST', 78005 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
  define( 'PCLZIP_CB_POST_LIST', 78006 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
  define( 'PCLZIP_CB_PRE_DELETE', 78007 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
  define( 'PCLZIP_CB_POST_DELETE', 78008 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
  */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
  // Class : PclZip
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
  //   PclZip is the class that represent a Zip archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
  //   The public methods allow the manipulation of the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
  // Attributes :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
  //   Attributes must not be accessed directly.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
  // Methods :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
  //   PclZip() : Object creator
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
  //   create() : Creates the Zip archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
  //   listContent() : List the content of the Zip archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
  //   extract() : Extract the content of the archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
  //   properties() : List the properties of the archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
  class PclZip
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
    // ----- Filename of the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
    var $zipname = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
    // ----- File descriptor of the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
    var $zip_fd = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
    // ----- Internal error handling
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
    var $error_code = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
    var $error_string = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
    // ----- Current status of the magic_quotes_runtime
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
    // This value store the php configuration for magic_quotes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
    // The class can then disable the magic_quotes and reset it after
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
    var $magic_quotes_status;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
  // Function : PclZip()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
  //   Creates a PclZip object and set the name of the associated Zip archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
  //   filename.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
  //   Note that no real action is taken, if the archive does not exist it is not
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
  //   created. Use create() for that.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
  // --------------------------------------------------------------------------------
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   215
  function __construct($p_zipname)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
    // ----- Tests the zlib
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
    if (!function_exists('gzopen'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
      die('Abort '.basename(__FILE__).' : Missing zlib extensions');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
    // ----- Set the attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
    $this->zipname = $p_zipname;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
    $this->zip_fd = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
    $this->magic_quotes_status = -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
    return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
  }
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   232
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   233
  public function PclZip($p_zipname) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   234
    self::__construct($p_zipname);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   235
  }
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
  // Function :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
  //   create($p_filelist, $p_add_dir="", $p_remove_dir="")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
  //   create($p_filelist, $p_option, $p_option_value, ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
  //   This method supports two different synopsis. The first one is historical.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
  //   This method creates a Zip Archive. The Zip file is created in the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
  //   filesystem. The files and directories indicated in $p_filelist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
  //   are added in the archive. See the parameters description for the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
  //   supported format of $p_filelist.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
  //   When a directory is in the list, the directory and its content is added
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
  //   in the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
  //   In this synopsis, the function takes an optional variable list of
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   251
  //   options. See below the supported options.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
  //   $p_filelist : An array containing file or directory names, or
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
  //                 a string containing one filename or one directory name, or
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
  //                 a string containing a list of filenames and/or directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
  //                 names separated by spaces.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
  //   $p_add_dir : A path to add before the real path of the archived file,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
  //                in order to have it memorized in the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
  //   $p_remove_dir : A path to remove from the real path of the file to archive,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
  //                   in order to have a shorter path memorized in the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
  //                   When $p_add_dir and $p_remove_dir are set, $p_remove_dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
  //                   is removed first, before $p_add_dir is added.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
  // Options :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
  //   PCLZIP_OPT_ADD_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
  //   PCLZIP_OPT_REMOVE_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
  //   PCLZIP_OPT_REMOVE_ALL_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
  //   PCLZIP_OPT_COMMENT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
  //   PCLZIP_CB_PRE_ADD :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
  //   PCLZIP_CB_POST_ADD :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
  //   0 on failure,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
  //   The list of the added files, with a status of the add action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
  //   (see PclZip::listContent() for list entry format)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
  function create($p_filelist)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
    // ----- Reset the error handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
    $this->privErrorReset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
    // ----- Set default values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
    $v_options = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
    $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
    // ----- Look for variable options arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
    $v_size = func_num_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
    // ----- Look for arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
    if ($v_size > 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
      // ----- Get the arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
      $v_arg_list = func_get_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
      // ----- Remove from the options list the first argument
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
      array_shift($v_arg_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
      $v_size--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
      // ----- Look for first arg
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
      if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
        // ----- Parse the options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
        $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
                                            array (PCLZIP_OPT_REMOVE_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
                                                   PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
                                                   PCLZIP_OPT_ADD_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
                                                   PCLZIP_CB_PRE_ADD => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
                                                   PCLZIP_CB_POST_ADD => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
                                                   PCLZIP_OPT_NO_COMPRESSION => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
                                                   PCLZIP_OPT_COMMENT => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
                                                   PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
                                                   PCLZIP_OPT_TEMP_FILE_ON => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
                                                   PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
                                                   //, PCLZIP_OPT_CRYPT => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
                                             ));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
        if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
          return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
      // ----- Look for 2 args
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
      // Here we need to support the first historic synopsis of the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
      // method.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
        // ----- Get the first argument
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
        $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
        // ----- Look for the optional second argument
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
        if ($v_size == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
          $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
        else if ($v_size > 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
		                       "Invalid number / type of arguments");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
          return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
    // ----- Look for default option values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
    $this->privOptionDefaultThreshold($v_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
    // ----- Init
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
    $v_string_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
    $v_att_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
    $v_filedescr_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
    $p_result_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
    // ----- Look if the $p_filelist is really an array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
    if (is_array($p_filelist)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
      // ----- Look if the first element is also an array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
      //       This will mean that this is a file description entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
      if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
        $v_att_list = $p_filelist;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
      // ----- The list is a list of string names
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
        $v_string_list = $p_filelist;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
    // ----- Look if the $p_filelist is a string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
    else if (is_string($p_filelist)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
      // ----- Create a list from the string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
      $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
    // ----- Invalid variable type for $p_filelist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
      return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
    // ----- Reformat the string list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
    if (sizeof($v_string_list) != 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
      foreach ($v_string_list as $v_string) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
        if ($v_string != '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
          $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
    // ----- For each file in the list check the attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
    $v_supported_attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
    = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
             ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
             ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
             ,PCLZIP_ATT_FILE_MTIME => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
             ,PCLZIP_ATT_FILE_CONTENT => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
             ,PCLZIP_ATT_FILE_COMMENT => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
						);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
    foreach ($v_att_list as $v_entry) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
      $v_result = $this->privFileDescrParseAtt($v_entry,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
                                               $v_filedescr_list[],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
                                               $v_options,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
                                               $v_supported_attributes);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
      if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
        return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
    // ----- Expand the filelist (expand directories)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
    $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
    if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
      return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
    // ----- Call the create fct
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
    $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
    if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
      return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
    return $p_result_list;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
  // Function :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
  //   add($p_filelist, $p_add_dir="", $p_remove_dir="")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
  //   add($p_filelist, $p_option, $p_option_value, ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
  //   This method supports two synopsis. The first one is historical.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
  //   This methods add the list of files in an existing archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
  //   If a file with the same name already exists, it is added at the end of the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
  //   archive, the first one is still present.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
  //   If the archive does not exist, it is created.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
  //   $p_filelist : An array containing file or directory names, or
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
  //                 a string containing one filename or one directory name, or
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
  //                 a string containing a list of filenames and/or directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
  //                 names separated by spaces.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
  //   $p_add_dir : A path to add before the real path of the archived file,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
  //                in order to have it memorized in the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
  //   $p_remove_dir : A path to remove from the real path of the file to archive,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
  //                   in order to have a shorter path memorized in the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
  //                   When $p_add_dir and $p_remove_dir are set, $p_remove_dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
  //                   is removed first, before $p_add_dir is added.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
  // Options :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
  //   PCLZIP_OPT_ADD_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
  //   PCLZIP_OPT_REMOVE_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
  //   PCLZIP_OPT_REMOVE_ALL_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
  //   PCLZIP_OPT_COMMENT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
  //   PCLZIP_OPT_ADD_COMMENT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
  //   PCLZIP_OPT_PREPEND_COMMENT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
  //   PCLZIP_CB_PRE_ADD :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
  //   PCLZIP_CB_POST_ADD :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
  //   0 on failure,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
  //   The list of the added files, with a status of the add action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
  //   (see PclZip::listContent() for list entry format)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
  function add($p_filelist)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
    // ----- Reset the error handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
    $this->privErrorReset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
    // ----- Set default values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
    $v_options = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
    $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
    // ----- Look for variable options arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
    $v_size = func_num_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
    // ----- Look for arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
    if ($v_size > 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
      // ----- Get the arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
      $v_arg_list = func_get_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
      // ----- Remove form the options list the first argument
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
      array_shift($v_arg_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
      $v_size--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
      // ----- Look for first arg
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
      if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
        // ----- Parse the options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
        $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
                                            array (PCLZIP_OPT_REMOVE_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
                                                   PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
                                                   PCLZIP_OPT_ADD_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
                                                   PCLZIP_CB_PRE_ADD => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
                                                   PCLZIP_CB_POST_ADD => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
                                                   PCLZIP_OPT_NO_COMPRESSION => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
                                                   PCLZIP_OPT_COMMENT => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
                                                   PCLZIP_OPT_ADD_COMMENT => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
                                                   PCLZIP_OPT_PREPEND_COMMENT => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
                                                   PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
                                                   PCLZIP_OPT_TEMP_FILE_ON => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
                                                   PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
                                                   //, PCLZIP_OPT_CRYPT => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
												   ));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
        if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
          return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
      // ----- Look for 2 args
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
      // Here we need to support the first historic synopsis of the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
      // method.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
        // ----- Get the first argument
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
        $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
        // ----- Look for the optional second argument
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
        if ($v_size == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
          $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
        else if ($v_size > 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
          // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
          // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
          return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
    // ----- Look for default option values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
    $this->privOptionDefaultThreshold($v_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
    // ----- Init
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
    $v_string_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
    $v_att_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
    $v_filedescr_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
    $p_result_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
    // ----- Look if the $p_filelist is really an array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
    if (is_array($p_filelist)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
      // ----- Look if the first element is also an array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
      //       This will mean that this is a file description entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
      if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
        $v_att_list = $p_filelist;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
      // ----- The list is a list of string names
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
        $v_string_list = $p_filelist;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
    // ----- Look if the $p_filelist is a string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
    else if (is_string($p_filelist)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
      // ----- Create a list from the string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
      $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
    // ----- Invalid variable type for $p_filelist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
      return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
    // ----- Reformat the string list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
    if (sizeof($v_string_list) != 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
      foreach ($v_string_list as $v_string) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
        $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
    // ----- For each file in the list check the attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
    $v_supported_attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
    = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
             ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
             ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
             ,PCLZIP_ATT_FILE_MTIME => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
             ,PCLZIP_ATT_FILE_CONTENT => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
             ,PCLZIP_ATT_FILE_COMMENT => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
						);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
    foreach ($v_att_list as $v_entry) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
      $v_result = $this->privFileDescrParseAtt($v_entry,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
                                               $v_filedescr_list[],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
                                               $v_options,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
                                               $v_supported_attributes);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
      if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
        return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
    // ----- Expand the filelist (expand directories)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
    $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
    if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
      return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
    // ----- Call the create fct
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
    $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
    if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
      return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
    return $p_result_list;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
  // Function : listContent()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
  //   This public method, gives the list of the files and directories, with their
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
  //   properties.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
  //   The properties of each entries in the list are (used also in other functions) :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
  //     filename : Name of the file. For a create or add action it is the filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
  //                given by the user. For an extract function it is the filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
  //                of the extracted file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
  //     stored_filename : Name of the file / directory stored in the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
  //     size : Size of the stored file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
  //     compressed_size : Size of the file's data compressed in the archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
  //                       (without the headers overhead)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
  //     mtime : Last known modification date of the file (UNIX timestamp)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
  //     comment : Comment associated with the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
  //     folder : true | false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
  //     index : index of the file in the archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
  //     status : status of the action (depending of the action) :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
  //              Values are :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
  //                ok : OK !
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
  //                filtered : the file / dir is not extracted (filtered by user)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
  //                already_a_directory : the file can not be extracted because a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
  //                                      directory with the same name already exists
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
  //                write_protected : the file can not be extracted because a file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
  //                                  with the same name already exists and is
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
  //                                  write protected
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
  //                newer_exist : the file was not extracted because a newer file exists
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
  //                path_creation_fail : the file is not extracted because the folder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
  //                                     does not exist and can not be created
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
  //                write_error : the file was not extracted because there was a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
  //                              error while writing the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
  //                read_error : the file was not extracted because there was a error
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
  //                             while reading the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
  //                invalid_header : the file was not extracted because of an archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
  //                                 format error (bad file header)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
  //   Note that each time a method can continue operating when there
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
  //   is an action error on a file, the error is only logged in the file status.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
  //   0 on an unrecoverable failure,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
  //   The list of the files in the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
  function listContent()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
    // ----- Reset the error handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
    $this->privErrorReset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
    // ----- Check archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
    if (!$this->privCheckFormat()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
      return(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
    // ----- Call the extracting fct
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
    $p_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
    if (($v_result = $this->privList($p_list)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
      unset($p_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
      return(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
    return $p_list;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
  // Function :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
  //   extract($p_path="./", $p_remove_path="")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
  //   extract([$p_option, $p_option_value, ...])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
  //   This method supports two synopsis. The first one is historical.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
  //   This method extract all the files / directories from the archive to the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
  //   folder indicated in $p_path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
  //   If you want to ignore the 'root' part of path of the memorized files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
  //   you can indicate this in the optional $p_remove_path parameter.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
  //   By default, if a newer file with the same name already exists, the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
  //   file is not extracted.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
  //
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   685
  //   If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH options
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
  //   are used, the path indicated in PCLZIP_OPT_ADD_PATH is append
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
  //   at the end of the path value of PCLZIP_OPT_PATH.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
  //   $p_path : Path where the files and directories are to be extracted
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
  //   $p_remove_path : First part ('root' part) of the memorized path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
  //                    (if any similar) to remove while extracting.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
  // Options :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
  //   PCLZIP_OPT_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
  //   PCLZIP_OPT_ADD_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
  //   PCLZIP_OPT_REMOVE_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
  //   PCLZIP_OPT_REMOVE_ALL_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
  //   PCLZIP_CB_PRE_EXTRACT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
  //   PCLZIP_CB_POST_EXTRACT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
  //   0 or a negative value on failure,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
  //   The list of the extracted files, with a status of the action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
  //   (see PclZip::listContent() for list entry format)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
  function extract()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
    // ----- Reset the error handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
    $this->privErrorReset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
    // ----- Check archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
    if (!$this->privCheckFormat()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
      return(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
    // ----- Set default values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
    $v_options = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
//    $v_path = "./";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
    $v_path = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
    $v_remove_path = "";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
    $v_remove_all_path = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
    // ----- Look for variable options arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
    $v_size = func_num_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
    // ----- Default values for option
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
    $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
    // ----- Look for arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
    if ($v_size > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
      // ----- Get the arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
      $v_arg_list = func_get_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
      // ----- Look for first arg
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
      if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
        // ----- Parse the options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
        $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
                                            array (PCLZIP_OPT_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
                                                   PCLZIP_OPT_REMOVE_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
                                                   PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
                                                   PCLZIP_OPT_ADD_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
                                                   PCLZIP_CB_PRE_EXTRACT => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
                                                   PCLZIP_CB_POST_EXTRACT => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
                                                   PCLZIP_OPT_SET_CHMOD => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
                                                   PCLZIP_OPT_BY_NAME => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
                                                   PCLZIP_OPT_BY_EREG => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
                                                   PCLZIP_OPT_BY_PREG => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
                                                   PCLZIP_OPT_BY_INDEX => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
                                                   PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
                                                   PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
                                                   PCLZIP_OPT_REPLACE_NEWER => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
                                                   ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
                                                   ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
                                                   PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
                                                   PCLZIP_OPT_TEMP_FILE_ON => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
                                                   PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
												    ));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
        if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
          return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
        // ----- Set the arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
        if (isset($v_options[PCLZIP_OPT_PATH])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
          $v_path = $v_options[PCLZIP_OPT_PATH];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
        if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
          $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
        if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
          $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
        if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
          // ----- Check for '/' in last path char
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
          if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
            $v_path .= '/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
          $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
      // ----- Look for 2 args
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
      // Here we need to support the first historic synopsis of the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
      // method.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
        // ----- Get the first argument
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
        $v_path = $v_arg_list[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
        // ----- Look for the optional second argument
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
        if ($v_size == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
          $v_remove_path = $v_arg_list[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
        else if ($v_size > 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
          // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
          // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
          return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
    // ----- Look for default option values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
    $this->privOptionDefaultThreshold($v_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
    // ----- Trace
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
    // ----- Call the extracting fct
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
    $p_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
    $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
	                                     $v_remove_all_path, $v_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
    if ($v_result < 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
      unset($p_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
      return(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
    return $p_list;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
  // Function :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
  //   extractByIndex($p_index, $p_path="./", $p_remove_path="")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
  //   extractByIndex($p_index, [$p_option, $p_option_value, ...])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
  //   This method supports two synopsis. The first one is historical.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
  //   This method is doing a partial extract of the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
  //   The extracted files or folders are identified by their index in the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
  //   archive (from 0 to n).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
  //   Note that if the index identify a folder, only the folder entry is
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
  //   extracted, not all the files included in the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
  //   $p_index : A single index (integer) or a string of indexes of files to
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
  //              extract. The form of the string is "0,4-6,8-12" with only numbers
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
  //              and '-' for range or ',' to separate ranges. No spaces or ';'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
  //              are allowed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
  //   $p_path : Path where the files and directories are to be extracted
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
  //   $p_remove_path : First part ('root' part) of the memorized path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
  //                    (if any similar) to remove while extracting.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
  // Options :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
  //   PCLZIP_OPT_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
  //   PCLZIP_OPT_ADD_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
  //   PCLZIP_OPT_REMOVE_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
  //   PCLZIP_OPT_REMOVE_ALL_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
  //   PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
  //     not as files.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
  //     The resulting content is in a new field 'content' in the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
  //     structure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
  //     This option must be used alone (any other options are ignored).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
  //   PCLZIP_CB_PRE_EXTRACT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
  //   PCLZIP_CB_POST_EXTRACT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
  //   0 on failure,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
  //   The list of the extracted files, with a status of the action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
  //   (see PclZip::listContent() for list entry format)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
  //function extractByIndex($p_index, options...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
  function extractByIndex($p_index)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
    // ----- Reset the error handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
    $this->privErrorReset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
    // ----- Check archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
    if (!$this->privCheckFormat()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
      return(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
    // ----- Set default values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
    $v_options = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
//    $v_path = "./";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
    $v_path = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
    $v_remove_path = "";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
    $v_remove_all_path = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
    // ----- Look for variable options arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
    $v_size = func_num_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
    // ----- Default values for option
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
    $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
    // ----- Look for arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
    if ($v_size > 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
      // ----- Get the arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
      $v_arg_list = func_get_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
      // ----- Remove form the options list the first argument
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
      array_shift($v_arg_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
      $v_size--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
      // ----- Look for first arg
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
      if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
        // ----- Parse the options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
        $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
                                            array (PCLZIP_OPT_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
                                                   PCLZIP_OPT_REMOVE_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
                                                   PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
                                                   PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
                                                   PCLZIP_OPT_ADD_PATH => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
                                                   PCLZIP_CB_PRE_EXTRACT => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
                                                   PCLZIP_CB_POST_EXTRACT => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
                                                   PCLZIP_OPT_SET_CHMOD => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
                                                   PCLZIP_OPT_REPLACE_NEWER => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
                                                   ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
                                                   ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
                                                   PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
                                                   PCLZIP_OPT_TEMP_FILE_ON => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
                                                   PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
												   ));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
        if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
          return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
        // ----- Set the arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
        if (isset($v_options[PCLZIP_OPT_PATH])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
          $v_path = $v_options[PCLZIP_OPT_PATH];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
        if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
          $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
        if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
          $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
        if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
          // ----- Check for '/' in last path char
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
          if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
            $v_path .= '/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
          $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
        if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
          $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
      // ----- Look for 2 args
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
      // Here we need to support the first historic synopsis of the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
      // method.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
        // ----- Get the first argument
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
        $v_path = $v_arg_list[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
        // ----- Look for the optional second argument
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
        if ($v_size == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
          $v_remove_path = $v_arg_list[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
        else if ($v_size > 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
          // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
          // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
          return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
    // ----- Trace
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
    // ----- Trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
    // Here I want to reuse extractByRule(), so I need to parse the $p_index
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
    // with privParseOptions()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
    $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
    $v_options_trick = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
    $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
                                        array (PCLZIP_OPT_BY_INDEX => 'optional' ));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
    if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
        return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
    $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
    // ----- Look for default option values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
    $this->privOptionDefaultThreshold($v_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
    // ----- Call the extracting fct
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
    if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
        return(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
    return $p_list;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
  // Function :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
  //   delete([$p_option, $p_option_value, ...])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
  //   This method removes files from the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
  //   If no parameters are given, then all the archive is emptied.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
  //   None or optional arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
  // Options :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
  //   PCLZIP_OPT_BY_INDEX :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
  //   PCLZIP_OPT_BY_NAME :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
  //   PCLZIP_OPT_BY_EREG :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
  //   PCLZIP_OPT_BY_PREG :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
  //   0 on failure,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
  //   The list of the files which are still present in the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
  //   (see PclZip::listContent() for list entry format)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
  function delete()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
    // ----- Reset the error handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
    $this->privErrorReset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
    // ----- Check archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
    if (!$this->privCheckFormat()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
      return(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
    // ----- Set default values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
    $v_options = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
    // ----- Look for variable options arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
    $v_size = func_num_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
    // ----- Look for arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
    if ($v_size > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
      // ----- Get the arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
      $v_arg_list = func_get_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
      // ----- Parse the options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
      $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
                                        array (PCLZIP_OPT_BY_NAME => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
                                               PCLZIP_OPT_BY_EREG => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
                                               PCLZIP_OPT_BY_PREG => 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
                                               PCLZIP_OPT_BY_INDEX => 'optional' ));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
      if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
          return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
    // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
    $this->privDisableMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
    // ----- Call the delete fct
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
    $v_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
    if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
      $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
      unset($v_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
      return(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
    // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
    $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
    return $v_list;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
  // Function : deleteByIndex()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
  //   ***** Deprecated *****
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1067
  //   delete(PCLZIP_OPT_BY_INDEX, $p_index) should be preferred.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
  function deleteByIndex($p_index)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
    $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
    return $p_list;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
  // Function : properties()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
  //   This method gives the properties of the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
  //   The properties are :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
  //     nb : Number of files in the archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
  //     comment : Comment associated with the archive file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
  //     status : not_exist, ok
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
  //   None
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
  //   0 on failure,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
  //   An array with the archive properties.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
  function properties()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
    // ----- Reset the error handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
    $this->privErrorReset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
    // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
    $this->privDisableMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
    // ----- Check archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
    if (!$this->privCheckFormat()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
      $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
      return(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
    // ----- Default properties
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
    $v_prop = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
    $v_prop['comment'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
    $v_prop['nb'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
    $v_prop['status'] = 'not_exist';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
    // ----- Look if file exists
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
    if (@is_file($this->zipname))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
      // ----- Open the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
      if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
        $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
        // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
        PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
        // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
        return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1129
      // ----- Read the central directory information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
      $v_central_dir = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
      if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
        $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
        return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
      // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
      // ----- Set the user attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
      $v_prop['comment'] = $v_central_dir['comment'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
      $v_prop['nb'] = $v_central_dir['entries'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
      $v_prop['status'] = 'ok';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
    // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
    $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
    return $v_prop;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
  // Function : duplicate()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
  //   This method creates an archive by copying the content of an other one. If
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
  //   the archive already exist, it is replaced by the new one without any warning.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
  //   $p_archive : The filename of a valid archive, or
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
  //                a valid PclZip object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
  //   1 on success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
  //   0 or a negative value on error (error code).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
  function duplicate($p_archive)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
    $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
    // ----- Reset the error handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
    $this->privErrorReset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
    // ----- Look if the $p_archive is a PclZip object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
    if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
      // ----- Duplicate the archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
      $v_result = $this->privDuplicate($p_archive->zipname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
    // ----- Look if the $p_archive is a string (so a filename)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
    else if (is_string($p_archive))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
      // ----- Check that $p_archive is a valid zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
      // TBC : Should also check the archive format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
      if (!is_file($p_archive)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
        // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
        PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
        $v_result = PCLZIP_ERR_MISSING_FILE;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
        // ----- Duplicate the archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
        $v_result = $this->privDuplicate($p_archive);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
    // ----- Invalid variable
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
    else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
      $v_result = PCLZIP_ERR_INVALID_PARAMETER;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
  // Function : merge()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
  //   This method merge the $p_archive_to_add archive at the end of the current
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
  //   one ($this).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
  //   If the archive ($this) does not exist, the merge becomes a duplicate.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
  //   If the $p_archive_to_add archive does not exist, the merge is a success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
  //   $p_archive_to_add : It can be directly the filename of a valid zip archive,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
  //                       or a PclZip object archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
  //   1 on success,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
  //   0 or negative values on error (see below).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
  function merge($p_archive_to_add)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
    $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
    // ----- Reset the error handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
    $this->privErrorReset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
    // ----- Check archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1233
    if (!$this->privCheckFormat()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
      return(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1237
    // ----- Look if the $p_archive_to_add is a PclZip object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1238
    if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1239
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
      // ----- Merge the archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1242
      $v_result = $this->privMerge($p_archive_to_add);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1243
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1244
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1245
    // ----- Look if the $p_archive_to_add is a string (so a filename)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
    else if (is_string($p_archive_to_add))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1247
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1249
      // ----- Create a temporary archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
      $v_object_archive = new PclZip($p_archive_to_add);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
      // ----- Merge the archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1253
      $v_result = $this->privMerge($v_object_archive);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
    // ----- Invalid variable
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
    else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
      $v_result = PCLZIP_ERR_INVALID_PARAMETER;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1267
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1268
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1269
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1270
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1271
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
  // Function : errorCode()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1274
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1275
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1276
  function errorCode()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
    if (PCLZIP_ERROR_EXTERNAL == 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1279
      return(PclErrorCode());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1280
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1281
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
      return($this->error_code);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
  // Function : errorName()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
  function errorName($p_with_code=false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
    $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
                      PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
                      PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
                      PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
                      PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
                      PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
                      PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
                      PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
                      PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1303
                      PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
                      PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1305
                      PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1306
                      PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1307
                      PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
                      PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
                      PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
                      PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
                      PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
                      PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1313
                      ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1314
                      ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1315
                    );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1316
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
    if (isset($v_name[$this->error_code])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
      $v_value = $v_name[$this->error_code];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
      $v_value = 'NoName';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
    if ($p_with_code) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
      return($v_value.' ('.$this->error_code.')');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
      return($v_value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1331
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
  // Function : errorInfo()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
  function errorInfo($p_full=false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
    if (PCLZIP_ERROR_EXTERNAL == 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
      return(PclErrorString());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1343
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
      if ($p_full) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1345
        return($this->errorName(true)." : ".$this->error_string);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
        return($this->error_string." [code ".$this->error_code."]");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1352
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1355
// --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS *****
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
// *****                                                        *****
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
// *****       THESES FUNCTIONS MUST NOT BE USED DIRECTLY       *****
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1359
// --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1360
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1361
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1362
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
  // Function : privCheckFormat()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
  //   This method check that the archive exists and is a valid zip archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
  //   Several level of check exists. (futur)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
  //   $p_level : Level of check. Default 0.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
  //              0 : Check the first bytes (magic codes) (default value))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
  //              1 : 0 + Check the central directory (futur)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
  //              2 : 1 + Check each file header (futur)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
  //   true on success,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
  //   false on error, the error code is set.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
  function privCheckFormat($p_level=0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
    $v_result = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
	// ----- Reset the file system cache
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
    clearstatcache();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
    // ----- Reset the error handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
    $this->privErrorReset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
    // ----- Look if the file exits
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
    if (!is_file($this->zipname)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
      PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
      return(false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1394
    // ----- Check that the file is readable
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
    if (!is_readable($this->zipname)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
      return(false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
    // ----- Check the magic code
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
    // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
    // ----- Check the central header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
    // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
    // ----- Check each file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
    // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1412
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1413
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1416
  // Function : privParseOptions()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1418
  //   This internal methods reads the variable list of arguments ($p_options_list,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
  //   $p_size) and generate an array with the options and values ($v_result_list).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
  //   $v_requested_options contains the options that can be present and those that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
  //   must be present.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
  //   $v_requested_options is an array, with the option value as key, and 'optional',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
  //   or 'mandatory' as value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
  //   See above.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
  //   1 on success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
  //   0 on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
  function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1434
    // ----- Read the options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1435
    $i=0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1436
    while ($i<$p_size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
      // ----- Check if the option is supported
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
      if (!isset($v_requested_options[$p_options_list[$i]])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
        // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
        PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
        // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
        return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1447
      // ----- Look for next option
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1448
      switch ($p_options_list[$i]) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
        // ----- Look for options that request a path value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
        case PCLZIP_OPT_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
        case PCLZIP_OPT_REMOVE_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
        case PCLZIP_OPT_ADD_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
          // ----- Check the number of parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
          if (($i+1) >= $p_size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1458
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
          // ----- Get the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1463
          $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
          $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1465
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
        case PCLZIP_OPT_TEMP_FILE_THRESHOLD :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
          // ----- Check the number of parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
          if (($i+1) >= $p_size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1471
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
          // ----- Check for incompatible options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1475
          if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
          // ----- Check the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
          $v_value = $p_options_list[$i+1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
          if ((!is_integer($v_value)) || ($v_value<0)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1487
          // ----- Get the value (and convert it in bytes)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
          $v_result_list[$p_options_list[$i]] = $v_value*1048576;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1489
          $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1490
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
        case PCLZIP_OPT_TEMP_FILE_ON :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
          // ----- Check for incompatible options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1494
          if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
          $v_result_list[$p_options_list[$i]] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
        case PCLZIP_OPT_TEMP_FILE_OFF :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
          // ----- Check for incompatible options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
          if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
          // ----- Check for incompatible options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
          if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
          $v_result_list[$p_options_list[$i]] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
        case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
          // ----- Check the number of parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1519
          if (($i+1) >= $p_size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1520
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1521
            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1522
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1525
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1526
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1527
          // ----- Get the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1528
          if (   is_string($p_options_list[$i+1])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
              && ($p_options_list[$i+1] != '')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1530
            $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1531
            $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1533
          else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1534
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1535
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1536
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1537
        // ----- Look for options that request an array of string for value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1538
        case PCLZIP_OPT_BY_NAME :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1539
          // ----- Check the number of parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1540
          if (($i+1) >= $p_size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1541
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1542
            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1543
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1544
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1545
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1546
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1547
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1548
          // ----- Get the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1549
          if (is_string($p_options_list[$i+1])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1550
              $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1551
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1552
          else if (is_array($p_options_list[$i+1])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1553
              $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1554
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1555
          else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1556
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1557
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1558
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1559
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1560
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1561
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1562
          $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
        // ----- Look for options that request an EREG or PREG expression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
        case PCLZIP_OPT_BY_EREG :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
          // ereg() is deprecated starting with PHP 5.3. Move PCLZIP_OPT_BY_EREG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
          // to PCLZIP_OPT_BY_PREG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
          $p_options_list[$i] = PCLZIP_OPT_BY_PREG;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
        case PCLZIP_OPT_BY_PREG :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1571
        //case PCLZIP_OPT_CRYPT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
          // ----- Check the number of parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
          if (($i+1) >= $p_size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1574
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1580
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1581
          // ----- Get the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
          if (is_string($p_options_list[$i+1])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
              $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1585
          else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1587
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1588
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1589
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
          $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
        // ----- Look for options that takes a string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
        case PCLZIP_OPT_COMMENT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
        case PCLZIP_OPT_ADD_COMMENT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
        case PCLZIP_OPT_PREPEND_COMMENT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
          // ----- Check the number of parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1600
          if (($i+1) >= $p_size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1601
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
			                     "Missing parameter value for option '"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
								 .PclZipUtilOptionText($p_options_list[$i])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
								 ."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1608
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1609
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
          // ----- Get the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
          if (is_string($p_options_list[$i+1])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
              $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
          else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1617
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1618
			                     "Wrong parameter value for option '"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1619
								 .PclZipUtilOptionText($p_options_list[$i])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
								 ."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
          $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
        // ----- Look for options that request an array of index
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
        case PCLZIP_OPT_BY_INDEX :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
          // ----- Check the number of parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
          if (($i+1) >= $p_size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1633
            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1635
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1636
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1637
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1638
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1639
          // ----- Get the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
          $v_work_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1641
          if (is_string($p_options_list[$i+1])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
              // ----- Remove spaces
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
              $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
              // ----- Parse items
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
              $v_work_list = explode(",", $p_options_list[$i+1]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
          else if (is_integer($p_options_list[$i+1])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
              $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1651
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
          else if (is_array($p_options_list[$i+1])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
              $v_work_list = $p_options_list[$i+1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1654
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
          else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1659
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1660
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1661
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1662
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
          // ----- Reduce the index list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1664
          // each index item in the list must be a couple with a start and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
          // an end value : [0,3], [5-5], [8-10], ...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
          // ----- Check the format of each item
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
          $v_sort_flag=false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
          $v_sort_value=0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1669
          for ($j=0; $j<sizeof($v_work_list); $j++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1670
              // ----- Explode the item
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1671
              $v_item_list = explode("-", $v_work_list[$j]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
              $v_size_item_list = sizeof($v_item_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1673
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
              // ----- TBC : Here we might check that each item is a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1675
              // real integer ...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1676
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1677
              // ----- Look for single value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1678
              if ($v_size_item_list == 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1679
                  // ----- Set the option value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1680
                  $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1681
                  $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1682
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1683
              elseif ($v_size_item_list == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1684
                  // ----- Set the option value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1685
                  $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
                  $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1687
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
              else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
                  // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
                  PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
                  // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
                  return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
              // ----- Look for list sort
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
              if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
                  $v_sort_flag=true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1700
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1701
                  // ----- TBC : An automatic sort should be written ...
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
                  // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
                  PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1704
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
                  // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1706
                  return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1707
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1708
              $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1710
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
          // ----- Sort the items
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
          if ($v_sort_flag) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
              // TBC : To Be Completed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1714
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1715
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1716
          // ----- Next option
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1717
          $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1718
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1719
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1720
        // ----- Look for options that request no value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1721
        case PCLZIP_OPT_REMOVE_ALL_PATH :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1722
        case PCLZIP_OPT_EXTRACT_AS_STRING :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1723
        case PCLZIP_OPT_NO_COMPRESSION :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1724
        case PCLZIP_OPT_EXTRACT_IN_OUTPUT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1725
        case PCLZIP_OPT_REPLACE_NEWER :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1726
        case PCLZIP_OPT_STOP_ON_ERROR :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1727
          $v_result_list[$p_options_list[$i]] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1728
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1729
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1730
        // ----- Look for options that request an octal value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1731
        case PCLZIP_OPT_SET_CHMOD :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1732
          // ----- Check the number of parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1733
          if (($i+1) >= $p_size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1734
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1735
            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1736
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1737
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1738
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1739
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1740
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1741
          // ----- Get the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1742
          $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1743
          $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1744
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1745
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1746
        // ----- Look for options that request a call-back
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1747
        case PCLZIP_CB_PRE_EXTRACT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1748
        case PCLZIP_CB_POST_EXTRACT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1749
        case PCLZIP_CB_PRE_ADD :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1750
        case PCLZIP_CB_POST_ADD :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
        /* for futur use
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1752
        case PCLZIP_CB_PRE_DELETE :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
        case PCLZIP_CB_POST_DELETE :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
        case PCLZIP_CB_PRE_LIST :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1755
        case PCLZIP_CB_POST_LIST :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
        */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
          // ----- Check the number of parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1758
          if (($i+1) >= $p_size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1760
            PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1765
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
          // ----- Get the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
          $v_function_name = $p_options_list[$i+1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1768
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1769
          // ----- Check that the value is a valid existing function
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1770
          if (!function_exists($v_function_name)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1771
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1772
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1773
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1774
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1775
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1776
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1777
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1778
          // ----- Set the attribute
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1779
          $v_result_list[$p_options_list[$i]] = $v_function_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1780
          $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1781
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1782
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1783
        default :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1784
          // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1785
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1786
		                       "Unknown parameter '"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1787
							   .$p_options_list[$i]."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1788
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1789
          // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1790
          return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1791
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1792
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1793
      // ----- Next options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1794
      $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1795
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1796
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1797
    // ----- Look for mandatory options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1798
    if ($v_requested_options !== false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1799
      for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1800
        // ----- Look for mandatory option
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1801
        if ($v_requested_options[$key] == 'mandatory') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1802
          // ----- Look if present
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1803
          if (!isset($v_result_list[$key])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1804
            // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1805
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1806
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1807
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1808
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1809
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1810
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1811
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1812
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1813
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1814
    // ----- Look for default values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1815
    if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1816
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1817
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1818
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1819
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1820
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1821
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1822
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1823
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1824
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1825
  // Function : privOptionDefaultThreshold()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1826
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1827
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1828
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1829
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1830
  function privOptionDefaultThreshold(&$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1831
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1832
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1833
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1834
    if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1835
        || isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1836
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1837
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1838
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1839
    // ----- Get 'memory_limit' configuration value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1840
    $v_memory_limit = ini_get('memory_limit');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1841
    $v_memory_limit = trim($v_memory_limit);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1842
    $v_memory_limit_int = (int) $v_memory_limit;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1843
    $last = strtolower(substr($v_memory_limit, -1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1844
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1845
    if($last == 'g')
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1846
        //$v_memory_limit_int = $v_memory_limit_int*1024*1024*1024;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1847
        $v_memory_limit_int = $v_memory_limit_int*1073741824;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1848
    if($last == 'm')
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1849
        //$v_memory_limit_int = $v_memory_limit_int*1024*1024;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1850
        $v_memory_limit_int = $v_memory_limit_int*1048576;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1851
    if($last == 'k')
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1852
        $v_memory_limit_int = $v_memory_limit_int*1024;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1853
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1854
    $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit_int*PCLZIP_TEMPORARY_FILE_RATIO);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1855
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1856
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1857
    // ----- Sanity check : No threshold if value lower than 1M
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1858
    if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1859
      unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1860
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1861
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1862
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1863
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1864
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1865
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1866
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1867
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1868
  // Function : privFileDescrParseAtt()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1869
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1870
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1871
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1872
  //   1 on success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1873
  //   0 on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1874
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1875
  function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1876
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1877
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1878
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1879
    // ----- For each file in the list check the attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1880
    foreach ($p_file_list as $v_key => $v_value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1881
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1882
      // ----- Check if the option is supported
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1883
      if (!isset($v_requested_options[$v_key])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1884
        // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1885
        PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1886
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1887
        // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1888
        return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1889
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1890
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1891
      // ----- Look for attribute
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1892
      switch ($v_key) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1893
        case PCLZIP_ATT_FILE_NAME :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1894
          if (!is_string($v_value)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1895
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1896
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1897
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1898
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1899
          $p_filedescr['filename'] = PclZipUtilPathReduction($v_value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1900
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1901
          if ($p_filedescr['filename'] == '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1902
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1903
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1904
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1905
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1906
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1907
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1908
        case PCLZIP_ATT_FILE_NEW_SHORT_NAME :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1909
          if (!is_string($v_value)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1910
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1911
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1912
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1913
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1914
          $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1915
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1916
          if ($p_filedescr['new_short_name'] == '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1917
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1918
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1919
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1920
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1921
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1922
        case PCLZIP_ATT_FILE_NEW_FULL_NAME :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1923
          if (!is_string($v_value)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1924
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1925
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1926
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1927
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1928
          $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1929
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1930
          if ($p_filedescr['new_full_name'] == '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1931
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1932
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1933
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1934
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1935
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1936
        // ----- Look for options that takes a string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1937
        case PCLZIP_ATT_FILE_COMMENT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1938
          if (!is_string($v_value)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1939
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1940
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1941
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1942
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1943
          $p_filedescr['comment'] = $v_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1944
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1945
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1946
        case PCLZIP_ATT_FILE_MTIME :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1947
          if (!is_integer($v_value)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1948
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". Integer expected for attribute '".PclZipUtilOptionText($v_key)."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1949
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1950
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1951
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1952
          $p_filedescr['mtime'] = $v_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1953
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1954
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1955
        case PCLZIP_ATT_FILE_CONTENT :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1956
          $p_filedescr['content'] = $v_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1957
        break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1958
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1959
        default :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1960
          // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1961
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1962
		                           "Unknown parameter '".$v_key."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1963
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1964
          // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1965
          return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1966
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1967
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1968
      // ----- Look for mandatory options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1969
      if ($v_requested_options !== false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1970
        for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1971
          // ----- Look for mandatory option
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1972
          if ($v_requested_options[$key] == 'mandatory') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1973
            // ----- Look if present
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1974
            if (!isset($p_file_list[$key])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1975
              PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1976
              return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1977
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1978
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1979
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1980
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1981
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1982
    // end foreach
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1983
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1984
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1985
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1986
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1987
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1988
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1989
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1990
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1991
  // Function : privFileDescrExpand()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1992
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1993
  //   This method look for each item of the list to see if its a file, a folder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1994
  //   or a string to be added as file. For any other type of files (link, other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1995
  //   just ignore the item.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1996
  //   Then prepare the information that will be stored for that file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1997
  //   When its a folder, expand the folder with all the files that are in that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1998
  //   folder (recursively).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1999
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2000
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2001
  //   1 on success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2002
  //   0 on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2003
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2004
  function privFileDescrExpand(&$p_filedescr_list, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2005
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2006
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2007
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2008
    // ----- Create a result list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2009
    $v_result_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2010
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2011
    // ----- Look each entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2012
    for ($i=0; $i<sizeof($p_filedescr_list); $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2013
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2014
      // ----- Get filedescr
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2015
      $v_descr = $p_filedescr_list[$i];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2016
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2017
      // ----- Reduce the filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2018
      $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename'], false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2019
      $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2020
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2021
      // ----- Look for real file or folder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2022
      if (file_exists($v_descr['filename'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2023
        if (@is_file($v_descr['filename'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2024
          $v_descr['type'] = 'file';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2025
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2026
        else if (@is_dir($v_descr['filename'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2027
          $v_descr['type'] = 'folder';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2028
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2029
        else if (@is_link($v_descr['filename'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2030
          // skip
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2031
          continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2032
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2033
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2034
          // skip
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2035
          continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2036
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2037
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2038
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2039
      // ----- Look for string added as file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2040
      else if (isset($v_descr['content'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2041
        $v_descr['type'] = 'virtual_file';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2042
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2043
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2044
      // ----- Missing file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2045
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2046
        // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2047
        PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$v_descr['filename']."' does not exist");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2048
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2049
        // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2050
        return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2051
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2052
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2053
      // ----- Calculate the stored filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2054
      $this->privCalculateStoredFilename($v_descr, $p_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2055
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2056
      // ----- Add the descriptor in result list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2057
      $v_result_list[sizeof($v_result_list)] = $v_descr;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2058
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2059
      // ----- Look for folder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2060
      if ($v_descr['type'] == 'folder') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2061
        // ----- List of items in folder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2062
        $v_dirlist_descr = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2063
        $v_dirlist_nb = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2064
        if ($v_folder_handler = @opendir($v_descr['filename'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2065
          while (($v_item_handler = @readdir($v_folder_handler)) !== false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2066
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2067
            // ----- Skip '.' and '..'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2068
            if (($v_item_handler == '.') || ($v_item_handler == '..')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2069
                continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2070
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2071
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2072
            // ----- Compose the full filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2073
            $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2074
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2075
            // ----- Look for different stored filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2076
            // Because the name of the folder was changed, the name of the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2077
            // files/sub-folders also change
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2078
            if (($v_descr['stored_filename'] != $v_descr['filename'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2079
                 && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2080
              if ($v_descr['stored_filename'] != '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2081
                $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2082
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2083
              else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2084
                $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2085
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2086
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2087
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2088
            $v_dirlist_nb++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2089
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2090
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2091
          @closedir($v_folder_handler);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2092
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2093
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2094
          // TBC : unable to open folder in read mode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2095
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2096
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2097
        // ----- Expand each element of the list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2098
        if ($v_dirlist_nb != 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2099
          // ----- Expand
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2100
          if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2101
            return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2102
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2103
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2104
          // ----- Concat the resulting list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2105
          $v_result_list = array_merge($v_result_list, $v_dirlist_descr);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2106
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2107
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2108
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2110
        // ----- Free local array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2111
        unset($v_dirlist_descr);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2112
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2113
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2115
    // ----- Get the result list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2116
    $p_filedescr_list = $v_result_list;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2117
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2118
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2119
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2120
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2121
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2122
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2123
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2124
  // Function : privCreate()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2125
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2126
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2127
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2128
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2129
  function privCreate($p_filedescr_list, &$p_result_list, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2130
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2131
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2132
    $v_list_detail = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2133
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2134
    // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2135
    $this->privDisableMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2136
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2137
    // ----- Open the file in write mode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2138
    if (($v_result = $this->privOpenFd('wb')) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2139
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2140
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2141
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2142
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2144
    // ----- Add the list of files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2145
    $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2146
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2147
    // ----- Close
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2148
    $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2149
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2150
    // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2151
    $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2152
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2153
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2154
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2155
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2156
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2157
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2158
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2159
  // Function : privAdd()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2160
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2161
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2162
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2163
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2164
  function privAdd($p_filedescr_list, &$p_result_list, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2165
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2166
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2167
    $v_list_detail = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2168
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2169
    // ----- Look if the archive exists or is empty
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2170
    if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2171
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2172
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2173
      // ----- Do a create
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2174
      $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2175
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2176
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2177
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2178
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2179
    // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2180
    $this->privDisableMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2181
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2182
    // ----- Open the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2183
    if (($v_result=$this->privOpenFd('rb')) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2184
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2185
      // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2186
      $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2187
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2188
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2189
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2190
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2191
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2192
    // ----- Read the central directory information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2193
    $v_central_dir = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2194
    if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2195
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2196
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2197
      $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2198
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2199
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2200
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2201
    // ----- Go to beginning of File
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2202
    @rewind($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2203
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2204
    // ----- Creates a temporary file
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2205
    $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2207
    // ----- Open the temporary file in write mode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2208
    if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2209
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2210
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2211
      $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2212
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2213
      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2214
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2215
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2216
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2217
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2218
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2219
    // ----- Copy the files from the archive to the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2220
    // TBC : Here I should better append the file and go back to erase the central dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2221
    $v_size = $v_central_dir['offset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2222
    while ($v_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2223
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2224
      $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2225
      $v_buffer = fread($this->zip_fd, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2226
      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2227
      $v_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2228
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2229
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2230
    // ----- Swap the file descriptor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2231
    // Here is a trick : I swap the temporary fd with the zip fd, in order to use
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2232
    // the following methods on the temporary fil and not the real archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2233
    $v_swap = $this->zip_fd;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2234
    $this->zip_fd = $v_zip_temp_fd;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2235
    $v_zip_temp_fd = $v_swap;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2236
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2237
    // ----- Add the files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2238
    $v_header_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2239
    if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2240
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2241
      fclose($v_zip_temp_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2242
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2243
      @unlink($v_zip_temp_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2244
      $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2245
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2246
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2247
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2248
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2249
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2250
    // ----- Store the offset of the central dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2251
    $v_offset = @ftell($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2252
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2253
    // ----- Copy the block of file headers from the old archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2254
    $v_size = $v_central_dir['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2255
    while ($v_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2256
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2257
      $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2258
      $v_buffer = @fread($v_zip_temp_fd, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2259
      @fwrite($this->zip_fd, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2260
      $v_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2261
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2262
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2263
    // ----- Create the Central Dir files header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2264
    for ($i=0, $v_count=0; $i<sizeof($v_header_list); $i++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2265
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2266
      // ----- Create the file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2267
      if ($v_header_list[$i]['status'] == 'ok') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2268
        if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2269
          fclose($v_zip_temp_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2270
          $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2271
          @unlink($v_zip_temp_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2272
          $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2273
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2274
          // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2275
          return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2276
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2277
        $v_count++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2278
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2279
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2280
      // ----- Transform the header to a 'usable' info
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2281
      $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2282
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2283
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2284
    // ----- Zip file comment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2285
    $v_comment = $v_central_dir['comment'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2286
    if (isset($p_options[PCLZIP_OPT_COMMENT])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2287
      $v_comment = $p_options[PCLZIP_OPT_COMMENT];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2288
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2289
    if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2290
      $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2291
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2292
    if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2293
      $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2294
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2295
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2296
    // ----- Calculate the size of the central header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2297
    $v_size = @ftell($this->zip_fd)-$v_offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2298
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2299
    // ----- Create the central dir footer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2300
    if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2301
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2302
      // ----- Reset the file list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2303
      unset($v_header_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2304
      $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2305
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2306
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2307
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2308
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2309
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2310
    // ----- Swap back the file descriptor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2311
    $v_swap = $this->zip_fd;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2312
    $this->zip_fd = $v_zip_temp_fd;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2313
    $v_zip_temp_fd = $v_swap;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2314
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2315
    // ----- Close
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2316
    $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2317
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2318
    // ----- Close the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2319
    @fclose($v_zip_temp_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2320
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2321
    // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2322
    $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2323
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2324
    // ----- Delete the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2325
    // TBC : I should test the result ...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2326
    @unlink($this->zipname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2328
    // ----- Rename the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2329
    // TBC : I should test the result ...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2330
    //@rename($v_zip_temp_name, $this->zipname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2331
    PclZipUtilRename($v_zip_temp_name, $this->zipname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2332
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2333
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2334
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2335
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2336
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2337
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2338
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2339
  // Function : privOpenFd()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2340
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2341
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2342
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2343
  function privOpenFd($p_mode)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2344
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2345
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2346
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2347
    // ----- Look if already open
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2348
    if ($this->zip_fd != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2349
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2350
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2351
      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2352
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2353
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2354
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2355
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2356
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2357
    // ----- Open the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2358
    if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2359
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2360
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2361
      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2362
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2363
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2364
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2365
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2366
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2367
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2368
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2369
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2370
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2371
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2372
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2373
  // Function : privCloseFd()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2374
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2375
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2376
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2377
  function privCloseFd()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2378
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2379
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2380
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2381
    if ($this->zip_fd != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2382
      @fclose($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2383
    $this->zip_fd = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2384
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2385
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2386
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2387
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2388
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2389
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2390
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2391
  // Function : privAddList()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2392
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2393
  //   $p_add_dir and $p_remove_dir will give the ability to memorize a path which is
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2394
  //   different from the real path of the file. This is useful if you want to have PclTar
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2395
  //   running in any directory, and memorize relative path from an other directory.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2396
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2397
  //   $p_list : An array containing the file or directory names to add in the tar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2398
  //   $p_result_list : list of added files with their properties (specially the status field)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2399
  //   $p_add_dir : Path to add in the filename path archived
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2400
  //   $p_remove_dir : Path to remove in the filename path archived
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2401
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2402
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2403
//  function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2404
  function privAddList($p_filedescr_list, &$p_result_list, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2405
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2406
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2407
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2408
    // ----- Add the files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2409
    $v_header_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2410
    if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2411
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2412
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2413
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2414
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2415
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2416
    // ----- Store the offset of the central dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2417
    $v_offset = @ftell($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2418
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2419
    // ----- Create the Central Dir files header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2420
    for ($i=0,$v_count=0; $i<sizeof($v_header_list); $i++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2421
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2422
      // ----- Create the file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2423
      if ($v_header_list[$i]['status'] == 'ok') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2424
        if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2425
          // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2426
          return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2427
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2428
        $v_count++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2429
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2430
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2431
      // ----- Transform the header to a 'usable' info
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2432
      $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2433
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2434
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2435
    // ----- Zip file comment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2436
    $v_comment = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2437
    if (isset($p_options[PCLZIP_OPT_COMMENT])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2438
      $v_comment = $p_options[PCLZIP_OPT_COMMENT];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2439
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2440
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2441
    // ----- Calculate the size of the central header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2442
    $v_size = @ftell($this->zip_fd)-$v_offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2443
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2444
    // ----- Create the central dir footer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2445
    if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2446
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2447
      // ----- Reset the file list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2448
      unset($v_header_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2449
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2450
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2451
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2452
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2453
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2454
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2455
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2456
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2457
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2458
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2459
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2460
  // Function : privAddFileList()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2461
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2462
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2463
  //   $p_filedescr_list : An array containing the file description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2464
  //                      or directory names to add in the zip
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2465
  //   $p_result_list : list of added files with their properties (specially the status field)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2466
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2467
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2468
  function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2469
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2470
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2471
    $v_header = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2472
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2473
    // ----- Recuperate the current number of elt in list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2474
    $v_nb = sizeof($p_result_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2475
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2476
    // ----- Loop on the files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2477
    for ($j=0; ($j<sizeof($p_filedescr_list)) && ($v_result==1); $j++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2478
      // ----- Format the filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2479
      $p_filedescr_list[$j]['filename']
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2480
      = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2481
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2482
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2483
      // ----- Skip empty file names
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2484
      // TBC : Can this be possible ? not checked in DescrParseAtt ?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2485
      if ($p_filedescr_list[$j]['filename'] == "") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2486
        continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2487
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2488
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2489
      // ----- Check the filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2490
      if (   ($p_filedescr_list[$j]['type'] != 'virtual_file')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2491
          && (!file_exists($p_filedescr_list[$j]['filename']))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2492
        PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$p_filedescr_list[$j]['filename']."' does not exist");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2493
        return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2494
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2495
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2496
      // ----- Look if it is a file or a dir with no all path remove option
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2497
      // or a dir with all its path removed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2498
//      if (   (is_file($p_filedescr_list[$j]['filename']))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2499
//          || (   is_dir($p_filedescr_list[$j]['filename'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2500
      if (   ($p_filedescr_list[$j]['type'] == 'file')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2501
          || ($p_filedescr_list[$j]['type'] == 'virtual_file')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2502
          || (   ($p_filedescr_list[$j]['type'] == 'folder')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2503
              && (   !isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2504
                  || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2505
          ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2506
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2507
        // ----- Add the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2508
        $v_result = $this->privAddFile($p_filedescr_list[$j], $v_header,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2509
                                       $p_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2510
        if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2511
          return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2512
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2513
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2514
        // ----- Store the file infos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2515
        $p_result_list[$v_nb++] = $v_header;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2516
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2517
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2518
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2519
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2520
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2521
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2522
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2523
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2524
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2525
  // Function : privAddFile()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2526
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2527
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2528
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2529
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2530
  function privAddFile($p_filedescr, &$p_header, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2531
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2532
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2533
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2534
    // ----- Working variable
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2535
    $p_filename = $p_filedescr['filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2536
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2537
    // TBC : Already done in the fileAtt check ... ?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2538
    if ($p_filename == "") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2539
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2540
      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2541
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2542
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2543
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2544
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2545
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2546
    // ----- Look for a stored different filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2547
    /* TBC : Removed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2548
    if (isset($p_filedescr['stored_filename'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2549
      $v_stored_filename = $p_filedescr['stored_filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2550
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2551
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2552
      $v_stored_filename = $p_filedescr['stored_filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2553
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2554
    */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2555
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2556
    // ----- Set the file properties
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2557
    clearstatcache();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2558
    $p_header['version'] = 20;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2559
    $p_header['version_extracted'] = 10;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2560
    $p_header['flag'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2561
    $p_header['compression'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2562
    $p_header['crc'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2563
    $p_header['compressed_size'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2564
    $p_header['filename_len'] = strlen($p_filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2565
    $p_header['extra_len'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2566
    $p_header['disk'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2567
    $p_header['internal'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2568
    $p_header['offset'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2569
    $p_header['filename'] = $p_filename;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2570
// TBC : Removed    $p_header['stored_filename'] = $v_stored_filename;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2571
    $p_header['stored_filename'] = $p_filedescr['stored_filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2572
    $p_header['extra'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2573
    $p_header['status'] = 'ok';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2574
    $p_header['index'] = -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2575
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2576
    // ----- Look for regular file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2577
    if ($p_filedescr['type']=='file') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2578
      $p_header['external'] = 0x00000000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2579
      $p_header['size'] = filesize($p_filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2580
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2581
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2582
    // ----- Look for regular folder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2583
    else if ($p_filedescr['type']=='folder') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2584
      $p_header['external'] = 0x00000010;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2585
      $p_header['mtime'] = filemtime($p_filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2586
      $p_header['size'] = filesize($p_filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2587
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2588
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2589
    // ----- Look for virtual file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2590
    else if ($p_filedescr['type'] == 'virtual_file') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2591
      $p_header['external'] = 0x00000000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2592
      $p_header['size'] = strlen($p_filedescr['content']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2593
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2594
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2595
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2596
    // ----- Look for filetime
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2597
    if (isset($p_filedescr['mtime'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2598
      $p_header['mtime'] = $p_filedescr['mtime'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2599
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2600
    else if ($p_filedescr['type'] == 'virtual_file') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2601
      $p_header['mtime'] = time();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2602
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2603
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2604
      $p_header['mtime'] = filemtime($p_filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2605
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2606
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2607
    // ------ Look for file comment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2608
    if (isset($p_filedescr['comment'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2609
      $p_header['comment_len'] = strlen($p_filedescr['comment']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2610
      $p_header['comment'] = $p_filedescr['comment'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2611
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2612
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2613
      $p_header['comment_len'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2614
      $p_header['comment'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2615
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2616
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2617
    // ----- Look for pre-add callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2618
    if (isset($p_options[PCLZIP_CB_PRE_ADD])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2619
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2620
      // ----- Generate a local information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2621
      $v_local_header = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2622
      $this->privConvertHeader2FileInfo($p_header, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2623
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2624
      // ----- Call the callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2625
      // Here I do not use call_user_func() because I need to send a reference to the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2626
      // header.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2627
      $v_result = $p_options[PCLZIP_CB_PRE_ADD](PCLZIP_CB_PRE_ADD, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2628
      if ($v_result == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2629
        // ----- Change the file status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2630
        $p_header['status'] = "skipped";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2631
        $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2632
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2633
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2634
      // ----- Update the information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2635
      // Only some fields can be modified
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2636
      if ($p_header['stored_filename'] != $v_local_header['stored_filename']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2637
        $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2638
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2639
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2640
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2641
    // ----- Look for empty stored filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2642
    if ($p_header['stored_filename'] == "") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2643
      $p_header['status'] = "filtered";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2644
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2645
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2646
    // ----- Check the path length
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2647
    if (strlen($p_header['stored_filename']) > 0xFF) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2648
      $p_header['status'] = 'filename_too_long';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2649
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2650
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2651
    // ----- Look if no error, or file not skipped
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2652
    if ($p_header['status'] == 'ok') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2653
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2654
      // ----- Look for a file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2655
      if ($p_filedescr['type'] == 'file') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2656
        // ----- Look for using temporary file to zip
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2657
        if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2658
            && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2659
                || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2660
                    && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2661
          $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2662
          if ($v_result < PCLZIP_ERR_NO_ERROR) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2663
            return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2664
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2665
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2666
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2667
        // ----- Use "in memory" zip algo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2668
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2669
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2670
        // ----- Open the source file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2671
        if (($v_file = @fopen($p_filename, "rb")) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2672
          PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2673
          return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2674
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2675
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2676
        // ----- Read the file content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2677
        $v_content = @fread($v_file, $p_header['size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2678
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2679
        // ----- Close the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2680
        @fclose($v_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2681
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2682
        // ----- Calculate the CRC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2683
        $p_header['crc'] = @crc32($v_content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2684
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2685
        // ----- Look for no compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2686
        if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2687
          // ----- Set header parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2688
          $p_header['compressed_size'] = $p_header['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2689
          $p_header['compression'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2690
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2691
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2692
        // ----- Look for normal compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2693
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2694
          // ----- Compress the content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2695
          $v_content = @gzdeflate($v_content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2696
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2697
          // ----- Set header parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2698
          $p_header['compressed_size'] = strlen($v_content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2699
          $p_header['compression'] = 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2700
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2701
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2702
        // ----- Call the header generation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2703
        if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2704
          @fclose($v_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2705
          return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2706
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2707
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2708
        // ----- Write the compressed (or not) content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2709
        @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2710
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2711
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2712
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2713
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2714
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2715
      // ----- Look for a virtual file (a file from string)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2716
      else if ($p_filedescr['type'] == 'virtual_file') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2717
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2718
        $v_content = $p_filedescr['content'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2719
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2720
        // ----- Calculate the CRC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2721
        $p_header['crc'] = @crc32($v_content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2722
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2723
        // ----- Look for no compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2724
        if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2725
          // ----- Set header parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2726
          $p_header['compressed_size'] = $p_header['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2727
          $p_header['compression'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2728
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2729
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2730
        // ----- Look for normal compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2731
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2732
          // ----- Compress the content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2733
          $v_content = @gzdeflate($v_content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2734
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2735
          // ----- Set header parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2736
          $p_header['compressed_size'] = strlen($v_content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2737
          $p_header['compression'] = 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2738
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2739
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2740
        // ----- Call the header generation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2741
        if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2742
          @fclose($v_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2743
          return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2744
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2745
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2746
        // ----- Write the compressed (or not) content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2747
        @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2748
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2749
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2750
      // ----- Look for a directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2751
      else if ($p_filedescr['type'] == 'folder') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2752
        // ----- Look for directory last '/'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2753
        if (@substr($p_header['stored_filename'], -1) != '/') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2754
          $p_header['stored_filename'] .= '/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2755
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2756
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2757
        // ----- Set the file properties
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2758
        $p_header['size'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2759
        //$p_header['external'] = 0x41FF0010;   // Value for a folder : to be checked
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2760
        $p_header['external'] = 0x00000010;   // Value for a folder : to be checked
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2761
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2762
        // ----- Call the header generation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2763
        if (($v_result = $this->privWriteFileHeader($p_header)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2764
        {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2765
          return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2766
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2767
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2768
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2769
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2770
    // ----- Look for post-add callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2771
    if (isset($p_options[PCLZIP_CB_POST_ADD])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2772
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2773
      // ----- Generate a local information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2774
      $v_local_header = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2775
      $this->privConvertHeader2FileInfo($p_header, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2776
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2777
      // ----- Call the callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2778
      // Here I do not use call_user_func() because I need to send a reference to the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2779
      // header.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2780
      $v_result = $p_options[PCLZIP_CB_POST_ADD](PCLZIP_CB_POST_ADD, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2781
      if ($v_result == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2782
        // ----- Ignored
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2783
        $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2784
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2785
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2786
      // ----- Update the information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2787
      // Nothing can be modified
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2788
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2789
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2790
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2791
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2792
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2793
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2794
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2795
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2796
  // Function : privAddFileUsingTempFile()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2797
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2798
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2799
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2800
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2801
  function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2802
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2803
    $v_result=PCLZIP_ERR_NO_ERROR;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2804
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2805
    // ----- Working variable
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2806
    $p_filename = $p_filedescr['filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2807
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2808
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2809
    // ----- Open the source file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2810
    if (($v_file = @fopen($p_filename, "rb")) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2811
      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2812
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2813
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2814
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2815
    // ----- Creates a compressed temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2816
    $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2817
    if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2818
      fclose($v_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2819
      PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2820
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2821
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2822
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2823
    // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2824
    $v_size = filesize($p_filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2825
    while ($v_size != 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2826
      $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2827
      $v_buffer = @fread($v_file, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2828
      //$v_binary_data = pack('a'.$v_read_size, $v_buffer);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2829
      @gzputs($v_file_compressed, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2830
      $v_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2831
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2832
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2833
    // ----- Close the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2834
    @fclose($v_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2835
    @gzclose($v_file_compressed);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2836
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2837
    // ----- Check the minimum file size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2838
    if (filesize($v_gzip_temp_name) < 18) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2839
      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2840
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2841
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2842
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2843
    // ----- Extract the compressed attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2844
    if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2845
      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2846
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2847
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2848
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2849
    // ----- Read the gzip file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2850
    $v_binary_data = @fread($v_file_compressed, 10);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2851
    $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2852
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2853
    // ----- Check some parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2854
    $v_data_header['os'] = bin2hex($v_data_header['os']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2855
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2856
    // ----- Read the gzip file footer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2857
    @fseek($v_file_compressed, filesize($v_gzip_temp_name)-8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2858
    $v_binary_data = @fread($v_file_compressed, 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2859
    $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2860
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2861
    // ----- Set the attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2862
    $p_header['compression'] = ord($v_data_header['cm']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2863
    //$p_header['mtime'] = $v_data_header['mtime'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2864
    $p_header['crc'] = $v_data_footer['crc'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2865
    $p_header['compressed_size'] = filesize($v_gzip_temp_name)-18;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2866
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2867
    // ----- Close the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2868
    @fclose($v_file_compressed);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2869
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2870
    // ----- Call the header generation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2871
    if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2872
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2873
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2874
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2875
    // ----- Add the compressed data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2876
    if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2877
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2878
      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2879
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2880
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2881
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2882
    // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2883
    fseek($v_file_compressed, 10);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2884
    $v_size = $p_header['compressed_size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2885
    while ($v_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2886
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2887
      $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2888
      $v_buffer = @fread($v_file_compressed, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2889
      //$v_binary_data = pack('a'.$v_read_size, $v_buffer);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2890
      @fwrite($this->zip_fd, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2891
      $v_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2892
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2893
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2894
    // ----- Close the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2895
    @fclose($v_file_compressed);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2896
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2897
    // ----- Unlink the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2898
    @unlink($v_gzip_temp_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2899
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2900
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2901
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2902
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2903
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2904
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2905
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2906
  // Function : privCalculateStoredFilename()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2907
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2908
  //   Based on file descriptor properties and global options, this method
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2909
  //   calculate the filename that will be stored in the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2910
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2911
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2912
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2913
  function privCalculateStoredFilename(&$p_filedescr, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2914
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2915
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2916
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2917
    // ----- Working variables
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2918
    $p_filename = $p_filedescr['filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2919
    if (isset($p_options[PCLZIP_OPT_ADD_PATH])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2920
      $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2921
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2922
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2923
      $p_add_dir = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2924
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2925
    if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2926
      $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2927
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2928
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2929
      $p_remove_dir = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2930
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2931
    if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2932
      $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2933
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2934
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2935
      $p_remove_all_dir = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2936
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2937
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2938
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2939
    // ----- Look for full name change
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2940
    if (isset($p_filedescr['new_full_name'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2941
      // ----- Remove drive letter if any
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2942
      $v_stored_filename = PclZipUtilTranslateWinPath($p_filedescr['new_full_name']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2943
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2944
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2945
    // ----- Look for path and/or short name change
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2946
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2947
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2948
      // ----- Look for short name change
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2949
      // Its when we change just the filename but not the path
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2950
      if (isset($p_filedescr['new_short_name'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2951
        $v_path_info = pathinfo($p_filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2952
        $v_dir = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2953
        if ($v_path_info['dirname'] != '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2954
          $v_dir = $v_path_info['dirname'].'/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2955
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2956
        $v_stored_filename = $v_dir.$p_filedescr['new_short_name'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2957
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2958
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2959
        // ----- Calculate the stored filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2960
        $v_stored_filename = $p_filename;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2961
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2962
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2963
      // ----- Look for all path to remove
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2964
      if ($p_remove_all_dir) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2965
        $v_stored_filename = basename($p_filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2966
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2967
      // ----- Look for partial path remove
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2968
      else if ($p_remove_dir != "") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2969
        if (substr($p_remove_dir, -1) != '/')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2970
          $p_remove_dir .= "/";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2971
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2972
        if (   (substr($p_filename, 0, 2) == "./")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2973
            || (substr($p_remove_dir, 0, 2) == "./")) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2974
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2975
          if (   (substr($p_filename, 0, 2) == "./")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2976
              && (substr($p_remove_dir, 0, 2) != "./")) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2977
            $p_remove_dir = "./".$p_remove_dir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2978
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2979
          if (   (substr($p_filename, 0, 2) != "./")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2980
              && (substr($p_remove_dir, 0, 2) == "./")) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2981
            $p_remove_dir = substr($p_remove_dir, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2982
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2983
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2984
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2985
        $v_compare = PclZipUtilPathInclusion($p_remove_dir,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2986
                                             $v_stored_filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2987
        if ($v_compare > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2988
          if ($v_compare == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2989
            $v_stored_filename = "";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2990
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2991
          else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2992
            $v_stored_filename = substr($v_stored_filename,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2993
                                        strlen($p_remove_dir));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2994
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2995
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2996
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2997
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2998
      // ----- Remove drive letter if any
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2999
      $v_stored_filename = PclZipUtilTranslateWinPath($v_stored_filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3000
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3001
      // ----- Look for path to add
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3002
      if ($p_add_dir != "") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3003
        if (substr($p_add_dir, -1) == "/")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3004
          $v_stored_filename = $p_add_dir.$v_stored_filename;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3005
        else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3006
          $v_stored_filename = $p_add_dir."/".$v_stored_filename;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3007
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3008
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3009
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3010
    // ----- Filename (reduce the path of stored name)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3011
    $v_stored_filename = PclZipUtilPathReduction($v_stored_filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3012
    $p_filedescr['stored_filename'] = $v_stored_filename;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3013
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3014
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3015
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3016
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3017
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3018
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3019
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3020
  // Function : privWriteFileHeader()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3021
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3022
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3023
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3024
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3025
  function privWriteFileHeader(&$p_header)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3026
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3027
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3028
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3029
    // ----- Store the offset position of the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3030
    $p_header['offset'] = ftell($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3031
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3032
    // ----- Transform UNIX mtime to DOS format mdate/mtime
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3033
    $v_date = getdate($p_header['mtime']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3034
    $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3035
    $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3036
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3037
    // ----- Packed data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3038
    $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3039
	                      $p_header['version_extracted'], $p_header['flag'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3040
                          $p_header['compression'], $v_mtime, $v_mdate,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3041
                          $p_header['crc'], $p_header['compressed_size'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3042
						  $p_header['size'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3043
                          strlen($p_header['stored_filename']),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3044
						  $p_header['extra_len']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3045
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3046
    // ----- Write the first 148 bytes of the header in the archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3047
    fputs($this->zip_fd, $v_binary_data, 30);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3048
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3049
    // ----- Write the variable fields
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3050
    if (strlen($p_header['stored_filename']) != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3051
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3052
      fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3053
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3054
    if ($p_header['extra_len'] != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3055
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3056
      fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3057
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3058
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3059
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3060
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3061
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3062
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3063
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3064
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3065
  // Function : privWriteCentralFileHeader()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3066
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3067
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3068
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3069
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3070
  function privWriteCentralFileHeader(&$p_header)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3071
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3072
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3073
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3074
    // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3075
    //for(reset($p_header); $key = key($p_header); next($p_header)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3076
    //}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3077
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3078
    // ----- Transform UNIX mtime to DOS format mdate/mtime
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3079
    $v_date = getdate($p_header['mtime']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3080
    $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3081
    $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3082
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3083
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3084
    // ----- Packed data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3085
    $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3086
	                      $p_header['version'], $p_header['version_extracted'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3087
                          $p_header['flag'], $p_header['compression'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3088
						  $v_mtime, $v_mdate, $p_header['crc'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3089
                          $p_header['compressed_size'], $p_header['size'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3090
                          strlen($p_header['stored_filename']),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3091
						  $p_header['extra_len'], $p_header['comment_len'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3092
                          $p_header['disk'], $p_header['internal'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3093
						  $p_header['external'], $p_header['offset']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3094
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3095
    // ----- Write the 42 bytes of the header in the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3096
    fputs($this->zip_fd, $v_binary_data, 46);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3097
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3098
    // ----- Write the variable fields
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3099
    if (strlen($p_header['stored_filename']) != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3100
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3101
      fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3102
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3103
    if ($p_header['extra_len'] != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3104
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3105
      fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3106
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3107
    if ($p_header['comment_len'] != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3108
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3109
      fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3110
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3111
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3112
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3113
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3114
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3115
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3116
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3117
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3118
  // Function : privWriteCentralHeader()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3119
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3120
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3121
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3122
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3123
  function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3124
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3125
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3126
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3127
    // ----- Packed data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3128
    $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3129
	                      $p_nb_entries, $p_size,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3130
						  $p_offset, strlen($p_comment));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3132
    // ----- Write the 22 bytes of the header in the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3133
    fputs($this->zip_fd, $v_binary_data, 22);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3134
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3135
    // ----- Write the variable fields
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3136
    if (strlen($p_comment) != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3137
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3138
      fputs($this->zip_fd, $p_comment, strlen($p_comment));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3139
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3140
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3141
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3142
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3143
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3144
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3145
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3146
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3147
  // Function : privList()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3148
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3149
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3150
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3151
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3152
  function privList(&$p_list)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3153
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3154
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3155
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3156
    // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3157
    $this->privDisableMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3158
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3159
    // ----- Open the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3160
    if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3161
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3162
      // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3163
      $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3164
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3165
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3166
      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3168
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3169
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3170
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3171
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3172
    // ----- Read the central directory information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3173
    $v_central_dir = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3174
    if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3175
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3176
      $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3177
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3178
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3179
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3180
    // ----- Go to beginning of Central Dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3181
    @rewind($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3182
    if (@fseek($this->zip_fd, $v_central_dir['offset']))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3183
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3184
      $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3185
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3186
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3187
      PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3188
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3189
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3190
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3191
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3192
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3193
    // ----- Read each entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3194
    for ($i=0; $i<$v_central_dir['entries']; $i++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3195
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3196
      // ----- Read the file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3197
      if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3198
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3199
        $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3200
        return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3201
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3202
      $v_header['index'] = $i;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3203
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3204
      // ----- Get the only interesting attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3205
      $this->privConvertHeader2FileInfo($v_header, $p_list[$i]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3206
      unset($v_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3207
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3208
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3209
    // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3210
    $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3211
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3212
    // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3213
    $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3214
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3215
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3216
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3217
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3218
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3219
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3220
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3221
  // Function : privConvertHeader2FileInfo()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3222
  // Description :
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3223
  //   This function takes the file information from the central directory
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3224
  //   entries and extract the interesting parameters that will be given back.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3225
  //   The resulting file infos are set in the array $p_info
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3226
  //     $p_info['filename'] : Filename with full path. Given by user (add),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3227
  //                           extracted in the filesystem (extract).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3228
  //     $p_info['stored_filename'] : Stored filename in the archive.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3229
  //     $p_info['size'] = Size of the file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3230
  //     $p_info['compressed_size'] = Compressed size of the file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3231
  //     $p_info['mtime'] = Last modification date of the file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3232
  //     $p_info['comment'] = Comment associated with the file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3233
  //     $p_info['folder'] = true/false : indicates if the entry is a folder or not.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3234
  //     $p_info['status'] = status of the action on the file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3235
  //     $p_info['crc'] = CRC of the file content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3236
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3237
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3238
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3239
  function privConvertHeader2FileInfo($p_header, &$p_info)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3240
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3241
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3242
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3243
    // ----- Get the interesting attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3244
    $v_temp_path = PclZipUtilPathReduction($p_header['filename']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3245
    $p_info['filename'] = $v_temp_path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3246
    $v_temp_path = PclZipUtilPathReduction($p_header['stored_filename']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3247
    $p_info['stored_filename'] = $v_temp_path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3248
    $p_info['size'] = $p_header['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3249
    $p_info['compressed_size'] = $p_header['compressed_size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3250
    $p_info['mtime'] = $p_header['mtime'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3251
    $p_info['comment'] = $p_header['comment'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3252
    $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3253
    $p_info['index'] = $p_header['index'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3254
    $p_info['status'] = $p_header['status'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3255
    $p_info['crc'] = $p_header['crc'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3256
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3257
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3258
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3259
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3260
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3261
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3262
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3263
  // Function : privExtractByRule()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3264
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3265
  //   Extract a file or directory depending of rules (by index, by name, ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3266
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3267
  //   $p_file_list : An array where will be placed the properties of each
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3268
  //                  extracted file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3269
  //   $p_path : Path to add while writing the extracted files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3270
  //   $p_remove_path : Path to remove (from the file memorized path) while writing the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3271
  //                    extracted files. If the path does not match the file path,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3272
  //                    the file is extracted with its memorized path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3273
  //                    $p_remove_path does not apply to 'list' mode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3274
  //                    $p_path and $p_remove_path are commulative.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3275
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3276
  //   1 on success,0 or less on error (see error code list)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3277
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3278
  function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3279
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3280
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3281
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3282
    // ----- Magic quotes trick
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3283
    $this->privDisableMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3284
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3285
    // ----- Check the path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3286
    if (   ($p_path == "")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3287
	    || (   (substr($p_path, 0, 1) != "/")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3288
		    && (substr($p_path, 0, 3) != "../")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3289
			&& (substr($p_path,1,2)!=":/")))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3290
      $p_path = "./".$p_path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3291
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3292
    // ----- Reduce the path last (and duplicated) '/'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3293
    if (($p_path != "./") && ($p_path != "/"))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3294
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3295
      // ----- Look for the path end '/'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3296
      while (substr($p_path, -1) == "/")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3297
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3298
        $p_path = substr($p_path, 0, strlen($p_path)-1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3299
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3300
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3301
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3302
    // ----- Look for path to remove format (should end by /)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3303
    if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3304
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3305
      $p_remove_path .= '/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3306
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3307
    $p_remove_path_size = strlen($p_remove_path);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3308
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3309
    // ----- Open the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3310
    if (($v_result = $this->privOpenFd('rb')) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3311
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3312
      $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3313
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3314
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3315
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3316
    // ----- Read the central directory information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3317
    $v_central_dir = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3318
    if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3319
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3320
      // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3321
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3322
      $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3323
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3324
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3325
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3326
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3327
    // ----- Start at beginning of Central Dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3328
    $v_pos_entry = $v_central_dir['offset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3329
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3330
    // ----- Read each entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3331
    $j_start = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3332
    for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3333
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3334
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3335
      // ----- Read next Central dir entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3336
      @rewind($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3337
      if (@fseek($this->zip_fd, $v_pos_entry))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3338
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3339
        // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3340
        $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3341
        $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3342
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3343
        // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3344
        PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3345
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3346
        // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3347
        return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3348
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3349
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3350
      // ----- Read the file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3351
      $v_header = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3352
      if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3353
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3354
        // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3355
        $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3356
        $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3357
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3358
        return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3359
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3360
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3361
      // ----- Store the index
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3362
      $v_header['index'] = $i;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3363
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3364
      // ----- Store the file position
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3365
      $v_pos_entry = ftell($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3366
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3367
      // ----- Look for the specific extract rules
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3368
      $v_extract = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3369
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3370
      // ----- Look for extract by name rule
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3371
      if (   (isset($p_options[PCLZIP_OPT_BY_NAME]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3372
          && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3373
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3374
          // ----- Look if the filename is in the list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3375
          for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_extract); $j++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3376
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3377
              // ----- Look for a directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3378
              if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3379
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3380
                  // ----- Look if the directory is in the filename path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3381
                  if (   (strlen($v_header['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3382
                      && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3383
                      $v_extract = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3384
                  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3385
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3386
              // ----- Look for a filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3387
              elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3388
                  $v_extract = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3389
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3390
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3391
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3392
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3393
      // ----- Look for extract by ereg rule
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3394
      // ereg() is deprecated with PHP 5.3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3395
      /*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3396
      else if (   (isset($p_options[PCLZIP_OPT_BY_EREG]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3397
               && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3398
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3399
          if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3400
              $v_extract = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3401
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3402
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3403
      */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3404
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3405
      // ----- Look for extract by preg rule
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3406
      else if (   (isset($p_options[PCLZIP_OPT_BY_PREG]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3407
               && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3408
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3409
          if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3410
              $v_extract = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3411
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3412
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3413
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3414
      // ----- Look for extract by index rule
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3415
      else if (   (isset($p_options[PCLZIP_OPT_BY_INDEX]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3416
               && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3417
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3418
          // ----- Look if the index is in the list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3419
          for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_extract); $j++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3420
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3421
              if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3422
                  $v_extract = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3423
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3424
              if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3425
                  $j_start = $j+1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3426
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3427
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3428
              if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3429
                  break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3430
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3431
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3432
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3433
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3434
      // ----- Look for no rule, which means extract all the archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3435
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3436
          $v_extract = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3437
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3438
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3439
	  // ----- Check compression method
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3440
	  if (   ($v_extract)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3441
	      && (   ($v_header['compression'] != 8)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3442
		      && ($v_header['compression'] != 0))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3443
          $v_header['status'] = 'unsupported_compression';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3444
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3445
          // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3446
          if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3447
		      && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3448
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3449
              $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3450
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3451
              PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3452
			                       "Filename '".$v_header['stored_filename']."' is "
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3453
				  	    	  	   ."compressed by an unsupported compression "
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3454
				  	    	  	   ."method (".$v_header['compression'].") ");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3455
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3456
              return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3457
		  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3458
	  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3459
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3460
	  // ----- Check encrypted files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3461
	  if (($v_extract) && (($v_header['flag'] & 1) == 1)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3462
          $v_header['status'] = 'unsupported_encryption';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3463
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3464
          // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3465
          if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3466
		      && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3467
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3468
              $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3469
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3470
              PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3471
			                       "Unsupported encryption for "
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3472
				  	    	  	   ." filename '".$v_header['stored_filename']
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3473
								   ."'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3474
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3475
              return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3476
		  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3477
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3478
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3479
      // ----- Look for real extraction
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3480
      if (($v_extract) && ($v_header['status'] != 'ok')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3481
          $v_result = $this->privConvertHeader2FileInfo($v_header,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3482
		                                        $p_file_list[$v_nb_extracted++]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3483
          if ($v_result != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3484
              $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3485
              $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3486
              return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3487
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3488
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3489
          $v_extract = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3490
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3491
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3492
      // ----- Look for real extraction
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3493
      if ($v_extract)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3494
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3495
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3496
        // ----- Go to the file position
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3497
        @rewind($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3498
        if (@fseek($this->zip_fd, $v_header['offset']))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3499
        {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3500
          // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3501
          $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3502
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3503
          $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3504
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3505
          // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3506
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3507
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3508
          // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3509
          return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3510
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3511
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3512
        // ----- Look for extraction as string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3513
        if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3514
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3515
          $v_string = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3516
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3517
          // ----- Extracting the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3518
          $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3519
          if ($v_result1 < 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3520
            $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3521
            $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3522
            return $v_result1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3523
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3524
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3525
          // ----- Get the only interesting attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3526
          if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3527
          {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3528
            // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3529
            $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3530
            $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3531
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3532
            return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3533
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3534
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3535
          // ----- Set the file content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3536
          $p_file_list[$v_nb_extracted]['content'] = $v_string;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3537
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3538
          // ----- Next extracted file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3539
          $v_nb_extracted++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3540
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3541
          // ----- Look for user callback abort
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3542
          if ($v_result1 == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3543
          	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3544
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3545
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3546
        // ----- Look for extraction in standard output
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3547
        elseif (   (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3548
		        && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3549
          // ----- Extracting the file in standard output
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3550
          $v_result1 = $this->privExtractFileInOutput($v_header, $p_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3551
          if ($v_result1 < 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3552
            $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3553
            $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3554
            return $v_result1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3555
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3556
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3557
          // ----- Get the only interesting attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3558
          if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3559
            $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3560
            $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3561
            return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3562
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3563
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3564
          // ----- Look for user callback abort
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3565
          if ($v_result1 == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3566
          	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3567
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3568
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3569
        // ----- Look for normal extraction
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3570
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3571
          // ----- Extracting the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3572
          $v_result1 = $this->privExtractFile($v_header,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3573
		                                      $p_path, $p_remove_path,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3574
											  $p_remove_all_path,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3575
											  $p_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3576
          if ($v_result1 < 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3577
            $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3578
            $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3579
            return $v_result1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3580
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3581
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3582
          // ----- Get the only interesting attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3583
          if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3584
          {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3585
            // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3586
            $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3587
            $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3588
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3589
            return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3590
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3591
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3592
          // ----- Look for user callback abort
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3593
          if ($v_result1 == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3594
          	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3595
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3596
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3597
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3598
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3599
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3600
    // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3601
    $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3602
    $this->privSwapBackMagicQuotes();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3603
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3604
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3605
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3606
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3607
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3608
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3609
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3610
  // Function : privExtractFile()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3611
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3612
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3613
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3614
  //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3615
  // 1 : ... ?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3616
  // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3617
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3618
  function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3619
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3620
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3621
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3622
    // ----- Read the file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3623
    if (($v_result = $this->privReadFileHeader($v_header)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3624
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3625
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3626
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3627
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3628
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3629
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3630
    // ----- Check that the file header is coherent with $p_entry info
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3631
    if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3632
        // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3633
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3634
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3635
    // ----- Look for all path to remove
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3636
    if ($p_remove_all_path == true) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3637
        // ----- Look for folder entry that not need to be extracted
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3638
        if (($p_entry['external']&0x00000010)==0x00000010) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3639
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3640
            $p_entry['status'] = "filtered";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3641
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3642
            return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3643
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3644
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3645
        // ----- Get the basename of the path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3646
        $p_entry['filename'] = basename($p_entry['filename']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3647
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3648
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3649
    // ----- Look for path to remove
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3650
    else if ($p_remove_path != "")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3651
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3652
      if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3653
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3654
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3655
        // ----- Change the file status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3656
        $p_entry['status'] = "filtered";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3657
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3658
        // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3659
        return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3660
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3661
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3662
      $p_remove_path_size = strlen($p_remove_path);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3663
      if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3664
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3665
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3666
        // ----- Remove the path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3667
        $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3668
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3669
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3670
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3671
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3672
    // ----- Add the path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3673
    if ($p_path != '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3674
      $p_entry['filename'] = $p_path."/".$p_entry['filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3675
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3676
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3677
    // ----- Check a base_dir_restriction
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3678
    if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3679
      $v_inclusion
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3680
      = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3681
                                $p_entry['filename']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3682
      if ($v_inclusion == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3683
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3684
        PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3685
			                     "Filename '".$p_entry['filename']."' is "
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3686
								 ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3687
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3688
        return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3689
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3690
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3691
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3692
    // ----- Look for pre-extract callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3693
    if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3694
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3695
      // ----- Generate a local information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3696
      $v_local_header = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3697
      $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3698
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3699
      // ----- Call the callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3700
      // Here I do not use call_user_func() because I need to send a reference to the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3701
      // header.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3702
      $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3703
      if ($v_result == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3704
        // ----- Change the file status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3705
        $p_entry['status'] = "skipped";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3706
        $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3707
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3708
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3709
      // ----- Look for abort result
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3710
      if ($v_result == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3711
        // ----- This status is internal and will be changed in 'skipped'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3712
        $p_entry['status'] = "aborted";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3713
      	$v_result = PCLZIP_ERR_USER_ABORTED;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3714
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3715
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3716
      // ----- Update the information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3717
      // Only some fields can be modified
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3718
      $p_entry['filename'] = $v_local_header['filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3719
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3720
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3721
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3722
    // ----- Look if extraction should be done
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3723
    if ($p_entry['status'] == 'ok') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3724
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3725
    // ----- Look for specific actions while the file exist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3726
    if (file_exists($p_entry['filename']))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3727
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3728
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3729
      // ----- Look if file is a directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3730
      if (is_dir($p_entry['filename']))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3731
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3732
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3733
        // ----- Change the file status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3734
        $p_entry['status'] = "already_a_directory";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3735
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3736
        // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3737
        // For historical reason first PclZip implementation does not stop
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3738
        // when this kind of error occurs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3739
        if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3740
		    && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3741
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3742
            PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3743
			                     "Filename '".$p_entry['filename']."' is "
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3744
								 ."already used by an existing directory");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3745
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3746
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3747
		    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3748
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3749
      // ----- Look if file is write protected
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3750
      else if (!is_writeable($p_entry['filename']))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3751
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3752
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3753
        // ----- Change the file status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3754
        $p_entry['status'] = "write_protected";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3755
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3756
        // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3757
        // For historical reason first PclZip implementation does not stop
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3758
        // when this kind of error occurs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3759
        if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3760
		    && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3761
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3762
            PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3763
			                     "Filename '".$p_entry['filename']."' exists "
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3764
								 ."and is write protected");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3765
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3766
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3767
		    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3768
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3769
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3770
      // ----- Look if the extracted file is older
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3771
      else if (filemtime($p_entry['filename']) > $p_entry['mtime'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3772
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3773
        // ----- Change the file status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3774
        if (   (isset($p_options[PCLZIP_OPT_REPLACE_NEWER]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3775
		    && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3776
	  	  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3777
		    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3778
            $p_entry['status'] = "newer_exist";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3779
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3780
            // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3781
            // For historical reason first PclZip implementation does not stop
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3782
            // when this kind of error occurs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3783
            if (   (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3784
		        && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3785
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3786
                PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3787
			             "Newer version of '".$p_entry['filename']."' exists "
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3788
					    ."and option PCLZIP_OPT_REPLACE_NEWER is not selected");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3789
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3790
                return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3791
		      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3792
		    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3793
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3794
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3795
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3796
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3797
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3798
    // ----- Check the directory availability and create it if necessary
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3799
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3800
      if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3801
        $v_dir_to_check = $p_entry['filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3802
      else if (!strstr($p_entry['filename'], "/"))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3803
        $v_dir_to_check = "";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3804
      else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3805
        $v_dir_to_check = dirname($p_entry['filename']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3806
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3807
        if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3808
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3809
          // ----- Change the file status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3810
          $p_entry['status'] = "path_creation_fail";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3811
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3812
          // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3813
          //return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3814
          $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3815
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3816
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3817
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3818
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3819
    // ----- Look if extraction should be done
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3820
    if ($p_entry['status'] == 'ok') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3821
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3822
      // ----- Do the extraction (if not a folder)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3823
      if (!(($p_entry['external']&0x00000010)==0x00000010))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3824
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3825
        // ----- Look for not compressed file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3826
        if ($p_entry['compression'] == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3827
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3828
    		  // ----- Opening destination file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3829
          if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3830
          {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3831
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3832
            // ----- Change the file status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3833
            $p_entry['status'] = "write_error";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3834
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3835
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3836
            return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3837
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3838
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3839
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3840
          // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3841
          $v_size = $p_entry['compressed_size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3842
          while ($v_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3843
          {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3844
            $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3845
            $v_buffer = @fread($this->zip_fd, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3846
            /* Try to speed up the code
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3847
            $v_binary_data = pack('a'.$v_read_size, $v_buffer);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3848
            @fwrite($v_dest_file, $v_binary_data, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3849
            */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3850
            @fwrite($v_dest_file, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3851
            $v_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3852
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3853
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3854
          // ----- Closing the destination file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3855
          fclose($v_dest_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3856
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3857
          // ----- Change the file mtime
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3858
          touch($p_entry['filename'], $p_entry['mtime']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3859
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3860
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3861
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3862
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3863
          // ----- TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3864
          // Need to be finished
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3865
          if (($p_entry['flag'] & 1) == 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3866
            PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, 'File \''.$p_entry['filename'].'\' is encrypted. Encrypted files are not supported.');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3867
            return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3868
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3869
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3870
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3871
          // ----- Look for using temporary file to unzip
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3872
          if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3873
              && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3874
                  || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3875
                      && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3876
            $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3877
            if ($v_result < PCLZIP_ERR_NO_ERROR) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3878
              return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3879
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3880
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3881
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3882
          // ----- Look for extract in memory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3883
          else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3884
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3885
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3886
            // ----- Read the compressed file in a buffer (one shot)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3887
            $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3888
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3889
            // ----- Decompress the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3890
            $v_file_content = @gzinflate($v_buffer);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3891
            unset($v_buffer);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3892
            if ($v_file_content === FALSE) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3893
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3894
              // ----- Change the file status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3895
              // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3896
              $p_entry['status'] = "error";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3897
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3898
              return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3899
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3900
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3901
            // ----- Opening destination file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3902
            if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3903
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3904
              // ----- Change the file status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3905
              $p_entry['status'] = "write_error";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3906
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3907
              return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3908
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3909
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3910
            // ----- Write the uncompressed data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3911
            @fwrite($v_dest_file, $v_file_content, $p_entry['size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3912
            unset($v_file_content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3913
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3914
            // ----- Closing the destination file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3915
            @fclose($v_dest_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3916
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3917
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3918
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3919
          // ----- Change the file mtime
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3920
          @touch($p_entry['filename'], $p_entry['mtime']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3921
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3922
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3923
        // ----- Look for chmod option
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3924
        if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3925
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3926
          // ----- Change the mode of the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3927
          @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3928
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3929
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3930
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3931
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3932
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3933
  	// ----- Change abort status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3934
  	if ($p_entry['status'] == "aborted") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3935
        $p_entry['status'] = "skipped";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3936
  	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3937
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3938
    // ----- Look for post-extract callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3939
    elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3940
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3941
      // ----- Generate a local information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3942
      $v_local_header = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3943
      $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3944
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3945
      // ----- Call the callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3946
      // Here I do not use call_user_func() because I need to send a reference to the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3947
      // header.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3948
      $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3949
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3950
      // ----- Look for abort result
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3951
      if ($v_result == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3952
      	$v_result = PCLZIP_ERR_USER_ABORTED;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3953
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3954
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3955
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3956
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3957
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3958
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3959
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3960
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3961
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3962
  // Function : privExtractFileUsingTempFile()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3963
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3964
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3965
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3966
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3967
  function privExtractFileUsingTempFile(&$p_entry, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3968
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3969
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3970
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3971
    // ----- Creates a temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3972
    $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3973
    if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3974
      fclose($v_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3975
      PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3976
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3977
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3978
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3979
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3980
    // ----- Write gz file format header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3981
    $v_binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($p_entry['compression']), Chr(0x00), time(), Chr(0x00), Chr(3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3982
    @fwrite($v_dest_file, $v_binary_data, 10);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3983
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3984
    // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3985
    $v_size = $p_entry['compressed_size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3986
    while ($v_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3987
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3988
      $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3989
      $v_buffer = @fread($this->zip_fd, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3990
      //$v_binary_data = pack('a'.$v_read_size, $v_buffer);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3991
      @fwrite($v_dest_file, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3992
      $v_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3993
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3994
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3995
    // ----- Write gz file format footer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3996
    $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3997
    @fwrite($v_dest_file, $v_binary_data, 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3998
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3999
    // ----- Close the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4000
    @fclose($v_dest_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4001
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4002
    // ----- Opening destination file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4003
    if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4004
      $p_entry['status'] = "write_error";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4005
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4006
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4007
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4008
    // ----- Open the temporary gz file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4009
    if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4010
      @fclose($v_dest_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4011
      $p_entry['status'] = "read_error";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4012
      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4013
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4014
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4015
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4016
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4017
    // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4018
    $v_size = $p_entry['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4019
    while ($v_size != 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4020
      $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4021
      $v_buffer = @gzread($v_src_file, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4022
      //$v_binary_data = pack('a'.$v_read_size, $v_buffer);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4023
      @fwrite($v_dest_file, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4024
      $v_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4025
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4026
    @fclose($v_dest_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4027
    @gzclose($v_src_file);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4028
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4029
    // ----- Delete the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4030
    @unlink($v_gzip_temp_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4031
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4032
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4033
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4034
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4035
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4036
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4037
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4038
  // Function : privExtractFileInOutput()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4039
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4040
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4041
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4042
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4043
  function privExtractFileInOutput(&$p_entry, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4044
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4045
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4046
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4047
    // ----- Read the file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4048
    if (($v_result = $this->privReadFileHeader($v_header)) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4049
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4050
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4051
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4052
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4053
    // ----- Check that the file header is coherent with $p_entry info
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4054
    if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4055
        // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4056
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4057
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4058
    // ----- Look for pre-extract callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4059
    if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4060
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4061
      // ----- Generate a local information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4062
      $v_local_header = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4063
      $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4064
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4065
      // ----- Call the callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4066
      // Here I do not use call_user_func() because I need to send a reference to the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4067
      // header.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4068
//      eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4069
      $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4070
      if ($v_result == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4071
        // ----- Change the file status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4072
        $p_entry['status'] = "skipped";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4073
        $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4074
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4075
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4076
      // ----- Look for abort result
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4077
      if ($v_result == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4078
        // ----- This status is internal and will be changed in 'skipped'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4079
        $p_entry['status'] = "aborted";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4080
      	$v_result = PCLZIP_ERR_USER_ABORTED;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4081
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4082
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  4083
      // ----- Update the information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4084
      // Only some fields can be modified
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4085
      $p_entry['filename'] = $v_local_header['filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4086
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4087
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4088
    // ----- Trace
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4089
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4090
    // ----- Look if extraction should be done
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4091
    if ($p_entry['status'] == 'ok') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4092
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4093
      // ----- Do the extraction (if not a folder)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4094
      if (!(($p_entry['external']&0x00000010)==0x00000010)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4095
        // ----- Look for not compressed file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4096
        if ($p_entry['compressed_size'] == $p_entry['size']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4097
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4098
          // ----- Read the file in a buffer (one shot)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4099
          $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4100
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4101
          // ----- Send the file to the output
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4102
          echo $v_buffer;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4103
          unset($v_buffer);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4104
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4105
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4106
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4107
          // ----- Read the compressed file in a buffer (one shot)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4108
          $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4110
          // ----- Decompress the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4111
          $v_file_content = gzinflate($v_buffer);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4112
          unset($v_buffer);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4113
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4114
          // ----- Send the file to the output
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4115
          echo $v_file_content;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4116
          unset($v_file_content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4117
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4118
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4119
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4120
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4121
	// ----- Change abort status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4122
	if ($p_entry['status'] == "aborted") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4123
      $p_entry['status'] = "skipped";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4124
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4125
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4126
    // ----- Look for post-extract callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4127
    elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4128
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4129
      // ----- Generate a local information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4130
      $v_local_header = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4131
      $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4132
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4133
      // ----- Call the callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4134
      // Here I do not use call_user_func() because I need to send a reference to the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4135
      // header.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4136
      $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4137
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4138
      // ----- Look for abort result
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4139
      if ($v_result == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4140
      	$v_result = PCLZIP_ERR_USER_ABORTED;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4141
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4142
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4144
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4145
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4146
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4147
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4148
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4149
  // Function : privExtractFileAsString()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4150
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4151
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4152
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4153
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4154
  function privExtractFileAsString(&$p_entry, &$p_string, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4155
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4156
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4157
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4158
    // ----- Read the file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4159
    $v_header = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4160
    if (($v_result = $this->privReadFileHeader($v_header)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4161
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4162
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4163
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4164
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4165
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4166
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4167
    // ----- Check that the file header is coherent with $p_entry info
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4168
    if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4169
        // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4170
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4171
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4172
    // ----- Look for pre-extract callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4173
    if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4174
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4175
      // ----- Generate a local information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4176
      $v_local_header = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4177
      $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4178
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4179
      // ----- Call the callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4180
      // Here I do not use call_user_func() because I need to send a reference to the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4181
      // header.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4182
      $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4183
      if ($v_result == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4184
        // ----- Change the file status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4185
        $p_entry['status'] = "skipped";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4186
        $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4187
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4188
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4189
      // ----- Look for abort result
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4190
      if ($v_result == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4191
        // ----- This status is internal and will be changed in 'skipped'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4192
        $p_entry['status'] = "aborted";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4193
      	$v_result = PCLZIP_ERR_USER_ABORTED;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4194
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4195
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  4196
      // ----- Update the information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4197
      // Only some fields can be modified
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4198
      $p_entry['filename'] = $v_local_header['filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4199
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4200
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4201
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4202
    // ----- Look if extraction should be done
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4203
    if ($p_entry['status'] == 'ok') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4204
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4205
      // ----- Do the extraction (if not a folder)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4206
      if (!(($p_entry['external']&0x00000010)==0x00000010)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4207
        // ----- Look for not compressed file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4208
  //      if ($p_entry['compressed_size'] == $p_entry['size'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4209
        if ($p_entry['compression'] == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4210
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4211
          // ----- Reading the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4212
          $p_string = @fread($this->zip_fd, $p_entry['compressed_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4213
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4214
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4215
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4216
          // ----- Reading the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4217
          $v_data = @fread($this->zip_fd, $p_entry['compressed_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4218
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4219
          // ----- Decompress the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4220
          if (($p_string = @gzinflate($v_data)) === FALSE) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4221
              // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4222
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4223
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4224
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4225
        // ----- Trace
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4226
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4227
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4228
          // TBC : error : can not extract a folder in a string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4229
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4230
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4231
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4232
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4233
  	// ----- Change abort status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4234
  	if ($p_entry['status'] == "aborted") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4235
        $p_entry['status'] = "skipped";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4236
  	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4237
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4238
    // ----- Look for post-extract callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4239
    elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4240
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4241
      // ----- Generate a local information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4242
      $v_local_header = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4243
      $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4244
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4245
      // ----- Swap the content to header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4246
      $v_local_header['content'] = $p_string;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4247
      $p_string = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4249
      // ----- Call the callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4250
      // Here I do not use call_user_func() because I need to send a reference to the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4251
      // header.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4252
      $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4253
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4254
      // ----- Swap back the content to header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4255
      $p_string = $v_local_header['content'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4256
      unset($v_local_header['content']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4257
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4258
      // ----- Look for abort result
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4259
      if ($v_result == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4260
      	$v_result = PCLZIP_ERR_USER_ABORTED;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4261
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4262
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4264
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4265
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4266
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4267
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4268
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4269
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4270
  // Function : privReadFileHeader()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4271
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4272
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4273
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4274
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4275
  function privReadFileHeader(&$p_header)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4276
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4277
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4278
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4279
    // ----- Read the 4 bytes signature
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4280
    $v_binary_data = @fread($this->zip_fd, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4281
    $v_data = unpack('Vid', $v_binary_data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4282
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4283
    // ----- Check signature
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4284
    if ($v_data['id'] != 0x04034b50)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4285
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4286
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4287
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4288
      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4289
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4290
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4291
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4292
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4293
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4294
    // ----- Read the first 42 bytes of the header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4295
    $v_binary_data = fread($this->zip_fd, 26);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4296
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4297
    // ----- Look for invalid block size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4298
    if (strlen($v_binary_data) != 26)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4299
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4300
      $p_header['filename'] = "";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4301
      $p_header['status'] = "invalid_header";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4302
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4303
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4304
      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4305
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4306
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4307
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4308
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4309
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4310
    // ----- Extract the values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4311
    $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4312
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4313
    // ----- Get filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4314
    $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4315
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4316
    // ----- Get extra_fields
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4317
    if ($v_data['extra_len'] != 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4318
      $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4319
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4320
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4321
      $p_header['extra'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4322
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4323
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4324
    // ----- Extract properties
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4325
    $p_header['version_extracted'] = $v_data['version'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4326
    $p_header['compression'] = $v_data['compression'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4327
    $p_header['size'] = $v_data['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4328
    $p_header['compressed_size'] = $v_data['compressed_size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4329
    $p_header['crc'] = $v_data['crc'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4330
    $p_header['flag'] = $v_data['flag'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4331
    $p_header['filename_len'] = $v_data['filename_len'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4332
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4333
    // ----- Recuperate date in UNIX format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4334
    $p_header['mdate'] = $v_data['mdate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4335
    $p_header['mtime'] = $v_data['mtime'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4336
    if ($p_header['mdate'] && $p_header['mtime'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4337
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4338
      // ----- Extract time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4339
      $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4340
      $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4341
      $v_seconde = ($p_header['mtime'] & 0x001F)*2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4342
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4343
      // ----- Extract date
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4344
      $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4345
      $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4346
      $v_day = $p_header['mdate'] & 0x001F;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4347
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4348
      // ----- Get UNIX date format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4349
      $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4350
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4351
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4352
    else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4353
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4354
      $p_header['mtime'] = time();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4355
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4356
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4357
    // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4358
    //for(reset($v_data); $key = key($v_data); next($v_data)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4359
    //}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4360
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4361
    // ----- Set the stored filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4362
    $p_header['stored_filename'] = $p_header['filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4363
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4364
    // ----- Set the status field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4365
    $p_header['status'] = "ok";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4366
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4367
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4368
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4369
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4370
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4371
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4372
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4373
  // Function : privReadCentralFileHeader()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4374
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4375
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4376
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4377
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4378
  function privReadCentralFileHeader(&$p_header)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4379
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4380
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4381
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4382
    // ----- Read the 4 bytes signature
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4383
    $v_binary_data = @fread($this->zip_fd, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4384
    $v_data = unpack('Vid', $v_binary_data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4386
    // ----- Check signature
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4387
    if ($v_data['id'] != 0x02014b50)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4388
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4389
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4390
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4391
      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4392
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4393
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4394
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4395
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4396
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4397
    // ----- Read the first 42 bytes of the header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4398
    $v_binary_data = fread($this->zip_fd, 42);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4399
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4400
    // ----- Look for invalid block size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4401
    if (strlen($v_binary_data) != 42)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4402
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4403
      $p_header['filename'] = "";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4404
      $p_header['status'] = "invalid_header";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4405
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4406
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4407
      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4408
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4409
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4410
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4411
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4412
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4413
    // ----- Extract the values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4414
    $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4415
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4416
    // ----- Get filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4417
    if ($p_header['filename_len'] != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4418
      $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4419
    else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4420
      $p_header['filename'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4421
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4422
    // ----- Get extra
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4423
    if ($p_header['extra_len'] != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4424
      $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4425
    else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4426
      $p_header['extra'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4427
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4428
    // ----- Get comment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4429
    if ($p_header['comment_len'] != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4430
      $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4431
    else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4432
      $p_header['comment'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4433
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4434
    // ----- Extract properties
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4435
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4436
    // ----- Recuperate date in UNIX format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4437
    //if ($p_header['mdate'] && $p_header['mtime'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4438
    // TBC : bug : this was ignoring time with 0/0/0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4439
    if (1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4440
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4441
      // ----- Extract time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4442
      $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4443
      $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4444
      $v_seconde = ($p_header['mtime'] & 0x001F)*2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4445
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4446
      // ----- Extract date
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4447
      $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4448
      $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4449
      $v_day = $p_header['mdate'] & 0x001F;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4450
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4451
      // ----- Get UNIX date format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4452
      $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4453
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4454
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4455
    else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4456
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4457
      $p_header['mtime'] = time();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4458
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4459
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4460
    // ----- Set the stored filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4461
    $p_header['stored_filename'] = $p_header['filename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4462
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4463
    // ----- Set default status to ok
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4464
    $p_header['status'] = 'ok';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4465
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4466
    // ----- Look if it is a directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4467
    if (substr($p_header['filename'], -1) == '/') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4468
      //$p_header['external'] = 0x41FF0010;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4469
      $p_header['external'] = 0x00000010;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4470
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4471
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4472
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4473
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4474
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4475
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4476
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4477
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4478
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4479
  // Function : privCheckFileHeaders()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4480
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4481
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4482
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4483
  //   1 on success,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4484
  //   0 on error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4485
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4486
  function privCheckFileHeaders(&$p_local_header, &$p_central_header)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4487
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4488
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4489
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4490
  	// ----- Check the static values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4491
  	// TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4492
  	if ($p_local_header['filename'] != $p_central_header['filename']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4493
  	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4494
  	if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4495
  	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4496
  	if ($p_local_header['flag'] != $p_central_header['flag']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4497
  	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4498
  	if ($p_local_header['compression'] != $p_central_header['compression']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4499
  	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4500
  	if ($p_local_header['mtime'] != $p_central_header['mtime']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4501
  	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4502
  	if ($p_local_header['filename_len'] != $p_central_header['filename_len']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4503
  	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4504
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4505
  	// ----- Look for flag bit 3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4506
  	if (($p_local_header['flag'] & 8) == 8) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4507
          $p_local_header['size'] = $p_central_header['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4508
          $p_local_header['compressed_size'] = $p_central_header['compressed_size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4509
          $p_local_header['crc'] = $p_central_header['crc'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4510
  	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4511
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4512
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4513
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4514
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4515
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4516
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4517
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4518
  // Function : privReadEndCentralDir()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4519
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4520
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4521
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4522
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4523
  function privReadEndCentralDir(&$p_central_dir)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4524
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4525
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4526
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4527
    // ----- Go to the end of the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4528
    $v_size = filesize($this->zipname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4529
    @fseek($this->zip_fd, $v_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4530
    if (@ftell($this->zip_fd) != $v_size)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4531
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4532
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4533
      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\'');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4534
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4535
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4536
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4537
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4538
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4539
    // ----- First try : look if this is an archive with no commentaries (most of the time)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4540
    // in this case the end of central dir is at 22 bytes of the file end
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4541
    $v_found = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4542
    if ($v_size > 26) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4543
      @fseek($this->zip_fd, $v_size-22);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4544
      if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4545
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4546
        // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4547
        PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4548
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4549
        // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4550
        return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4551
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4552
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4553
      // ----- Read for bytes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4554
      $v_binary_data = @fread($this->zip_fd, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4555
      $v_data = @unpack('Vid', $v_binary_data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4556
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4557
      // ----- Check signature
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4558
      if ($v_data['id'] == 0x06054b50) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4559
        $v_found = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4560
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4561
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4562
      $v_pos = ftell($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4563
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4565
    // ----- Go back to the maximum possible size of the Central Dir End Record
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4566
    if (!$v_found) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4567
      $v_maximum_size = 65557; // 0xFFFF + 22;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4568
      if ($v_maximum_size > $v_size)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4569
        $v_maximum_size = $v_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4570
      @fseek($this->zip_fd, $v_size-$v_maximum_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4571
      if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4572
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4573
        // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4574
        PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4575
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4576
        // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4577
        return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4578
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4579
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4580
      // ----- Read byte per byte in order to find the signature
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4581
      $v_pos = ftell($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4582
      $v_bytes = 0x00000000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4583
      while ($v_pos < $v_size)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4584
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4585
        // ----- Read a byte
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4586
        $v_byte = @fread($this->zip_fd, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4587
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4588
        // -----  Add the byte
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4589
        //$v_bytes = ($v_bytes << 8) | Ord($v_byte);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4590
        // Note we mask the old value down such that once shifted we can never end up with more than a 32bit number
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4591
        // Otherwise on systems where we have 64bit integers the check below for the magic number will fail.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4592
        $v_bytes = ( ($v_bytes & 0xFFFFFF) << 8) | Ord($v_byte);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4593
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4594
        // ----- Compare the bytes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4595
        if ($v_bytes == 0x504b0506)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4596
        {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4597
          $v_pos++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4598
          break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4599
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4600
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4601
        $v_pos++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4602
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4603
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4604
      // ----- Look if not found end of central dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4605
      if ($v_pos == $v_size)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4606
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4607
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4608
        // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4609
        PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4610
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4611
        // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4612
        return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4613
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4614
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4615
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4616
    // ----- Read the first 18 bytes of the header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4617
    $v_binary_data = fread($this->zip_fd, 18);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4618
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4619
    // ----- Look for invalid block size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4620
    if (strlen($v_binary_data) != 18)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4621
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4622
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4623
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4624
      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4625
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4626
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4627
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4628
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4629
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4630
    // ----- Extract the values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4631
    $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4632
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4633
    // ----- Check the global size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4634
    if (($v_pos + $v_data['comment_size'] + 18) != $v_size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4635
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4636
	  // ----- Removed in release 2.2 see readme file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4637
	  // The check of the file size is a little too strict.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4638
	  // Some bugs where found when a zip is encrypted/decrypted with 'crypt'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4639
	  // While decrypted, zip has training 0 bytes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4640
	  if (0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4641
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4642
      PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4643
	                       'The central dir is not at the end of the archive.'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4644
						   .' Some trailing bytes exists after the archive.');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4645
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4646
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4647
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4648
	  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4649
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4650
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4651
    // ----- Get comment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4652
    if ($v_data['comment_size'] != 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4653
      $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4654
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4655
    else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4656
      $p_central_dir['comment'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4657
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4658
    $p_central_dir['entries'] = $v_data['entries'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4659
    $p_central_dir['disk_entries'] = $v_data['disk_entries'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4660
    $p_central_dir['offset'] = $v_data['offset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4661
    $p_central_dir['size'] = $v_data['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4662
    $p_central_dir['disk'] = $v_data['disk'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4663
    $p_central_dir['disk_start'] = $v_data['disk_start'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4664
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4665
    // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4666
    //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4667
    //}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4668
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4669
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4670
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4671
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4672
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4673
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4674
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4675
  // Function : privDeleteByRule()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4676
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4677
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4678
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4679
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4680
  function privDeleteByRule(&$p_result_list, &$p_options)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4681
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4682
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4683
    $v_list_detail = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4684
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4685
    // ----- Open the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4686
    if (($v_result=$this->privOpenFd('rb')) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4687
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4688
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4689
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4690
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4691
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  4692
    // ----- Read the central directory information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4693
    $v_central_dir = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4694
    if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4695
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4696
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4697
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4698
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4699
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4700
    // ----- Go to beginning of File
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4701
    @rewind($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4702
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4703
    // ----- Scan all the files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4704
    // ----- Start at beginning of Central Dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4705
    $v_pos_entry = $v_central_dir['offset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4706
    @rewind($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4707
    if (@fseek($this->zip_fd, $v_pos_entry))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4708
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4709
      // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4710
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4711
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4712
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4713
      PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4714
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4715
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4716
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4717
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4718
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4719
    // ----- Read each entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4720
    $v_header_list = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4721
    $j_start = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4722
    for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4723
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4724
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4725
      // ----- Read the file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4726
      $v_header_list[$v_nb_extracted] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4727
      if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4728
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4729
        // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4730
        $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4731
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4732
        return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4733
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4734
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4735
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4736
      // ----- Store the index
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4737
      $v_header_list[$v_nb_extracted]['index'] = $i;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4738
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4739
      // ----- Look for the specific extract rules
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4740
      $v_found = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4741
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4742
      // ----- Look for extract by name rule
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4743
      if (   (isset($p_options[PCLZIP_OPT_BY_NAME]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4744
          && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4745
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4746
          // ----- Look if the filename is in the list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4747
          for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_found); $j++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4748
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4749
              // ----- Look for a directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4750
              if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4751
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4752
                  // ----- Look if the directory is in the filename path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4753
                  if (   (strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4754
                      && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4755
                      $v_found = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4756
                  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4757
                  elseif (   (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4758
                          && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4759
                      $v_found = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4760
                  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4761
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4762
              // ----- Look for a filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4763
              elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4764
                  $v_found = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4765
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4766
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4767
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4768
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4769
      // ----- Look for extract by ereg rule
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4770
      // ereg() is deprecated with PHP 5.3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4771
      /*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4772
      else if (   (isset($p_options[PCLZIP_OPT_BY_EREG]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4773
               && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4774
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4775
          if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4776
              $v_found = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4777
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4778
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4779
      */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4780
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4781
      // ----- Look for extract by preg rule
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4782
      else if (   (isset($p_options[PCLZIP_OPT_BY_PREG]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4783
               && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4784
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4785
          if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4786
              $v_found = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4787
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4788
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4789
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4790
      // ----- Look for extract by index rule
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4791
      else if (   (isset($p_options[PCLZIP_OPT_BY_INDEX]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4792
               && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4793
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4794
          // ----- Look if the index is in the list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4795
          for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_found); $j++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4796
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4797
              if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4798
                  $v_found = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4799
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4800
              if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4801
                  $j_start = $j+1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4802
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4803
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4804
              if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4805
                  break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4806
              }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4807
          }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4808
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4809
      else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4810
      	$v_found = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4811
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4812
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4813
      // ----- Look for deletion
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4814
      if ($v_found)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4815
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4816
        unset($v_header_list[$v_nb_extracted]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4817
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4818
      else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4819
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4820
        $v_nb_extracted++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4821
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4822
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4823
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4824
    // ----- Look if something need to be deleted
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4825
    if ($v_nb_extracted > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4826
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  4827
        // ----- Creates a temporary file
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4828
        $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4829
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4830
        // ----- Creates a temporary zip archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4831
        $v_temp_zip = new PclZip($v_zip_temp_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4832
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4833
        // ----- Open the temporary zip file in write mode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4834
        if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4835
            $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4836
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4837
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4838
            return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4839
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4840
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4841
        // ----- Look which file need to be kept
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4842
        for ($i=0; $i<sizeof($v_header_list); $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4843
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4844
            // ----- Calculate the position of the header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4845
            @rewind($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4846
            if (@fseek($this->zip_fd,  $v_header_list[$i]['offset'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4847
                // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4848
                $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4849
                $v_temp_zip->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4850
                @unlink($v_zip_temp_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4851
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4852
                // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4853
                PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4854
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4855
                // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4856
                return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4857
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4858
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4859
            // ----- Read the file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4860
            $v_local_header = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4861
            if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4862
                // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4863
                $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4864
                $v_temp_zip->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4865
                @unlink($v_zip_temp_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4866
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4867
                // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4868
                return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4869
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4870
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4871
            // ----- Check that local file header is same as central file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4872
            if ($this->privCheckFileHeaders($v_local_header,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4873
			                                $v_header_list[$i]) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4874
                // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4875
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4876
            unset($v_local_header);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4877
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4878
            // ----- Write the file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4879
            if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4880
                // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4881
                $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4882
                $v_temp_zip->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4883
                @unlink($v_zip_temp_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4884
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4885
                // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4886
                return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4887
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4888
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4889
            // ----- Read/write the data block
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4890
            if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4891
                // ----- Close the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4892
                $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4893
                $v_temp_zip->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4894
                @unlink($v_zip_temp_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4895
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4896
                // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4897
                return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4898
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4899
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4900
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4901
        // ----- Store the offset of the central dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4902
        $v_offset = @ftell($v_temp_zip->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4903
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4904
        // ----- Re-Create the Central Dir files header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4905
        for ($i=0; $i<sizeof($v_header_list); $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4906
            // ----- Create the file header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4907
            if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4908
                $v_temp_zip->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4909
                $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4910
                @unlink($v_zip_temp_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4911
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4912
                // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4913
                return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4914
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4915
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4916
            // ----- Transform the header to a 'usable' info
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4917
            $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4918
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4919
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4920
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4921
        // ----- Zip file comment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4922
        $v_comment = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4923
        if (isset($p_options[PCLZIP_OPT_COMMENT])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4924
          $v_comment = $p_options[PCLZIP_OPT_COMMENT];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4925
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4926
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4927
        // ----- Calculate the size of the central header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4928
        $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4929
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4930
        // ----- Create the central dir footer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4931
        if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4932
            // ----- Reset the file list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4933
            unset($v_header_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4934
            $v_temp_zip->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4935
            $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4936
            @unlink($v_zip_temp_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4937
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4938
            // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4939
            return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4940
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4941
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4942
        // ----- Close
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4943
        $v_temp_zip->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4944
        $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4945
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4946
        // ----- Delete the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4947
        // TBC : I should test the result ...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4948
        @unlink($this->zipname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4949
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4950
        // ----- Rename the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4951
        // TBC : I should test the result ...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4952
        //@rename($v_zip_temp_name, $this->zipname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4953
        PclZipUtilRename($v_zip_temp_name, $this->zipname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4954
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4955
        // ----- Destroy the temporary archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4956
        unset($v_temp_zip);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4957
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4958
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4959
    // ----- Remove every files : reset the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4960
    else if ($v_central_dir['entries'] != 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4961
        $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4962
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4963
        if (($v_result = $this->privOpenFd('wb')) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4964
          return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4965
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4966
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4967
        if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4968
          return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4969
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4970
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4971
        $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4972
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4973
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4974
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4975
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4976
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4977
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4978
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4979
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4980
  // Function : privDirCheck()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4981
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4982
  //   Check if a directory exists, if not it creates it and all the parents directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4983
  //   which may be useful.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4984
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4985
  //   $p_dir : Directory path to check.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4986
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4987
  //    1 : OK
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4988
  //   -1 : Unable to create directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4989
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4990
  function privDirCheck($p_dir, $p_is_dir=false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4991
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4992
    $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4993
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4994
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4995
    // ----- Remove the final '/'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4996
    if (($p_is_dir) && (substr($p_dir, -1)=='/'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4997
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4998
      $p_dir = substr($p_dir, 0, strlen($p_dir)-1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4999
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5000
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5001
    // ----- Check the directory availability
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5002
    if ((is_dir($p_dir)) || ($p_dir == ""))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5003
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5004
      return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5005
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5006
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5007
    // ----- Extract parent directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5008
    $p_parent_dir = dirname($p_dir);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5009
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5010
    // ----- Just a check
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5011
    if ($p_parent_dir != $p_dir)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5012
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5013
      // ----- Look for parent directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5014
      if ($p_parent_dir != "")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5015
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5016
        if (($v_result = $this->privDirCheck($p_parent_dir)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5017
        {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5018
          return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5019
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5020
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5021
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5022
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5023
    // ----- Create the directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5024
    if (!@mkdir($p_dir, 0777))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5025
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5026
      // ----- Error log
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5027
      PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5028
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5029
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5030
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5031
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5032
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5033
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5034
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5035
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5036
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5037
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5038
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5039
  // Function : privMerge()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5040
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5041
  //   If $p_archive_to_add does not exist, the function exit with a success result.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5042
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5043
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5044
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5045
  function privMerge(&$p_archive_to_add)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5046
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5047
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5048
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5049
    // ----- Look if the archive_to_add exists
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5050
    if (!is_file($p_archive_to_add->zipname))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5051
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5052
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5053
      // ----- Nothing to merge, so merge is a success
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5054
      $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5055
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5056
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5057
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5058
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5059
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5060
    // ----- Look if the archive exists
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5061
    if (!is_file($this->zipname))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5062
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5063
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5064
      // ----- Do a duplicate
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5065
      $v_result = $this->privDuplicate($p_archive_to_add->zipname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5066
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5067
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5068
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5069
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5070
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5071
    // ----- Open the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5072
    if (($v_result=$this->privOpenFd('rb')) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5073
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5074
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5075
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5076
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5077
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5078
    // ----- Read the central directory information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5079
    $v_central_dir = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5080
    if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5081
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5082
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5083
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5084
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5085
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5086
    // ----- Go to beginning of File
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5087
    @rewind($this->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5088
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5089
    // ----- Open the archive_to_add file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5090
    if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5091
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5092
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5093
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5094
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5095
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5096
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5097
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5098
    // ----- Read the central directory information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5099
    $v_central_dir_to_add = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5100
    if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5101
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5102
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5103
      $p_archive_to_add->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5104
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5105
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5106
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5107
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5108
    // ----- Go to beginning of File
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5109
    @rewind($p_archive_to_add->zip_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5110
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5111
    // ----- Creates a temporary file
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5112
    $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5113
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5114
    // ----- Open the temporary file in write mode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5115
    if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5116
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5117
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5118
      $p_archive_to_add->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5119
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5120
      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5121
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5122
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5123
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5124
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5125
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5126
    // ----- Copy the files from the archive to the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5127
    // TBC : Here I should better append the file and go back to erase the central dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5128
    $v_size = $v_central_dir['offset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5129
    while ($v_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5130
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5131
      $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5132
      $v_buffer = fread($this->zip_fd, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5133
      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5134
      $v_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5135
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5136
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5137
    // ----- Copy the files from the archive_to_add into the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5138
    $v_size = $v_central_dir_to_add['offset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5139
    while ($v_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5140
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5141
      $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5142
      $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5143
      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5144
      $v_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5145
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5146
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5147
    // ----- Store the offset of the central dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5148
    $v_offset = @ftell($v_zip_temp_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5149
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5150
    // ----- Copy the block of file headers from the old archive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5151
    $v_size = $v_central_dir['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5152
    while ($v_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5153
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5154
      $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5155
      $v_buffer = @fread($this->zip_fd, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5156
      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5157
      $v_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5158
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5159
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5160
    // ----- Copy the block of file headers from the archive_to_add
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5161
    $v_size = $v_central_dir_to_add['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5162
    while ($v_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5163
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5164
      $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5165
      $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5166
      @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5167
      $v_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5168
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5169
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5170
    // ----- Merge the file comments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5171
    $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5172
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5173
    // ----- Calculate the size of the (new) central header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5174
    $v_size = @ftell($v_zip_temp_fd)-$v_offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5175
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5176
    // ----- Swap the file descriptor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5177
    // Here is a trick : I swap the temporary fd with the zip fd, in order to use
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5178
    // the following methods on the temporary fil and not the real archive fd
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5179
    $v_swap = $this->zip_fd;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5180
    $this->zip_fd = $v_zip_temp_fd;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5181
    $v_zip_temp_fd = $v_swap;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5182
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5183
    // ----- Create the central dir footer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5184
    if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5185
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5186
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5187
      $p_archive_to_add->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5188
      @fclose($v_zip_temp_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5189
      $this->zip_fd = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5190
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5191
      // ----- Reset the file list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5192
      unset($v_header_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5193
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5194
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5195
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5196
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5197
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5198
    // ----- Swap back the file descriptor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5199
    $v_swap = $this->zip_fd;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5200
    $this->zip_fd = $v_zip_temp_fd;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5201
    $v_zip_temp_fd = $v_swap;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5202
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5203
    // ----- Close
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5204
    $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5205
    $p_archive_to_add->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5207
    // ----- Close the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5208
    @fclose($v_zip_temp_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5209
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5210
    // ----- Delete the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5211
    // TBC : I should test the result ...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5212
    @unlink($this->zipname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5213
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5214
    // ----- Rename the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5215
    // TBC : I should test the result ...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5216
    //@rename($v_zip_temp_name, $this->zipname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5217
    PclZipUtilRename($v_zip_temp_name, $this->zipname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5218
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5219
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5220
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5221
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5222
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5223
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5224
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5225
  // Function : privDuplicate()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5226
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5227
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5228
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5229
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5230
  function privDuplicate($p_archive_filename)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5231
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5232
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5233
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5234
    // ----- Look if the $p_archive_filename exists
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5235
    if (!is_file($p_archive_filename))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5236
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5237
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5238
      // ----- Nothing to duplicate, so duplicate is a success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5239
      $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5240
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5241
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5242
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5243
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5244
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5245
    // ----- Open the zip file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5246
    if (($v_result=$this->privOpenFd('wb')) != 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5247
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5248
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5249
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5250
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5251
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5252
    // ----- Open the temporary file in write mode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5253
    if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5254
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5255
      $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5256
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5257
      PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5258
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5259
      // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5260
      return PclZip::errorCode();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5261
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5262
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5263
    // ----- Copy the files from the archive to the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5264
    // TBC : Here I should better append the file and go back to erase the central dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5265
    $v_size = filesize($p_archive_filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5266
    while ($v_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5267
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5268
      $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5269
      $v_buffer = fread($v_zip_temp_fd, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5270
      @fwrite($this->zip_fd, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5271
      $v_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5272
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5273
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5274
    // ----- Close
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5275
    $this->privCloseFd();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5276
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5277
    // ----- Close the temporary file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5278
    @fclose($v_zip_temp_fd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5279
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5280
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5281
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5282
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5283
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5284
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5285
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5286
  // Function : privErrorLog()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5287
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5288
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5289
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5290
  function privErrorLog($p_error_code=0, $p_error_string='')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5291
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5292
    if (PCLZIP_ERROR_EXTERNAL == 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5293
      PclError($p_error_code, $p_error_string);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5294
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5295
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5296
      $this->error_code = $p_error_code;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5297
      $this->error_string = $p_error_string;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5298
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5299
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5300
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5301
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5302
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5303
  // Function : privErrorReset()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5304
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5305
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5306
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5307
  function privErrorReset()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5308
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5309
    if (PCLZIP_ERROR_EXTERNAL == 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5310
      PclErrorReset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5311
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5312
    else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5313
      $this->error_code = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5314
      $this->error_string = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5315
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5316
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5317
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5318
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5319
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5320
  // Function : privDisableMagicQuotes()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5321
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5322
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5323
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5324
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5325
  function privDisableMagicQuotes()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5326
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5327
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5328
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5329
	// EDIT for WordPress 5.3.0
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5330
	// magic_quote functions are deprecated in PHP 7.4, now assuming it's always off.
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5331
	/*
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5332
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5333
    // ----- Look if function exists
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5334
    if (   (!function_exists("get_magic_quotes_runtime"))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5335
	    || (!function_exists("set_magic_quotes_runtime"))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5336
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5337
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5338
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5339
    // ----- Look if already done
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5340
    if ($this->magic_quotes_status != -1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5341
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5342
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5343
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5344
	// ----- Get and memorize the magic_quote value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5345
	$this->magic_quotes_status = @get_magic_quotes_runtime();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5346
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5347
	// ----- Disable magic_quotes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5348
	if ($this->magic_quotes_status == 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5349
	  @set_magic_quotes_runtime(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5350
	}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5351
	*/
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5352
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5353
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5354
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5355
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5356
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5357
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5358
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5359
  // Function : privSwapBackMagicQuotes()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5360
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5361
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5362
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5363
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5364
  function privSwapBackMagicQuotes()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5365
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5366
    $v_result=1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5367
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5368
	// EDIT for WordPress 5.3.0
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5369
	// magic_quote functions are deprecated in PHP 7.4, now assuming it's always off.
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5370
	/*
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5371
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5372
    // ----- Look if function exists
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5373
    if (   (!function_exists("get_magic_quotes_runtime"))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5374
	    || (!function_exists("set_magic_quotes_runtime"))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5375
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5376
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5377
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5378
    // ----- Look if something to do
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5379
    if ($this->magic_quotes_status != -1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5380
      return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5381
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5382
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5383
	// ----- Swap back magic_quotes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5384
	if ($this->magic_quotes_status == 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5385
  	  @set_magic_quotes_runtime($this->magic_quotes_status);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5386
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5387
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  5388
	*/
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5389
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5390
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5391
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5392
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5393
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5394
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5395
  // End of class
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5396
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5397
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5398
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5399
  // Function : PclZipUtilPathReduction()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5400
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5401
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5402
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5403
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5404
  function PclZipUtilPathReduction($p_dir)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5405
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5406
    $v_result = "";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5407
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5408
    // ----- Look for not empty path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5409
    if ($p_dir != "") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5410
      // ----- Explode path by directory names
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5411
      $v_list = explode("/", $p_dir);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5412
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5413
      // ----- Study directories from last to first
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5414
      $v_skip = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5415
      for ($i=sizeof($v_list)-1; $i>=0; $i--) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5416
        // ----- Look for current path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5417
        if ($v_list[$i] == ".") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5418
          // ----- Ignore this directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5419
          // Should be the first $i=0, but no check is done
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5420
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5421
        else if ($v_list[$i] == "..") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5422
		  $v_skip++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5423
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5424
        else if ($v_list[$i] == "") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5425
		  // ----- First '/' i.e. root slash
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5426
		  if ($i == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5427
            $v_result = "/".$v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5428
		    if ($v_skip > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5429
		        // ----- It is an invalid path, so the path is not modified
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5430
		        // TBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5431
		        $v_result = $p_dir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5432
                $v_skip = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5433
		    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5434
		  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5435
		  // ----- Last '/' i.e. indicates a directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5436
		  else if ($i == (sizeof($v_list)-1)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5437
            $v_result = $v_list[$i];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5438
		  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5439
		  // ----- Double '/' inside the path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5440
		  else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5441
            // ----- Ignore only the double '//' in path,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5442
            // but not the first and last '/'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5443
		  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5444
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5445
        else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5446
		  // ----- Look for item to skip
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5447
		  if ($v_skip > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5448
		    $v_skip--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5449
		  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5450
		  else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5451
            $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:"");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5452
		  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5453
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5454
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5455
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5456
      // ----- Look for skip
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5457
      if ($v_skip > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5458
        while ($v_skip > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5459
            $v_result = '../'.$v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5460
            $v_skip--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5461
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5462
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5463
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5464
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5465
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5466
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5467
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5468
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5469
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5470
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5471
  // Function : PclZipUtilPathInclusion()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5472
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5473
  //   This function indicates if the path $p_path is under the $p_dir tree. Or,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5474
  //   said in an other way, if the file or sub-dir $p_path is inside the dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5475
  //   $p_dir.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5476
  //   The function indicates also if the path is exactly the same as the dir.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5477
  //   This function supports path with duplicated '/' like '//', but does not
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5478
  //   support '.' or '..' statements.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5479
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5480
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5481
  //   0 if $p_path is not inside directory $p_dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5482
  //   1 if $p_path is inside directory $p_dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5483
  //   2 if $p_path is exactly the same as $p_dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5484
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5485
  function PclZipUtilPathInclusion($p_dir, $p_path)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5486
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5487
    $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5488
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5489
    // ----- Look for path beginning by ./
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5490
    if (   ($p_dir == '.')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5491
        || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5492
      $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5493
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5494
    if (   ($p_path == '.')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5495
        || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5496
      $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5497
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5498
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5499
    // ----- Explode dir and path by directory separator
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5500
    $v_list_dir = explode("/", $p_dir);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5501
    $v_list_dir_size = sizeof($v_list_dir);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5502
    $v_list_path = explode("/", $p_path);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5503
    $v_list_path_size = sizeof($v_list_path);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5504
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5505
    // ----- Study directories paths
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5506
    $i = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5507
    $j = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5508
    while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5509
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5510
      // ----- Look for empty dir (path reduction)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5511
      if ($v_list_dir[$i] == '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5512
        $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5513
        continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5514
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5515
      if ($v_list_path[$j] == '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5516
        $j++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5517
        continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5518
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5519
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5520
      // ----- Compare the items
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5521
      if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != ''))  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5522
        $v_result = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5523
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5524
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5525
      // ----- Next items
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5526
      $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5527
      $j++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5528
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5529
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5530
    // ----- Look if everything seems to be the same
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5531
    if ($v_result) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5532
      // ----- Skip all the empty items
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5533
      while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5534
      while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5535
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5536
      if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5537
        // ----- There are exactly the same
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5538
        $v_result = 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5539
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5540
      else if ($i < $v_list_dir_size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5541
        // ----- The path is shorter than the dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5542
        $v_result = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5543
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5544
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5545
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5546
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5547
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5548
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5549
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5550
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5551
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5552
  // Function : PclZipUtilCopyBlock()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5553
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5554
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5555
  //   $p_mode : read/write compression mode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5556
  //             0 : src & dest normal
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5557
  //             1 : src gzip, dest normal
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5558
  //             2 : src normal, dest gzip
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5559
  //             3 : src & dest gzip
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5560
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5561
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5562
  function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5563
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5564
    $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5565
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5566
    if ($p_mode==0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5567
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5568
      while ($p_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5569
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5570
        $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5571
        $v_buffer = @fread($p_src, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5572
        @fwrite($p_dest, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5573
        $p_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5574
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5575
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5576
    else if ($p_mode==1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5577
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5578
      while ($p_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5579
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5580
        $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5581
        $v_buffer = @gzread($p_src, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5582
        @fwrite($p_dest, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5583
        $p_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5584
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5585
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5586
    else if ($p_mode==2)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5587
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5588
      while ($p_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5589
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5590
        $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5591
        $v_buffer = @fread($p_src, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5592
        @gzwrite($p_dest, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5593
        $p_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5594
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5595
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5596
    else if ($p_mode==3)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5597
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5598
      while ($p_size != 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5599
      {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5600
        $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5601
        $v_buffer = @gzread($p_src, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5602
        @gzwrite($p_dest, $v_buffer, $v_read_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5603
        $p_size -= $v_read_size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5604
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5605
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5606
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5607
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5608
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5609
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5610
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5611
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5612
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5613
  // Function : PclZipUtilRename()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5614
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5615
  //   This function tries to do a simple rename() function. If it fails, it
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5616
  //   tries to copy the $p_src file in a new $p_dest file and then unlink the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5617
  //   first one.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5618
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5619
  //   $p_src : Old filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5620
  //   $p_dest : New filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5621
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5622
  //   1 on success, 0 on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5623
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5624
  function PclZipUtilRename($p_src, $p_dest)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5625
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5626
    $v_result = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5627
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5628
    // ----- Try to rename the files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5629
    if (!@rename($p_src, $p_dest)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5630
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5631
      // ----- Try to copy & unlink the src
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5632
      if (!@copy($p_src, $p_dest)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5633
        $v_result = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5634
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5635
      else if (!@unlink($p_src)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5636
        $v_result = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5637
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5638
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5639
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5640
    // ----- Return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5641
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5642
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5643
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5644
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5645
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5646
  // Function : PclZipUtilOptionText()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5647
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5648
  //   Translate option value in text. Mainly for debug purpose.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5649
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5650
  //   $p_option : the option value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5651
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5652
  //   The option text value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5653
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5654
  function PclZipUtilOptionText($p_option)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5655
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5656
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5657
    $v_list = get_defined_constants();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5658
    for (reset($v_list); $v_key = key($v_list); next($v_list)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5659
	    $v_prefix = substr($v_key, 0, 10);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5660
	    if ((   ($v_prefix == 'PCLZIP_OPT')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5661
           || ($v_prefix == 'PCLZIP_CB_')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5662
           || ($v_prefix == 'PCLZIP_ATT'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5663
	        && ($v_list[$v_key] == $p_option)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5664
        return $v_key;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5665
	    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5666
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5667
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5668
    $v_result = 'Unknown';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5669
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5670
    return $v_result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5671
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5672
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5673
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5674
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5675
  // Function : PclZipUtilTranslateWinPath()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5676
  // Description :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5677
  //   Translate windows path by replacing '\' by '/' and optionally removing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5678
  //   drive letter.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5679
  // Parameters :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5680
  //   $p_path : path to translate.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5681
  //   $p_remove_disk_letter : true | false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5682
  // Return Values :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5683
  //   The path translated.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5684
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5685
  function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5686
  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5687
    if (stristr(php_uname(), 'windows')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5688
      // ----- Look for potential disk letter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5689
      if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5690
          $p_path = substr($p_path, $v_position+1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5691
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5692
      // ----- Change potential windows directory separator
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5693
      if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5694
          $p_path = strtr($p_path, '\\', '/');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5695
      }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5696
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5697
    return $p_path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5698
  }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5699
  // --------------------------------------------------------------------------------
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5700
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5701
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5702
?>