Jump to:
Screenshot
Attributes
Emails
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-13 01:16:06.532713]
1 0 1 0.000156 393528
1 3 0 0.007266 1975880 {main} 1 /var/www/html/uploads/ikstart.php 0 0
2 4 0 0.007301 1975880 define 0 /var/www/html/uploads/ikstart.php 31 2 'KICKSTART' 1
2 4 1 0.007319 1975984
2 4 R TRUE
2 5 0 0.007333 1975912 define 0 /var/www/html/uploads/ikstart.php 32 2 'VERSION' '4.1.1'
2 5 1 0.007348 1976016
2 5 R TRUE
2 6 0 0.007361 1975944 define 0 /var/www/html/uploads/ikstart.php 33 2 'KICKSTARTPRO' '0'
2 6 1 0.007375 1976048
2 6 R TRUE
2 7 0 0.007390 1975976 strpos 0 /var/www/html/uploads/ikstart.php 38 2 'localhost' 'local.web'
2 7 1 0.007405 1976048
2 7 R FALSE
2 8 0 0.007418 1975976 substr 0 /var/www/html/uploads/ikstart.php 43 3 'Linux' 0 3
2 8 1 0.007433 1976104
2 8 R 'Lin'
2 9 0 0.007446 1975976 define 0 /var/www/html/uploads/ikstart.php 43 2 'KSWINDOWS' FALSE
2 9 1 0.007459 1976080
2 9 R TRUE
2 10 0 0.007473 1976008 dirname 0 /var/www/html/uploads/ikstart.php 47 1 '/var/www/html/uploads/ikstart.php'
2 10 1 0.007485 1976104
2 10 R '/var/www/html/uploads'
2 11 0 0.007500 1976072 define 0 /var/www/html/uploads/ikstart.php 47 2 'KSROOTDIR' '/var/www/html/uploads'
2 11 1 0.007513 1976176
2 11 R TRUE
2 12 0 0.007529 1976104 error_reporting 0 /var/www/html/uploads/ikstart.php 57 1 'E_NONE'
2 12 1 0.007543 1976144
2 12 R 0
1 A /var/www/html/uploads/ikstart.php 97 $cacertpem = '/var/www/html/uploads/cacert.pem'
2 13 0 0.007571 1976168 is_file 0 /var/www/html/uploads/ikstart.php 98 1 '/var/www/html/uploads/cacert.pem'
2 13 1 0.007595 1976208
2 13 R FALSE
2 14 0 0.007609 1976104 opendir 0 /var/www/html/uploads/ikstart.php 106 1 '/var/www/html/uploads'
2 14 1 0.007631 1976496
2 14 R resource(4) of type (stream)
1 A /var/www/html/uploads/ikstart.php 106 $dh = resource(4) of type (stream)
2 15 0 0.007658 1976464 readdir 0 /var/www/html/uploads/ikstart.php 108 1 resource(4) of type (stream)
2 15 1 0.007679 1976536
2 15 R '..'
1 A /var/www/html/uploads/ikstart.php 108 $filename = '..'
2 16 0 0.007703 1976496 is_file 0 /var/www/html/uploads/ikstart.php 109 1 '..'
2 16 1 0.007717 1976544
2 16 R FALSE
2 17 0 0.007730 1976504 readdir 0 /var/www/html/uploads/ikstart.php 108 1 resource(4) of type (stream)
2 17 1 0.007744 1976576
2 17 R '.'
1 A /var/www/html/uploads/ikstart.php 108 $filename = '.'
2 18 0 0.007767 1976504 is_file 0 /var/www/html/uploads/ikstart.php 109 1 '.'
2 18 1 0.007780 1976544
2 18 R FALSE
2 19 0 0.007793 1976504 readdir 0 /var/www/html/uploads/ikstart.php 108 1 resource(4) of type (stream)
2 19 1 0.007806 1976584
2 19 R 'prepend.php'
1 A /var/www/html/uploads/ikstart.php 108 $filename = 'prepend.php'
2 20 0 0.007830 1976512 is_file 0 /var/www/html/uploads/ikstart.php 109 1 'prepend.php'
2 20 1 0.007845 1976560
2 20 R TRUE
2 21 0 0.007858 1976520 substr 0 /var/www/html/uploads/ikstart.php 110 3 'prepend.php' 0 10
2 21 1 0.007872 1976656
2 21 R 'prepend.ph'
2 22 0 0.007885 1976520 readdir 0 /var/www/html/uploads/ikstart.php 108 1 resource(4) of type (stream)
2 22 1 0.007898 1976592
2 22 R 'data'
1 A /var/www/html/uploads/ikstart.php 108 $filename = 'data'
2 23 0 0.007921 1976512 is_file 0 /var/www/html/uploads/ikstart.php 109 1 'data'
2 23 1 0.007935 1976544
2 23 R FALSE
2 24 0 0.007948 1976504 readdir 0 /var/www/html/uploads/ikstart.php 108 1 resource(4) of type (stream)
2 24 1 0.007961 1976584
2 24 R '.htaccess'
1 A /var/www/html/uploads/ikstart.php 108 $filename = '.htaccess'
2 25 0 0.007984 1976512 is_file 0 /var/www/html/uploads/ikstart.php 109 1 '.htaccess'
2 25 1 0.007999 1976560
2 25 R TRUE
2 26 0 0.008011 1976520 substr 0 /var/www/html/uploads/ikstart.php 110 3 '.htaccess' 0 10
2 26 1 0.008024 1976616
2 26 R '.htaccess'
2 27 0 0.008038 1976520 readdir 0 /var/www/html/uploads/ikstart.php 108 1 resource(4) of type (stream)
2 27 1 0.008058 1976600
2 27 R 'ikstart.php'
1 A /var/www/html/uploads/ikstart.php 108 $filename = 'ikstart.php'
2 28 0 0.008082 1976520 is_file 0 /var/www/html/uploads/ikstart.php 109 1 'ikstart.php'
2 28 1 0.008096 1976560
2 28 R TRUE
2 29 0 0.008109 1976520 substr 0 /var/www/html/uploads/ikstart.php 110 3 'ikstart.php' 0 10
2 29 1 0.008122 1976656
2 29 R 'ikstart.ph'
2 30 0 0.008136 1976520 readdir 0 /var/www/html/uploads/ikstart.php 108 1 resource(4) of type (stream)
2 30 1 0.008150 1976560
2 30 R FALSE
1 A /var/www/html/uploads/ikstart.php 108 $filename = FALSE
2 31 0 0.008173 1976480 define 0 /var/www/html/uploads/ikstart.php 128 2 '_AKEEBA_RESTORATION' 1
2 31 1 0.008187 1976584
2 31 R TRUE
2 32 0 0.008200 1976512 define 0 /var/www/html/uploads/ikstart.php 129 2 'DS' '/'
2 32 1 0.008213 1976616
2 32 R TRUE
2 33 0 0.008225 1976544 define 0 /var/www/html/uploads/ikstart.php 132 2 'AK_STATE_NOFILE' 0
2 33 1 0.008245 1976648
2 33 R TRUE
2 34 0 0.008258 1976576 define 0 /var/www/html/uploads/ikstart.php 133 2 'AK_STATE_HEADER' 1
2 34 1 0.008272 1976680
2 34 R TRUE
2 35 0 0.008284 1976608 define 0 /var/www/html/uploads/ikstart.php 134 2 'AK_STATE_DATA' 2
2 35 1 0.008299 1976712
2 35 R TRUE
2 36 0 0.008311 1976640 define 0 /var/www/html/uploads/ikstart.php 135 2 'AK_STATE_DATAREAD' 3
2 36 1 0.008325 1976744
2 36 R TRUE
2 37 0 0.008337 1976672 define 0 /var/www/html/uploads/ikstart.php 136 2 'AK_STATE_POSTPROC' 4
2 37 1 0.008350 1976776
2 37 R TRUE
2 38 0 0.008362 1976704 define 0 /var/www/html/uploads/ikstart.php 137 2 'AK_STATE_DONE' 5
2 38 1 0.008376 1976808
2 38 R TRUE
2 39 0 0.008389 1976736 function_exists 0 /var/www/html/uploads/ikstart.php 142 1 'php_uname'
2 39 1 0.008402 1976776
2 39 R TRUE
2 40 0 0.008415 1976736 php_uname 0 /var/www/html/uploads/ikstart.php 144 0
2 40 1 0.008429 1976848
2 40 R 'Linux osboxes 5.15.0-60-generic #66-Ubuntu SMP Fri Jan 20 14:29:49 UTC 2023 x86_64'
2 41 0 0.008447 1976848 stristr 0 /var/www/html/uploads/ikstart.php 144 2 'Linux osboxes 5.15.0-60-generic #66-Ubuntu SMP Fri Jan 20 14:29:49 UTC 2023 x86_64' 'windows'
2 41 1 0.008465 1976920
2 41 R FALSE
2 42 0 0.008477 1976736 define 0 /var/www/html/uploads/ikstart.php 144 2 '_AKEEBA_IS_WINDOWS' FALSE
2 42 1 0.008491 1976840
2 42 R TRUE
2 43 0 0.008504 1976768 define 0 /var/www/html/uploads/ikstart.php 159 2 'KSLANGDIR' '/var/www/html/uploads'
2 43 1 0.008518 1976872
2 43 R TRUE
2 44 0 0.008530 1976800 function_exists 0 /var/www/html/uploads/ikstart.php 163 1 'setlocale'
2 44 1 0.008544 1976840
2 44 R TRUE
2 45 0 0.008557 1976800 setlocale 0 /var/www/html/uploads/ikstart.php 165 2 6 'en_US.UTF8'
2 45 1 0.008629 1976872
2 45 R 'en_US.UTF8'
2 46 0 0.008646 1976800 function_exists 0 /var/www/html/uploads/ikstart.php 170 1 'fnmatch'
2 46 1 0.008660 1976840
2 46 R TRUE
2 47 0 0.008673 1976800 function_exists 0 /var/www/html/uploads/ikstart.php 182 1 'akstringlen'
2 47 1 0.008686 1976840
2 47 R FALSE
2 48 0 0.008698 1976800 function_exists 0 /var/www/html/uploads/ikstart.php 184 1 'mb_strlen'
2 48 1 0.008711 1976840
2 48 R FALSE
2 49 0 0.008725 1976800 define 0 /var/www/html/uploads/ikstart.php 322 2 'SERVICES_JSON_SLICE' 1
2 49 1 0.008739 1976904
2 49 R TRUE
2 50 0 0.008752 1976832 define 0 /var/www/html/uploads/ikstart.php 327 2 'SERVICES_JSON_IN_STR' 2
2 50 1 0.008765 1976936
2 50 R TRUE
2 51 0 0.008777 1976864 define 0 /var/www/html/uploads/ikstart.php 332 2 'SERVICES_JSON_IN_ARR' 3
2 51 1 0.008791 1976968
2 51 R TRUE
2 52 0 0.008803 1976896 define 0 /var/www/html/uploads/ikstart.php 337 2 'SERVICES_JSON_IN_OBJ' 4
2 52 1 0.008816 1977000
2 52 R TRUE
2 53 0 0.008828 1976928 define 0 /var/www/html/uploads/ikstart.php 342 2 'SERVICES_JSON_IN_CMT' 5
2 53 1 0.008847 1977032
2 53 R TRUE
2 54 0 0.008859 1976960 define 0 /var/www/html/uploads/ikstart.php 347 2 'SERVICES_JSON_LOOSE_TYPE' 16
2 54 1 0.008873 1977064
2 54 R TRUE
2 55 0 0.008885 1976992 define 0 /var/www/html/uploads/ikstart.php 352 2 'SERVICES_JSON_SUPPRESS_ERRORS' 32
2 55 1 0.008900 1977096
2 55 R TRUE
2 56 0 0.008912 1977024 class_exists 0 /var/www/html/uploads/ikstart.php 376 1 'Akeeba_Services_JSON'
2 56 1 0.008927 1977064
2 56 R FALSE
2 57 0 0.008940 1977024 function_exists 0 /var/www/html/uploads/ikstart.php 1049 1 'json_encode'
2 57 1 0.008954 1977064
2 57 R TRUE
2 58 0 0.008966 1977024 function_exists 0 /var/www/html/uploads/ikstart.php 1059 1 'json_decode'
2 58 1 0.008979 1977064
2 58 R TRUE
2 59 0 0.008994 1977024 callExtraFeature 1 /var/www/html/uploads/ikstart.php 10475 2 ??? ???
2 A /var/www/html/uploads/ikstart.php 7998 $extraFeatureObjects = []
3 60 0 0.009021 1977048 get_declared_classes 0 /var/www/html/uploads/ikstart.php 7999 0
3 60 1 0.009055 1985296
3 60 R [0 => 'stdClass', 1 => 'Exception', 2 => 'ErrorException', 3 => 'Error', 4 => 'ParseError', 5 => 'TypeError', 6 => 'ArgumentCountError', 7 => 'ArithmeticError', 8 => 'DivisionByZeroError', 9 => 'Closure', 10 => 'Generator', 11 => 'ClosedGeneratorException', 12 => 'DateTime', 13 => 'DateTimeImmutable', 14 => 'DateTimeZone', 15 => 'DateInterval', 16 => 'DatePeriod', 17 => 'LibXMLError', 18 => 'HashContext', 19 => 'ReflectionException', 20 => 'Reflection', 21 => 'ReflectionFunctionAbstract', 22 => 'ReflectionFunction', 23 => 'ReflectionGenerator', 24 => 'ReflectionParameter', 25 => 'ReflectionType', 26 => 'ReflectionNamedType', 27 => 'ReflectionMethod', 28 => 'ReflectionClass', 29 => 'ReflectionObject', 30 => 'ReflectionProperty', 31 => 'ReflectionClassConstant', 32 => 'ReflectionExtension', 33 => 'ReflectionZendExtension', 34 => 'LogicException', 35 => 'BadFunctionCallException', 36 => 'BadMethodCallException', 37 => 'DomainException', 38 => 'InvalidArgumentException', 39 => 'LengthException', 40 => 'OutOfRangeException', 41 => 'RuntimeException', 42 => 'OutOfBoundsException', 43 => 'OverflowException', 44 => 'RangeException', 45 => 'UnderflowException', 46 => 'UnexpectedValueException', 47 => 'RecursiveIteratorIterator', 48 => 'IteratorIterator', 49 => 'FilterIterator', 50 => 'RecursiveFilterIterator', 51 => 'CallbackFilterIterator', 52 => 'RecursiveCallbackFilterIterator', 53 => 'ParentIterator', 54 => 'LimitIterator', 55 => 'CachingIterator', 56 => 'RecursiveCachingIterator', 57 => 'NoRewindIterator', 58 => 'AppendIterator', 59 => 'InfiniteIterator', 60 => 'RegexIterator', 61 => 'RecursiveRegexIterator', 62 => 'EmptyIterator', 63 => 'RecursiveTreeIterator', 64 => 'ArrayObject', 65 => 'ArrayIterator', 66 => 'RecursiveArrayIterator', 67 => 'SplFileInfo', 68 => 'DirectoryIterator', 69 => 'FilesystemIterator', 70 => 'RecursiveDirectoryIterator', 71 => 'GlobIterator', 72 => 'SplFileObject', 73 => 'SplTempFileObject', 74 => 'SplDoublyLinkedList', 75 => 'SplQueue', 76 => 'SplStack', 77 => 'SplHeap', 78 => 'SplMinHeap', 79 => 'SplMaxHeap', 80 => 'SplPriorityQueue', 81 => 'SplFixedArray', 82 => 'SplObjectStorage', 83 => 'MultipleIterator', 84 => 'SessionHandler', 85 => 'SodiumException', 86 => '__PHP_Incomplete_Class', 87 => 'php_user_filter', 88 => 'Directory', 89 => 'AssertionError', 90 => 'CURLFile', 91 => 'PDOException', 92 => 'PDO', 93 => 'PDOStatement', 94 => 'PDORow', 95 => 'finfo', 96 => 'PharException', 97 => 'Phar', 98 => 'PharData', 99 => 'PharFileInfo', 100 => 'AKAbstractObject', 101 => 'AKAbstractPart', 102 => 'AKAbstractUnarchiver', 103 => 'AKAbstractPostproc', 104 => 'AKAbstractPartObserver', 105 => 'AKPostprocDirect', 106 => 'AKPostprocFTP', 107 => 'AKPostprocSFTP', 108 => 'AKPostprocHybrid', 109 => 'AKUnarchiverJPA', 110 => 'AKUnarchiverZIP', 111 => 'AKUnarchiverJPS', 112 => 'AKCoreTimer', 113 => 'AKUtilsLister', 114 => 'AKText', 115 => 'AKFactory', 116 => 'AKEncryptionAES', 117 => 'AKKickstartUtils', 118 => 'ExtractionObserver', 119 => 'AKFeatureURLImport', 120 => 'Akeeba_Services_JSON', 121 => 'Akeeba_Services_JSON_Error']
2 A /var/www/html/uploads/ikstart.php 7999 $allClasses = [0 => 'stdClass', 1 => 'Exception', 2 => 'ErrorException', 3 => 'Error', 4 => 'ParseError', 5 => 'TypeError', 6 => 'ArgumentCountError', 7 => 'ArithmeticError', 8 => 'DivisionByZeroError', 9 => 'Closure', 10 => 'Generator', 11 => 'ClosedGeneratorException', 12 => 'DateTime', 13 => 'DateTimeImmutable', 14 => 'DateTimeZone', 15 => 'DateInterval', 16 => 'DatePeriod', 17 => 'LibXMLError', 18 => 'HashContext', 19 => 'ReflectionException', 20 => 'Reflection', 21 => 'ReflectionFunctionAbstract', 22 => 'ReflectionFunction', 23 => 'ReflectionGenerator', 24 => 'ReflectionParameter', 25 => 'ReflectionType', 26 => 'ReflectionNamedType', 27 => 'ReflectionMethod', 28 => 'ReflectionClass', 29 => 'ReflectionObject', 30 => 'ReflectionProperty', 31 => 'ReflectionClassConstant', 32 => 'ReflectionExtension', 33 => 'ReflectionZendExtension', 34 => 'LogicException', 35 => 'BadFunctionCallException', 36 => 'BadMethodCallException', 37 => 'DomainException', 38 => 'InvalidArgumentException', 39 => 'LengthException', 40 => 'OutOfRangeException', 41 => 'RuntimeException', 42 => 'OutOfBoundsException', 43 => 'OverflowException', 44 => 'RangeException', 45 => 'UnderflowException', 46 => 'UnexpectedValueException', 47 => 'RecursiveIteratorIterator', 48 => 'IteratorIterator', 49 => 'FilterIterator', 50 => 'RecursiveFilterIterator', 51 => 'CallbackFilterIterator', 52 => 'RecursiveCallbackFilterIterator', 53 => 'ParentIterator', 54 => 'LimitIterator', 55 => 'CachingIterator', 56 => 'RecursiveCachingIterator', 57 => 'NoRewindIterator', 58 => 'AppendIterator', 59 => 'InfiniteIterator', 60 => 'RegexIterator', 61 => 'RecursiveRegexIterator', 62 => 'EmptyIterator', 63 => 'RecursiveTreeIterator', 64 => 'ArrayObject', 65 => 'ArrayIterator', 66 => 'RecursiveArrayIterator', 67 => 'SplFileInfo', 68 => 'DirectoryIterator', 69 => 'FilesystemIterator', 70 => 'RecursiveDirectoryIterator', 71 => 'GlobIterator', 72 => 'SplFileObject', 73 => 'SplTempFileObject', 74 => 'SplDoublyLinkedList', 75 => 'SplQueue', 76 => 'SplStack', 77 => 'SplHeap', 78 => 'SplMinHeap', 79 => 'SplMaxHeap', 80 => 'SplPriorityQueue', 81 => 'SplFixedArray', 82 => 'SplObjectStorage', 83 => 'MultipleIterator', 84 => 'SessionHandler', 85 => 'SodiumException', 86 => '__PHP_Incomplete_Class', 87 => 'php_user_filter', 88 => 'Directory', 89 => 'AssertionError', 90 => 'CURLFile', 91 => 'PDOException', 92 => 'PDO', 93 => 'PDOStatement', 94 => 'PDORow', 95 => 'finfo', 96 => 'PharException', 97 => 'Phar', 98 => 'PharData', 99 => 'PharFileInfo', 100 => 'AKAbstractObject', 101 => 'AKAbstractPart', 102 => 'AKAbstractUnarchiver', 103 => 'AKAbstractPostproc', 104 => 'AKAbstractPartObserver', 105 => 'AKPostprocDirect', 106 => 'AKPostprocFTP', 107 => 'AKPostprocSFTP', 108 => 'AKPostprocHybrid', 109 => 'AKUnarchiverJPA', 110 => 'AKUnarchiverZIP', 111 => 'AKUnarchiverJPS', 112 => 'AKCoreTimer', 113 => 'AKUtilsLister', 114 => 'AKText', 115 => 'AKFactory', 116 => 'AKEncryptionAES', 117 => 'AKKickstartUtils', 118 => 'ExtractionObserver', 119 => 'AKFeatureURLImport', 120 => 'Akeeba_Services_JSON', 121 => 'Akeeba_Services_JSON_Error']
3 61 0 0.009305 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'stdClass' 0 9
3 61 1 0.009320 1985392
3 61 R 'stdClass'
3 62 0 0.009335 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'Exception' 0 9
3 62 1 0.009350 1985392
3 62 R 'Exception'
3 63 0 0.009364 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ErrorException' 0 9
3 63 1 0.009378 1985432
3 63 R 'ErrorExce'
3 64 0 0.009392 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'Error' 0 9
3 64 1 0.009405 1985392
3 64 R 'Error'
3 65 0 0.009418 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ParseError' 0 9
3 65 1 0.009432 1985432
3 65 R 'ParseErro'
3 66 0 0.009446 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'TypeError' 0 9
3 66 1 0.009464 1985392
3 66 R 'TypeError'
3 67 0 0.009478 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ArgumentCountError' 0 9
3 67 1 0.009492 1985432
3 67 R 'ArgumentC'
3 68 0 0.009506 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ArithmeticError' 0 9
3 68 1 0.009520 1985432
3 68 R 'Arithmeti'
3 69 0 0.009533 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'DivisionByZeroError' 0 9
3 69 1 0.009548 1985432
3 69 R 'DivisionB'
3 70 0 0.009561 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'Closure' 0 9
3 70 1 0.009574 1985392
3 70 R 'Closure'
3 71 0 0.009587 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'Generator' 0 9
3 71 1 0.009600 1985392
3 71 R 'Generator'
3 72 0 0.009614 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ClosedGeneratorException' 0 9
3 72 1 0.009629 1985432
3 72 R 'ClosedGen'
3 73 0 0.009642 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'DateTime' 0 9
3 73 1 0.009656 1985392
3 73 R 'DateTime'
3 74 0 0.009669 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'DateTimeImmutable' 0 9
3 74 1 0.009683 1985432
3 74 R 'DateTimeI'
3 75 0 0.009696 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'DateTimeZone' 0 9
3 75 1 0.009710 1985432
3 75 R 'DateTimeZ'
3 76 0 0.009769 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'DateInterval' 0 9
3 76 1 0.009783 1985432
3 76 R 'DateInter'
3 77 0 0.009796 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'DatePeriod' 0 9
3 77 1 0.009810 1985432
3 77 R 'DatePerio'
3 78 0 0.009823 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'LibXMLError' 0 9
3 78 1 0.009836 1985432
3 78 R 'LibXMLErr'
3 79 0 0.009849 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'HashContext' 0 9
3 79 1 0.009863 1985432
3 79 R 'HashConte'
3 80 0 0.009876 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionException' 0 9
3 80 1 0.009891 1985432
3 80 R 'Reflectio'
3 81 0 0.009904 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'Reflection' 0 9
3 81 1 0.009917 1985432
3 81 R 'Reflectio'
3 82 0 0.009930 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionFunctionAbstract' 0 9
3 82 1 0.009945 1985432
3 82 R 'Reflectio'
3 83 0 0.009958 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionFunction' 0 9
3 83 1 0.009971 1985432
3 83 R 'Reflectio'
3 84 0 0.009984 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionGenerator' 0 9
3 84 1 0.009998 1985432
3 84 R 'Reflectio'
3 85 0 0.010011 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionParameter' 0 9
3 85 1 0.010025 1985432
3 85 R 'Reflectio'
3 86 0 0.010038 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionType' 0 9
3 86 1 0.010052 1985432
3 86 R 'Reflectio'
3 87 0 0.010065 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionNamedType' 0 9
3 87 1 0.010079 1985432
3 87 R 'Reflectio'
3 88 0 0.010091 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionMethod' 0 9
3 88 1 0.010105 1985432
3 88 R 'Reflectio'
3 89 0 0.010119 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionClass' 0 9
3 89 1 0.010132 1985432
3 89 R 'Reflectio'
3 90 0 0.010145 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionObject' 0 9
3 90 1 0.010159 1985432
3 90 R 'Reflectio'
3 91 0 0.010172 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionProperty' 0 9
3 91 1 0.010185 1985432
3 91 R 'Reflectio'
3 92 0 0.010198 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionClassConstant' 0 9
3 92 1 0.010212 1985432
3 92 R 'Reflectio'
3 93 0 0.010231 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionExtension' 0 9
3 93 1 0.010245 1985432
3 93 R 'Reflectio'
3 94 0 0.010258 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ReflectionZendExtension' 0 9
3 94 1 0.010273 1985432
3 94 R 'Reflectio'
3 95 0 0.010285 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'LogicException' 0 9
3 95 1 0.010299 1985432
3 95 R 'LogicExce'
3 96 0 0.010312 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'BadFunctionCallException' 0 9
3 96 1 0.010327 1985432
3 96 R 'BadFuncti'
3 97 0 0.010341 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'BadMethodCallException' 0 9
3 97 1 0.010355 1985432
3 97 R 'BadMethod'
3 98 0 0.010368 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'DomainException' 0 9
3 98 1 0.010381 1985432
3 98 R 'DomainExc'
3 99 0 0.010395 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'InvalidArgumentException' 0 9
3 99 1 0.010409 1985432
3 99 R 'InvalidAr'
3 100 0 0.010422 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'LengthException' 0 9
3 100 1 0.010436 1985432
3 100 R 'LengthExc'
3 101 0 0.010450 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'OutOfRangeException' 0 9
3 101 1 0.010464 1985432
3 101 R 'OutOfRang'
3 102 0 0.010477 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'RuntimeException' 0 9
3 102 1 0.010491 1985432
3 102 R 'RuntimeEx'
3 103 0 0.010505 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'OutOfBoundsException' 0 9
3 103 1 0.010519 1985432
3 103 R 'OutOfBoun'
3 104 0 0.010532 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'OverflowException' 0 9
3 104 1 0.010546 1985432
3 104 R 'OverflowE'
3 105 0 0.010559 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'RangeException' 0 9
3 105 1 0.010573 1985432
3 105 R 'RangeExce'
3 106 0 0.010587 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'UnderflowException' 0 9
3 106 1 0.010600 1985432
3 106 R 'Underflow'
3 107 0 0.010614 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'UnexpectedValueException' 0 9
3 107 1 0.010628 1985432
3 107 R 'Unexpecte'
3 108 0 0.010642 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'RecursiveIteratorIterator' 0 9
3 108 1 0.010656 1985432
3 108 R 'Recursive'
3 109 0 0.010670 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'IteratorIterator' 0 9
3 109 1 0.010684 1985432
3 109 R 'IteratorI'
3 110 0 0.010697 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'FilterIterator' 0 9
3 110 1 0.010710 1985432
3 110 R 'FilterIte'
3 111 0 0.010724 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'RecursiveFilterIterator' 0 9
3 111 1 0.010738 1985432
3 111 R 'Recursive'
3 112 0 0.010751 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'CallbackFilterIterator' 0 9
3 112 1 0.010765 1985432
3 112 R 'CallbackF'
3 113 0 0.010779 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'RecursiveCallbackFilterIterator' 0 9
3 113 1 0.010793 1985432
3 113 R 'Recursive'
3 114 0 0.010807 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ParentIterator' 0 9
3 114 1 0.010820 1985432
3 114 R 'ParentIte'
3 115 0 0.010834 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'LimitIterator' 0 9
3 115 1 0.010847 1985432
3 115 R 'LimitIter'
3 116 0 0.010860 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'CachingIterator' 0 9
3 116 1 0.010874 1985432
3 116 R 'CachingIt'
3 117 0 0.010888 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'RecursiveCachingIterator' 0 9
3 117 1 0.010902 1985432
3 117 R 'Recursive'
3 118 0 0.010915 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'NoRewindIterator' 0 9
3 118 1 0.010929 1985432
3 118 R 'NoRewindI'
3 119 0 0.010946 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AppendIterator' 0 9
3 119 1 0.010960 1985432
3 119 R 'AppendIte'
3 120 0 0.010973 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'InfiniteIterator' 0 9
3 120 1 0.010987 1985432
3 120 R 'InfiniteI'
3 121 0 0.011000 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'RegexIterator' 0 9
3 121 1 0.011013 1985432
3 121 R 'RegexIter'
3 122 0 0.011027 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'RecursiveRegexIterator' 0 9
3 122 1 0.011040 1985432
3 122 R 'Recursive'
3 123 0 0.011053 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'EmptyIterator' 0 9
3 123 1 0.011066 1985432
3 123 R 'EmptyIter'
3 124 0 0.011080 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'RecursiveTreeIterator' 0 9
3 124 1 0.011094 1985432
3 124 R 'Recursive'
3 125 0 0.011107 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ArrayObject' 0 9
3 125 1 0.011121 1985432
3 125 R 'ArrayObje'
3 126 0 0.011134 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ArrayIterator' 0 9
3 126 1 0.011274 1985432
3 126 R 'ArrayIter'
3 127 0 0.011290 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'RecursiveArrayIterator' 0 9
3 127 1 0.011305 1985432
3 127 R 'Recursive'
3 128 0 0.011318 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SplFileInfo' 0 9
3 128 1 0.011331 1985432
3 128 R 'SplFileIn'
3 129 0 0.011344 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'DirectoryIterator' 0 9
3 129 1 0.011358 1985432
3 129 R 'Directory'
3 130 0 0.011372 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'FilesystemIterator' 0 9
3 130 1 0.011385 1985432
3 130 R 'Filesyste'
3 131 0 0.011398 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'RecursiveDirectoryIterator' 0 9
3 131 1 0.011413 1985432
3 131 R 'Recursive'
3 132 0 0.011426 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'GlobIterator' 0 9
3 132 1 0.011439 1985432
3 132 R 'GlobItera'
3 133 0 0.011452 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SplFileObject' 0 9
3 133 1 0.011466 1985432
3 133 R 'SplFileOb'
3 134 0 0.011479 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SplTempFileObject' 0 9
3 134 1 0.011494 1985432
3 134 R 'SplTempFi'
3 135 0 0.011507 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SplDoublyLinkedList' 0 9
3 135 1 0.011521 1985432
3 135 R 'SplDoubly'
3 136 0 0.011534 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SplQueue' 0 9
3 136 1 0.011547 1985392
3 136 R 'SplQueue'
3 137 0 0.011561 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SplStack' 0 9
3 137 1 0.011574 1985392
3 137 R 'SplStack'
3 138 0 0.011587 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SplHeap' 0 9
3 138 1 0.011601 1985392
3 138 R 'SplHeap'
3 139 0 0.011614 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SplMinHeap' 0 9
3 139 1 0.011627 1985432
3 139 R 'SplMinHea'
3 140 0 0.011640 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SplMaxHeap' 0 9
3 140 1 0.011654 1985432
3 140 R 'SplMaxHea'
3 141 0 0.011667 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SplPriorityQueue' 0 9
3 141 1 0.011682 1985432
3 141 R 'SplPriori'
3 142 0 0.011695 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SplFixedArray' 0 9
3 142 1 0.011709 1985432
3 142 R 'SplFixedA'
3 143 0 0.011722 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SplObjectStorage' 0 9
3 143 1 0.011736 1985432
3 143 R 'SplObject'
3 144 0 0.011750 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'MultipleIterator' 0 9
3 144 1 0.011764 1985432
3 144 R 'MultipleI'
3 145 0 0.011778 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SessionHandler' 0 9
3 145 1 0.011796 1985432
3 145 R 'SessionHa'
3 146 0 0.011811 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'SodiumException' 0 9
3 146 1 0.011824 1985432
3 146 R 'SodiumExc'
3 147 0 0.011838 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 '__PHP_Incomplete_Class' 0 9
3 147 1 0.011852 1985432
3 147 R '__PHP_Inc'
3 148 0 0.011865 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'php_user_filter' 0 9
3 148 1 0.011879 1985432
3 148 R 'php_user_'
3 149 0 0.011892 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'Directory' 0 9
3 149 1 0.011906 1985392
3 149 R 'Directory'
3 150 0 0.011919 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AssertionError' 0 9
3 150 1 0.011932 1985432
3 150 R 'Assertion'
3 151 0 0.011946 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'CURLFile' 0 9
3 151 1 0.011959 1985392
3 151 R 'CURLFile'
3 152 0 0.011972 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'PDOException' 0 9
3 152 1 0.011987 1985432
3 152 R 'PDOExcept'
3 153 0 0.012001 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'PDO' 0 9
3 153 1 0.012014 1985392
3 153 R 'PDO'
3 154 0 0.012028 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'PDOStatement' 0 9
3 154 1 0.012042 1985432
3 154 R 'PDOStatem'
3 155 0 0.012055 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'PDORow' 0 9
3 155 1 0.012068 1985392
3 155 R 'PDORow'
3 156 0 0.012081 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'finfo' 0 9
3 156 1 0.012094 1985392
3 156 R 'finfo'
3 157 0 0.012107 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'PharException' 0 9
3 157 1 0.012121 1985432
3 157 R 'PharExcep'
3 158 0 0.012135 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'Phar' 0 9
3 158 1 0.012148 1985392
3 158 R 'Phar'
3 159 0 0.012161 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'PharData' 0 9
3 159 1 0.012174 1985392
3 159 R 'PharData'
3 160 0 0.012187 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'PharFileInfo' 0 9
3 160 1 0.012201 1985432
3 160 R 'PharFileI'
3 161 0 0.012215 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKAbstractObject' 0 9
3 161 1 0.012229 1985432
3 161 R 'AKAbstrac'
3 162 0 0.012250 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKAbstractPart' 0 9
3 162 1 0.012264 1985432
3 162 R 'AKAbstrac'
3 163 0 0.012277 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKAbstractUnarchiver' 0 9
3 163 1 0.012291 1985432
3 163 R 'AKAbstrac'
3 164 0 0.012305 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKAbstractPostproc' 0 9
3 164 1 0.012318 1985432
3 164 R 'AKAbstrac'
3 165 0 0.012332 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKAbstractPartObserver' 0 9
3 165 1 0.012346 1985432
3 165 R 'AKAbstrac'
3 166 0 0.012359 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKPostprocDirect' 0 9
3 166 1 0.012373 1985432
3 166 R 'AKPostpro'
3 167 0 0.012386 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKPostprocFTP' 0 9
3 167 1 0.012400 1985432
3 167 R 'AKPostpro'
3 168 0 0.012413 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKPostprocSFTP' 0 9
3 168 1 0.012427 1985432
3 168 R 'AKPostpro'
3 169 0 0.012440 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKPostprocHybrid' 0 9
3 169 1 0.012454 1985432
3 169 R 'AKPostpro'
3 170 0 0.012467 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKUnarchiverJPA' 0 9
3 170 1 0.012481 1985432
3 170 R 'AKUnarchi'
3 171 0 0.012494 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKUnarchiverZIP' 0 9
3 171 1 0.012508 1985432
3 171 R 'AKUnarchi'
3 172 0 0.012525 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKUnarchiverJPS' 0 9
3 172 1 0.012539 1985432
3 172 R 'AKUnarchi'
3 173 0 0.012552 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKCoreTimer' 0 9
3 173 1 0.012565 1985432
3 173 R 'AKCoreTim'
3 174 0 0.012578 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKUtilsLister' 0 9
3 174 1 0.012592 1985432
3 174 R 'AKUtilsLi'
3 175 0 0.012605 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKText' 0 9
3 175 1 0.012618 1985392
3 175 R 'AKText'
3 176 0 0.012631 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKFactory' 0 9
3 176 1 0.012644 1985392
3 176 R 'AKFactory'
3 177 0 0.012657 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKEncryptionAES' 0 9
3 177 1 0.012671 1985432
3 177 R 'AKEncrypt'
3 178 0 0.012684 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKKickstartUtils' 0 9
3 178 1 0.012697 1985432
3 178 R 'AKKicksta'
3 179 0 0.012710 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'ExtractionObserver' 0 9
3 179 1 0.012724 1985432
3 179 R 'Extractio'
3 180 0 0.012737 1985296 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'AKFeatureURLImport' 0 9
3 180 1 0.012751 1985432
3 180 R 'AKFeature'
2 A /var/www/html/uploads/ikstart.php 8002 $extraFeatureObjects[] = class AKFeatureURLImport { private $params = [] }
3 182 0 0.012786 1986104 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'Akeeba_Services_JSON' 0 9
3 182 1 0.012800 1986240
3 182 R 'Akeeba_Se'
3 183 0 0.012814 1986104 substr 0 /var/www/html/uploads/ikstart.php 8001 3 'Akeeba_Services_JSON_Error' 0 9
3 183 1 0.012828 1986240
3 183 R 'Akeeba_Se'
2 59 1 0.012843 1977856
1 A /var/www/html/uploads/ikstart.php 10478 $retArray = ['status' => TRUE, 'message' => NULL]
2 184 0 0.012867 1977856 getQueryParam 1 /var/www/html/uploads/ikstart.php 10482 2 'task' 'display'
2 A /var/www/html/uploads/ikstart.php 208 $value = 'display'
3 185 0 0.012892 1977856 array_key_exists 0 /var/www/html/uploads/ikstart.php 210 2 'task' []
3 185 1 0.012906 1977920
3 185 R FALSE
3 186 0 0.012919 1977856 get_magic_quotes_gpc 0 /var/www/html/uploads/ikstart.php 215 0
3 186 1 0.012932 1977856
3 186 R FALSE
2 184 1 0.012945 1977856
2 184 R 'display'
1 A /var/www/html/uploads/ikstart.php 10482 $task = 'display'
2 187 0 0.012969 1977856 getQueryParam 1 /var/www/html/uploads/ikstart.php 10483 2 'json' ???
2 A /var/www/html/uploads/ikstart.php 208 $value = NULL
3 188 0 0.012992 1977856 array_key_exists 0 /var/www/html/uploads/ikstart.php 210 2 'json' []
3 188 1 0.013006 1977920
3 188 R FALSE
3 189 0 0.013018 1977856 get_magic_quotes_gpc 0 /var/www/html/uploads/ikstart.php 215 0
3 189 1 0.013030 1977856
3 189 R FALSE
2 187 1 0.013043 1977856
2 187 R NULL
1 A /var/www/html/uploads/ikstart.php 10483 $json = NULL
1 A /var/www/html/uploads/ikstart.php 10484 $ajax = TRUE
1 A /var/www/html/uploads/ikstart.php 10691 $ajax = FALSE
2 190 0 0.013093 1977856 echoPage 1 /var/www/html/uploads/ikstart.php 10692 0
2 A /var/www/html/uploads/ikstart.php 10171 $edition = 'Core'
3 191 0 0.013118 1977856 AKKickstartUtils::getBestArchivePath 1 /var/www/html/uploads/ikstart.php 10172 0
4 192 0 0.013134 1977856 AKKickstartUtils::getPath 1 /var/www/html/uploads/ikstart.php 7784 0
4 A /var/www/html/uploads/ikstart.php 7814 $path = '/var/www/html/uploads'
5 193 0 0.013159 1977856 str_replace 0 /var/www/html/uploads/ikstart.php 7815 3 '\\' '/' '/var/www/html/uploads'
5 193 1 0.013175 1977952
5 193 R '/var/www/html/uploads'
5 194 0 0.013190 1977856 rtrim 0 /var/www/html/uploads/ikstart.php 7815 2 '/var/www/html/uploads' '/'
5 194 1 0.013203 1977928
5 194 R '/var/www/html/uploads'
4 A /var/www/html/uploads/ikstart.php 7815 $path = '/var/www/html/uploads'
4 A /var/www/html/uploads/ikstart.php 7818 $path .= '/'
4 192 1 0.013244 1977904
4 192 R '/var/www/html/uploads/'
3 A /var/www/html/uploads/ikstart.php 7784 $basePath = '/var/www/html/uploads/'
4 195 0 0.013268 1977904 rtrim 0 /var/www/html/uploads/ikstart.php 7785 2 '/var/www/html/uploads/' '/\\'
4 195 1 0.013282 1978024
4 195 R '/var/www/html/uploads'
3 A /var/www/html/uploads/ikstart.php 7785 $basePathSlash = '/var/www/html/uploads/'
3 A /var/www/html/uploads/ikstart.php 7791 $paths = [0 => '/var/www/html/uploads/', 1 => '/var/www/html/uploads/administrator/components/com_akeeba/backup', 2 => '/var/www/html/uploads/backups', 3 => '/var/www/html/uploads/wp-content/plugins/akeebabackupwp/app/backups']
4 196 0 0.013326 1978576 AKKickstartUtils::findArchives 1 /var/www/html/uploads/ikstart.php 7796 1 '/var/www/html/uploads/'
4 A /var/www/html/uploads/ikstart.php 7833 $ret = []
5 197 0 0.013352 1978576 opendir 0 /var/www/html/uploads/ikstart.php 7845 1 '/var/www/html/uploads/'
5 197 1 0.013379 1978856
5 197 R resource(5) of type (stream)
4 A /var/www/html/uploads/ikstart.php 7845 $dh = resource(5) of type (stream)
5 198 0 0.013407 1978824 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(5) of type (stream)
5 198 1 0.013427 1978896
5 198 R '..'
4 A /var/www/html/uploads/ikstart.php 7852 $file = '..'
5 199 0 0.013452 1978856 strrpos 0 /var/www/html/uploads/ikstart.php 7854 2 '..' '.'
5 199 1 0.013465 1978928
5 199 R 1
4 A /var/www/html/uploads/ikstart.php 7854 $dotpos = 1
5 200 0 0.013488 1978856 substr 0 /var/www/html/uploads/ikstart.php 7866 2 '..' 2
5 200 1 0.013502 1978920
5 200 R ''
5 201 0 0.013514 1978856 strtolower 0 /var/www/html/uploads/ikstart.php 7866 1 ''
5 201 1 0.013527 1978888
5 201 R ''
4 A /var/www/html/uploads/ikstart.php 7866 $extension = ''
5 202 0 0.013549 1978856 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(5) of type (stream)
5 202 1 0.013563 1978928
5 202 R '.'
4 A /var/www/html/uploads/ikstart.php 7852 $file = '.'
5 203 0 0.013585 1978856 strrpos 0 /var/www/html/uploads/ikstart.php 7854 2 '.' '.'
5 203 1 0.013598 1978928
5 203 R 0
4 A /var/www/html/uploads/ikstart.php 7854 $dotpos = 0
5 204 0 0.013620 1978856 substr 0 /var/www/html/uploads/ikstart.php 7866 2 '.' 1
5 204 1 0.013633 1978920
5 204 R ''
5 205 0 0.013645 1978856 strtolower 0 /var/www/html/uploads/ikstart.php 7866 1 ''
5 205 1 0.013657 1978888
5 205 R ''
4 A /var/www/html/uploads/ikstart.php 7866 $extension = ''
5 206 0 0.013679 1978856 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(5) of type (stream)
5 206 1 0.013692 1978936
5 206 R 'prepend.php'
4 A /var/www/html/uploads/ikstart.php 7852 $file = 'prepend.php'
5 207 0 0.013716 1978864 strrpos 0 /var/www/html/uploads/ikstart.php 7854 2 'prepend.php' '.'
5 207 1 0.013729 1978936
5 207 R 7
4 A /var/www/html/uploads/ikstart.php 7854 $dotpos = 7
5 208 0 0.013751 1978864 substr 0 /var/www/html/uploads/ikstart.php 7866 2 'prepend.php' 8
5 208 1 0.013764 1978960
5 208 R 'php'
5 209 0 0.013776 1978896 strtolower 0 /var/www/html/uploads/ikstart.php 7866 1 'php'
5 209 1 0.013789 1978928
5 209 R 'php'
4 A /var/www/html/uploads/ikstart.php 7866 $extension = 'php'
5 210 0 0.013812 1978896 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(5) of type (stream)
5 210 1 0.013826 1978968
5 210 R 'data'
4 A /var/www/html/uploads/ikstart.php 7852 $file = 'data'
5 211 0 0.013849 1978888 strrpos 0 /var/www/html/uploads/ikstart.php 7854 2 'data' '.'
5 211 1 0.013861 1978960
5 211 R FALSE
4 A /var/www/html/uploads/ikstart.php 7854 $dotpos = FALSE
5 212 0 0.013884 1978888 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(5) of type (stream)
5 212 1 0.013897 1978968
5 212 R '.htaccess'
4 A /var/www/html/uploads/ikstart.php 7852 $file = '.htaccess'
5 213 0 0.013920 1978896 strrpos 0 /var/www/html/uploads/ikstart.php 7854 2 '.htaccess' '.'
5 213 1 0.013933 1978968
5 213 R 0
4 A /var/www/html/uploads/ikstart.php 7854 $dotpos = 0
5 214 0 0.013959 1978896 substr 0 /var/www/html/uploads/ikstart.php 7866 2 '.htaccess' 1
5 214 1 0.013972 1979000
5 214 R 'htaccess'
5 215 0 0.013985 1978936 strtolower 0 /var/www/html/uploads/ikstart.php 7866 1 'htaccess'
5 215 1 0.013997 1978968
5 215 R 'htaccess'
4 A /var/www/html/uploads/ikstart.php 7866 $extension = 'htaccess'
5 216 0 0.014021 1978904 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(5) of type (stream)
5 216 1 0.014034 1978984
5 216 R 'ikstart.php'
4 A /var/www/html/uploads/ikstart.php 7852 $file = 'ikstart.php'
5 217 0 0.014058 1978904 strrpos 0 /var/www/html/uploads/ikstart.php 7854 2 'ikstart.php' '.'
5 217 1 0.014070 1978976
5 217 R 7
4 A /var/www/html/uploads/ikstart.php 7854 $dotpos = 7
5 218 0 0.014092 1978904 substr 0 /var/www/html/uploads/ikstart.php 7866 2 'ikstart.php' 8
5 218 1 0.014105 1979000
5 218 R 'php'
5 219 0 0.014117 1978936 strtolower 0 /var/www/html/uploads/ikstart.php 7866 1 'php'
5 219 1 0.014129 1978968
5 219 R 'php'
4 A /var/www/html/uploads/ikstart.php 7866 $extension = 'php'
5 220 0 0.014152 1978896 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(5) of type (stream)
5 220 1 0.014167 1978936
5 220 R FALSE
4 A /var/www/html/uploads/ikstart.php 7852 $file = FALSE
5 221 0 0.014190 1978856 closedir 0 /var/www/html/uploads/ikstart.php 7874 1 resource(5) of type (stream)
5 221 1 0.014207 1978672
5 221 R NULL
5 222 0 0.014220 1978632 dir 0 /var/www/html/uploads/ikstart.php 7882 1 '/var/www/html/uploads/'
5 222 1 0.014239 1979448
5 222 R class Directory { public $path = '/var/www/html/uploads/'; public $handle = resource(6) of type (stream) }
4 A /var/www/html/uploads/ikstart.php 7882 $d = class Directory { public $path = '/var/www/html/uploads/'; public $handle = resource(6) of type (stream) }
5 223 0 0.014282 1979408 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 223 1 0.014299 1979440
5 223 R '..'
4 A /var/www/html/uploads/ikstart.php 7884 $file = '..'
5 224 0 0.014321 1979440 strrpos 0 /var/www/html/uploads/ikstart.php 7886 2 '..' '.'
5 224 1 0.014334 1979512
5 224 R 1
4 A /var/www/html/uploads/ikstart.php 7886 $dotpos = 1
5 225 0 0.014357 1979440 substr 0 /var/www/html/uploads/ikstart.php 7898 2 '..' 2
5 225 1 0.014369 1979504
5 225 R ''
5 226 0 0.014381 1979440 strtolower 0 /var/www/html/uploads/ikstart.php 7898 1 ''
5 226 1 0.014393 1979472
5 226 R ''
4 A /var/www/html/uploads/ikstart.php 7898 $extension = ''
5 227 0 0.014416 1979408 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 227 1 0.014428 1979440
5 227 R '.'
4 A /var/www/html/uploads/ikstart.php 7884 $file = '.'
5 228 0 0.014451 1979408 strrpos 0 /var/www/html/uploads/ikstart.php 7886 2 '.' '.'
5 228 1 0.014464 1979480
5 228 R 0
4 A /var/www/html/uploads/ikstart.php 7886 $dotpos = 0
5 229 0 0.014485 1979408 substr 0 /var/www/html/uploads/ikstart.php 7898 2 '.' 1
5 229 1 0.014498 1979472
5 229 R ''
5 230 0 0.014510 1979408 strtolower 0 /var/www/html/uploads/ikstart.php 7898 1 ''
5 230 1 0.014522 1979440
5 230 R ''
4 A /var/www/html/uploads/ikstart.php 7898 $extension = ''
5 231 0 0.014544 1979408 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 231 1 0.014556 1979448
5 231 R 'prepend.php'
4 A /var/www/html/uploads/ikstart.php 7884 $file = 'prepend.php'
5 232 0 0.014580 1979416 strrpos 0 /var/www/html/uploads/ikstart.php 7886 2 'prepend.php' '.'
5 232 1 0.014593 1979488
5 232 R 7
4 A /var/www/html/uploads/ikstart.php 7886 $dotpos = 7
5 233 0 0.014615 1979416 substr 0 /var/www/html/uploads/ikstart.php 7898 2 'prepend.php' 8
5 233 1 0.014628 1979512
5 233 R 'php'
5 234 0 0.014641 1979448 strtolower 0 /var/www/html/uploads/ikstart.php 7898 1 'php'
5 234 1 0.014653 1979480
5 234 R 'php'
4 A /var/www/html/uploads/ikstart.php 7898 $extension = 'php'
5 235 0 0.014680 1979448 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 235 1 0.014693 1979480
5 235 R 'data'
4 A /var/www/html/uploads/ikstart.php 7884 $file = 'data'
5 236 0 0.014715 1979440 strrpos 0 /var/www/html/uploads/ikstart.php 7886 2 'data' '.'
5 236 1 0.014728 1979512
5 236 R FALSE
4 A /var/www/html/uploads/ikstart.php 7886 $dotpos = FALSE
5 237 0 0.014750 1979440 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 237 1 0.014763 1979480
5 237 R '.htaccess'
4 A /var/www/html/uploads/ikstart.php 7884 $file = '.htaccess'
5 238 0 0.014786 1979448 strrpos 0 /var/www/html/uploads/ikstart.php 7886 2 '.htaccess' '.'
5 238 1 0.014799 1979520
5 238 R 0
4 A /var/www/html/uploads/ikstart.php 7886 $dotpos = 0
5 239 0 0.014821 1979448 substr 0 /var/www/html/uploads/ikstart.php 7898 2 '.htaccess' 1
5 239 1 0.014833 1979552
5 239 R 'htaccess'
5 240 0 0.014846 1979488 strtolower 0 /var/www/html/uploads/ikstart.php 7898 1 'htaccess'
5 240 1 0.014859 1979520
5 240 R 'htaccess'
4 A /var/www/html/uploads/ikstart.php 7898 $extension = 'htaccess'
5 241 0 0.014881 1979456 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 241 1 0.014894 1979496
5 241 R 'ikstart.php'
4 A /var/www/html/uploads/ikstart.php 7884 $file = 'ikstart.php'
5 242 0 0.014918 1979456 strrpos 0 /var/www/html/uploads/ikstart.php 7886 2 'ikstart.php' '.'
5 242 1 0.014930 1979528
5 242 R 7
4 A /var/www/html/uploads/ikstart.php 7886 $dotpos = 7
5 243 0 0.014952 1979456 substr 0 /var/www/html/uploads/ikstart.php 7898 2 'ikstart.php' 8
5 243 1 0.014965 1979552
5 243 R 'php'
5 244 0 0.014977 1979488 strtolower 0 /var/www/html/uploads/ikstart.php 7898 1 'php'
5 244 1 0.014989 1979520
5 244 R 'php'
4 A /var/www/html/uploads/ikstart.php 7898 $extension = 'php'
5 245 0 0.015011 1979448 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 245 1 0.015024 1979448
5 245 R FALSE
4 A /var/www/html/uploads/ikstart.php 7884 $file = FALSE
4 196 1 0.015047 1978824
4 196 R []
3 A /var/www/html/uploads/ikstart.php 7796 $archives = []
4 246 0 0.015071 1978824 AKKickstartUtils::findArchives 1 /var/www/html/uploads/ikstart.php 7796 1 '/var/www/html/uploads/administrator/components/com_akeeba/backup'
4 A /var/www/html/uploads/ikstart.php 7833 $ret = []
5 247 0 0.015097 1978824 opendir 0 /var/www/html/uploads/ikstart.php 7845 1 '/var/www/html/uploads/administrator/components/com_akeeba/backup'
5 247 1 0.015227 1978856
5 247 R FALSE
4 A /var/www/html/uploads/ikstart.php 7845 $dh = FALSE
4 246 1 0.015256 1978824
4 246 R []
3 A /var/www/html/uploads/ikstart.php 7796 $archives = []
4 248 0 0.015279 1978824 AKKickstartUtils::findArchives 1 /var/www/html/uploads/ikstart.php 7796 1 '/var/www/html/uploads/backups'
4 A /var/www/html/uploads/ikstart.php 7833 $ret = []
5 249 0 0.015304 1978824 opendir 0 /var/www/html/uploads/ikstart.php 7845 1 '/var/www/html/uploads/backups'
5 249 1 0.015328 1978856
5 249 R FALSE
4 A /var/www/html/uploads/ikstart.php 7845 $dh = FALSE
4 248 1 0.015352 1978824
4 248 R []
3 A /var/www/html/uploads/ikstart.php 7796 $archives = []
4 250 0 0.015375 1978824 AKKickstartUtils::findArchives 1 /var/www/html/uploads/ikstart.php 7796 1 '/var/www/html/uploads/wp-content/plugins/akeebabackupwp/app/backups'
4 A /var/www/html/uploads/ikstart.php 7833 $ret = []
5 251 0 0.015400 1978824 opendir 0 /var/www/html/uploads/ikstart.php 7845 1 '/var/www/html/uploads/wp-content/plugins/akeebabackupwp/app/backups'
5 251 1 0.015423 1978856
5 251 R FALSE
4 A /var/www/html/uploads/ikstart.php 7845 $dh = FALSE
4 250 1 0.015446 1978824
4 250 R []
3 A /var/www/html/uploads/ikstart.php 7796 $archives = []
3 191 1 0.015469 1978152
3 191 R '/var/www/html/uploads/'
2 A /var/www/html/uploads/ikstart.php 10172 $bestArchivePath = '/var/www/html/uploads/'
3 252 0 0.015495 1978152 AKKickstartUtils::getArchivesAsOptions 1 /var/www/html/uploads/ikstart.php 10173 1 '/var/www/html/uploads/'
3 A /var/www/html/uploads/ikstart.php 7918 $ret = ''
4 253 0 0.015525 1978152 AKKickstartUtils::findArchives 1 /var/www/html/uploads/ikstart.php 7920 1 '/var/www/html/uploads/'
4 A /var/www/html/uploads/ikstart.php 7833 $ret = []
5 254 0 0.015549 1978152 opendir 0 /var/www/html/uploads/ikstart.php 7845 1 '/var/www/html/uploads/'
5 254 1 0.015569 1978184
5 254 R resource(7) of type (stream)
4 A /var/www/html/uploads/ikstart.php 7845 $dh = resource(7) of type (stream)
5 255 0 0.015595 1978152 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(7) of type (stream)
5 255 1 0.015612 1978224
5 255 R '..'
4 A /var/www/html/uploads/ikstart.php 7852 $file = '..'
5 256 0 0.015635 1978184 strrpos 0 /var/www/html/uploads/ikstart.php 7854 2 '..' '.'
5 256 1 0.015648 1978256
5 256 R 1
4 A /var/www/html/uploads/ikstart.php 7854 $dotpos = 1
5 257 0 0.015671 1978184 substr 0 /var/www/html/uploads/ikstart.php 7866 2 '..' 2
5 257 1 0.015684 1978248
5 257 R ''
5 258 0 0.015696 1978184 strtolower 0 /var/www/html/uploads/ikstart.php 7866 1 ''
5 258 1 0.015708 1978216
5 258 R ''
4 A /var/www/html/uploads/ikstart.php 7866 $extension = ''
5 259 0 0.015730 1978184 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(7) of type (stream)
5 259 1 0.015743 1978256
5 259 R '.'
4 A /var/www/html/uploads/ikstart.php 7852 $file = '.'
5 260 0 0.015766 1978184 strrpos 0 /var/www/html/uploads/ikstart.php 7854 2 '.' '.'
5 260 1 0.015778 1978256
5 260 R 0
4 A /var/www/html/uploads/ikstart.php 7854 $dotpos = 0
5 261 0 0.015800 1978184 substr 0 /var/www/html/uploads/ikstart.php 7866 2 '.' 1
5 261 1 0.015813 1978248
5 261 R ''
5 262 0 0.015825 1978184 strtolower 0 /var/www/html/uploads/ikstart.php 7866 1 ''
5 262 1 0.015837 1978216
5 262 R ''
4 A /var/www/html/uploads/ikstart.php 7866 $extension = ''
5 263 0 0.015859 1978184 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(7) of type (stream)
5 263 1 0.015872 1978264
5 263 R 'prepend.php'
4 A /var/www/html/uploads/ikstart.php 7852 $file = 'prepend.php'
5 264 0 0.015896 1978192 strrpos 0 /var/www/html/uploads/ikstart.php 7854 2 'prepend.php' '.'
5 264 1 0.015909 1978264
5 264 R 7
4 A /var/www/html/uploads/ikstart.php 7854 $dotpos = 7
5 265 0 0.015931 1978192 substr 0 /var/www/html/uploads/ikstart.php 7866 2 'prepend.php' 8
5 265 1 0.015944 1978288
5 265 R 'php'
5 266 0 0.015957 1978224 strtolower 0 /var/www/html/uploads/ikstart.php 7866 1 'php'
5 266 1 0.015969 1978256
5 266 R 'php'
4 A /var/www/html/uploads/ikstart.php 7866 $extension = 'php'
5 267 0 0.015991 1978224 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(7) of type (stream)
5 267 1 0.016005 1978296
5 267 R 'data'
4 A /var/www/html/uploads/ikstart.php 7852 $file = 'data'
5 268 0 0.016027 1978216 strrpos 0 /var/www/html/uploads/ikstart.php 7854 2 'data' '.'
5 268 1 0.016040 1978288
5 268 R FALSE
4 A /var/www/html/uploads/ikstart.php 7854 $dotpos = FALSE
5 269 0 0.016062 1978216 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(7) of type (stream)
5 269 1 0.016075 1978296
5 269 R '.htaccess'
4 A /var/www/html/uploads/ikstart.php 7852 $file = '.htaccess'
5 270 0 0.016098 1978224 strrpos 0 /var/www/html/uploads/ikstart.php 7854 2 '.htaccess' '.'
5 270 1 0.016111 1978296
5 270 R 0
4 A /var/www/html/uploads/ikstart.php 7854 $dotpos = 0
5 271 0 0.016133 1978224 substr 0 /var/www/html/uploads/ikstart.php 7866 2 '.htaccess' 1
5 271 1 0.016146 1978328
5 271 R 'htaccess'
5 272 0 0.016159 1978264 strtolower 0 /var/www/html/uploads/ikstart.php 7866 1 'htaccess'
5 272 1 0.016171 1978296
5 272 R 'htaccess'
4 A /var/www/html/uploads/ikstart.php 7866 $extension = 'htaccess'
5 273 0 0.016195 1978232 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(7) of type (stream)
5 273 1 0.016212 1978312
5 273 R 'ikstart.php'
4 A /var/www/html/uploads/ikstart.php 7852 $file = 'ikstart.php'
5 274 0 0.016242 1978232 strrpos 0 /var/www/html/uploads/ikstart.php 7854 2 'ikstart.php' '.'
5 274 1 0.016255 1978304
5 274 R 7
4 A /var/www/html/uploads/ikstart.php 7854 $dotpos = 7
5 275 0 0.016276 1978232 substr 0 /var/www/html/uploads/ikstart.php 7866 2 'ikstart.php' 8
5 275 1 0.016289 1978328
5 275 R 'php'
5 276 0 0.016302 1978264 strtolower 0 /var/www/html/uploads/ikstart.php 7866 1 'php'
5 276 1 0.016314 1978296
5 276 R 'php'
4 A /var/www/html/uploads/ikstart.php 7866 $extension = 'php'
5 277 0 0.016337 1978224 readdir 0 /var/www/html/uploads/ikstart.php 7852 1 resource(7) of type (stream)
5 277 1 0.016351 1978264
5 277 R FALSE
4 A /var/www/html/uploads/ikstart.php 7852 $file = FALSE
5 278 0 0.016374 1978184 closedir 0 /var/www/html/uploads/ikstart.php 7874 1 resource(7) of type (stream)
5 278 1 0.016389 1978000
5 278 R NULL
5 279 0 0.016402 1977960 dir 0 /var/www/html/uploads/ikstart.php 7882 1 '/var/www/html/uploads/'
5 279 1 0.016419 1978776
5 279 R class Directory { public $path = '/var/www/html/uploads/'; public $handle = resource(8) of type (stream) }
4 A /var/www/html/uploads/ikstart.php 7882 $d = class Directory { public $path = '/var/www/html/uploads/'; public $handle = resource(8) of type (stream) }
5 280 0 0.016456 1978736 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 280 1 0.016472 1978768
5 280 R '..'
4 A /var/www/html/uploads/ikstart.php 7884 $file = '..'
5 281 0 0.016495 1978768 strrpos 0 /var/www/html/uploads/ikstart.php 7886 2 '..' '.'
5 281 1 0.016507 1978840
5 281 R 1
4 A /var/www/html/uploads/ikstart.php 7886 $dotpos = 1
5 282 0 0.016529 1978768 substr 0 /var/www/html/uploads/ikstart.php 7898 2 '..' 2
5 282 1 0.016542 1978832
5 282 R ''
5 283 0 0.016554 1978768 strtolower 0 /var/www/html/uploads/ikstart.php 7898 1 ''
5 283 1 0.016566 1978800
5 283 R ''
4 A /var/www/html/uploads/ikstart.php 7898 $extension = ''
5 284 0 0.016588 1978736 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 284 1 0.016601 1978768
5 284 R '.'
4 A /var/www/html/uploads/ikstart.php 7884 $file = '.'
5 285 0 0.016623 1978736 strrpos 0 /var/www/html/uploads/ikstart.php 7886 2 '.' '.'
5 285 1 0.016635 1978808
5 285 R 0
4 A /var/www/html/uploads/ikstart.php 7886 $dotpos = 0
5 286 0 0.016657 1978736 substr 0 /var/www/html/uploads/ikstart.php 7898 2 '.' 1
5 286 1 0.016669 1978800
5 286 R ''
5 287 0 0.016681 1978736 strtolower 0 /var/www/html/uploads/ikstart.php 7898 1 ''
5 287 1 0.016693 1978768
5 287 R ''
4 A /var/www/html/uploads/ikstart.php 7898 $extension = ''
5 288 0 0.016714 1978736 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 288 1 0.016726 1978776
5 288 R 'prepend.php'
4 A /var/www/html/uploads/ikstart.php 7884 $file = 'prepend.php'
5 289 0 0.016750 1978744 strrpos 0 /var/www/html/uploads/ikstart.php 7886 2 'prepend.php' '.'
5 289 1 0.016763 1978816
5 289 R 7
4 A /var/www/html/uploads/ikstart.php 7886 $dotpos = 7
5 290 0 0.016784 1978744 substr 0 /var/www/html/uploads/ikstart.php 7898 2 'prepend.php' 8
5 290 1 0.016797 1978840
5 290 R 'php'
5 291 0 0.016809 1978776 strtolower 0 /var/www/html/uploads/ikstart.php 7898 1 'php'
5 291 1 0.016821 1978808
5 291 R 'php'
4 A /var/www/html/uploads/ikstart.php 7898 $extension = 'php'
5 292 0 0.016844 1978776 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 292 1 0.016857 1978808
5 292 R 'data'
4 A /var/www/html/uploads/ikstart.php 7884 $file = 'data'
5 293 0 0.016879 1978768 strrpos 0 /var/www/html/uploads/ikstart.php 7886 2 'data' '.'
5 293 1 0.016891 1978840
5 293 R FALSE
4 A /var/www/html/uploads/ikstart.php 7886 $dotpos = FALSE
5 294 0 0.016914 1978768 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 294 1 0.016930 1978808
5 294 R '.htaccess'
4 A /var/www/html/uploads/ikstart.php 7884 $file = '.htaccess'
5 295 0 0.016953 1978776 strrpos 0 /var/www/html/uploads/ikstart.php 7886 2 '.htaccess' '.'
5 295 1 0.016966 1978848
5 295 R 0
4 A /var/www/html/uploads/ikstart.php 7886 $dotpos = 0
5 296 0 0.016988 1978776 substr 0 /var/www/html/uploads/ikstart.php 7898 2 '.htaccess' 1
5 296 1 0.017000 1978880
5 296 R 'htaccess'
5 297 0 0.017014 1978816 strtolower 0 /var/www/html/uploads/ikstart.php 7898 1 'htaccess'
5 297 1 0.017025 1978848
5 297 R 'htaccess'
4 A /var/www/html/uploads/ikstart.php 7898 $extension = 'htaccess'
5 298 0 0.017048 1978784 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 298 1 0.017060 1978824
5 298 R 'ikstart.php'
4 A /var/www/html/uploads/ikstart.php 7884 $file = 'ikstart.php'
5 299 0 0.017084 1978784 strrpos 0 /var/www/html/uploads/ikstart.php 7886 2 'ikstart.php' '.'
5 299 1 0.017097 1978856
5 299 R 7
4 A /var/www/html/uploads/ikstart.php 7886 $dotpos = 7
5 300 0 0.017118 1978784 substr 0 /var/www/html/uploads/ikstart.php 7898 2 'ikstart.php' 8
5 300 1 0.017131 1978880
5 300 R 'php'
5 301 0 0.017144 1978816 strtolower 0 /var/www/html/uploads/ikstart.php 7898 1 'php'
5 301 1 0.017155 1978848
5 301 R 'php'
4 A /var/www/html/uploads/ikstart.php 7898 $extension = 'php'
5 302 0 0.017178 1978776 Directory->read 0 /var/www/html/uploads/ikstart.php 7884 0
5 302 1 0.017191 1978776
5 302 R FALSE
4 A /var/www/html/uploads/ikstart.php 7884 $file = FALSE
4 253 1 0.017214 1978152
4 253 R []
3 A /var/www/html/uploads/ikstart.php 7920 $archives = []
3 252 1 0.017237 1978152
3 252 R ''
2 A /var/www/html/uploads/ikstart.php 10173 $filelist = ''
3 303 0 0.017263 1978152 echoCSS 1 /var/www/html/uploads/ikstart.php 10181 0
4 304 0 0.017628 1998744 callExtraFeature 1 /var/www/html/uploads/ikstart.php 9028 2 'onExtraHeadCSS' ???
4 A /var/www/html/uploads/ikstart.php 8015 $result = NULL
5 305 0 0.017658 1998744 method_exists 0 /var/www/html/uploads/ikstart.php 8017 2 class AKFeatureURLImport { private $params = [] } 'onExtraHeadCSS'
5 305 1 0.017677 1998808
5 305 R TRUE
5 306 0 0.017692 1998744 AKFeatureURLImport->onExtraHeadCSS 1 /var/www/html/uploads/ikstart.php 8020 1 []
5 306 1 0.017707 1998744
5 306 R NULL
4 A /var/www/html/uploads/ikstart.php 8020 $result = NULL
4 304 1 0.017731 1998744
3 303 1 0.017738 1998744
3 307 0 0.017745 1998744 file_exists 0 /var/www/html/uploads/ikstart.php 10183 1 'jquery.min.js'
3 307 1 0.017766 1998784
3 307 R FALSE
3 308 0 0.017780 1998744 file_exists 0 /var/www/html/uploads/ikstart.php 10188 1 'json2.min.js'
3 308 1 0.017796 1998784
3 308 R FALSE
3 309 0 0.017810 1998744 file_exists 0 /var/www/html/uploads/ikstart.php 10193 1 'jquery-ui.min.js'
3 309 1 0.017826 1998784
3 309 R FALSE
3 310 0 0.017839 1998744 echoHeadJavascript 1 /var/www/html/uploads/ikstart.php 10198 0
4 311 0 0.017855 1998744 TranslateWinPath 1 /var/www/html/uploads/ikstart.php 9046 1 '/var/www/html/uploads'
4 A /var/www/html/uploads/ikstart.php 8038 $is_unc = FALSE
5 312 0 0.017879 1998744 str_replace 0 /var/www/html/uploads/ikstart.php 8052 3 '///' '/' '/var/www/html/uploads'
5 312 1 0.017895 1998840
5 312 R '/var/www/html/uploads'
4 A /var/www/html/uploads/ikstart.php 8052 $p_path = '/var/www/html/uploads'
5 313 0 0.017920 1998744 str_replace 0 /var/www/html/uploads/ikstart.php 8053 3 '//' '/' '/var/www/html/uploads'
5 313 1 0.017934 1998840
5 313 R '/var/www/html/uploads'
4 A /var/www/html/uploads/ikstart.php 8053 $p_path = '/var/www/html/uploads'
4 311 1 0.017958 1998744
4 311 R '/var/www/html/uploads'
4 314 0 0.017973 1998744 echoTranslationStrings 1 /var/www/html/uploads/ikstart.php 9112 0
5 315 0 0.017986 1998744 callExtraFeature 1 /var/www/html/uploads/ikstart.php 10164 2 'onLoadTranslations' ???
5 A /var/www/html/uploads/ikstart.php 8015 $result = NULL
6 316 0 0.018018 1998744 method_exists 0 /var/www/html/uploads/ikstart.php 8017 2 class AKFeatureURLImport { private $params = [] } 'onLoadTranslations'
6 316 1 0.018037 1998808
6 316 R TRUE
6 317 0 0.018051 1998744 AKFeatureURLImport->onLoadTranslations 1 /var/www/html/uploads/ikstart.php 8020 1 []
7 318 0 0.018067 1998744 AKText::getInstance 1 /var/www/html/uploads/ikstart.php 11314 0
8 319 0 0.018081 1998928 AKText->__construct 1 /var/www/html/uploads/ikstart.php 6386 0
8 A /var/www/html/uploads/ikstart.php 6365 $this->strings = ['AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']
9 320 0 0.018317 1998928 AKText->loadTranslation 1 /var/www/html/uploads/ikstart.php 6367 1 'en-GB'
9 A /var/www/html/uploads/ikstart.php 6555 $dirname = '/var/www/html/uploads'
10 321 0 0.018344 1998928 basename 0 /var/www/html/uploads/ikstart.php 6561 2 '/var/www/html/uploads/ikstart.php' '.php'
10 321 1 0.018389 1999024
10 321 R 'ikstart'
9 A /var/www/html/uploads/ikstart.php 6561 $basename = 'ikstart.ini'
9 A /var/www/html/uploads/ikstart.php 6564 $translationFilename = '/var/www/html/uploads/en-GB.ikstart.ini'
10 322 0 0.018429 1999032 file_exists 0 /var/www/html/uploads/ikstart.php 6565 1 '/var/www/html/uploads/en-GB.ikstart.ini'
10 322 1 0.018453 1999072
10 322 R FALSE
9 A /var/www/html/uploads/ikstart.php 6566 $basename = 'kickstart.ini'
9 A /var/www/html/uploads/ikstart.php 6567 $translationFilename = '/var/www/html/uploads/en-GB.kickstart.ini'
10 323 0 0.018491 1999008 file_exists 0 /var/www/html/uploads/ikstart.php 6569 1 '/var/www/html/uploads/en-GB.kickstart.ini'
10 323 1 0.018510 1999048
10 323 R FALSE
9 320 1 0.018524 1998928
9 324 0 0.018531 1998928 AKText->getBrowserLanguage 1 /var/www/html/uploads/ikstart.php 6369 0
9 A /var/www/html/uploads/ikstart.php 6457 $user_languages = []
9 A /var/www/html/uploads/ikstart.php 6486 $user_languages[0] = [0 => '', 1 => '']
9 A /var/www/html/uploads/ikstart.php 6489 $this->language = NULL
10 325 0 0.018582 1999304 basename 0 /var/www/html/uploads/ikstart.php 6490 2 '/var/www/html/uploads/ikstart.php' '.php'
10 325 1 0.018598 1999400
10 325 R 'ikstart'
9 A /var/www/html/uploads/ikstart.php 6490 $basename = 'ikstart.ini'
10 326 0 0.018623 1999344 class_exists 0 /var/www/html/uploads/ikstart.php 6493 1 'AKUtilsLister'
10 326 1 0.018636 1999384
10 326 R TRUE
10 327 0 0.018650 1999456 AKAbstractObject->__construct 1 /var/www/html/uploads/ikstart.php 6495 0
10 327 1 0.018664 1999456
9 A /var/www/html/uploads/ikstart.php 6495 $fs = class AKUtilsLister { private ${AKAbstractObject}_errors = []; protected $_errors_queue_size = 0; private ${AKAbstractObject}_warnings = []; protected $_warnings_queue_size = 0 }
10 328 0 0.018692 1999872 AKUtilsLister->getFiles 1 /var/www/html/uploads/ikstart.php 6496 2 '/var/www/html/uploads' '*.ikstart.ini'
10 A /var/www/html/uploads/ikstart.php 6153 $arr = []
10 A /var/www/html/uploads/ikstart.php 6154 $false = FALSE
11 329 0 0.018728 1999872 is_dir 0 /var/www/html/uploads/ikstart.php 6156 1 '/var/www/html/uploads'
11 329 1 0.018745 1999920
11 329 R TRUE
11 330 0 0.018758 1999880 opendir 0 /var/www/html/uploads/ikstart.php 6158 1 '/var/www/html/uploads'
11 330 1 0.018779 1999912
11 330 R resource(9) of type (stream)
10 A /var/www/html/uploads/ikstart.php 6158 $handle = resource(9) of type (stream)
11 331 0 0.018807 1999880 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(9) of type (stream)
11 331 1 0.018824 1999952
11 331 R '..'
10 A /var/www/html/uploads/ikstart.php 6165 $file = '..'
11 332 0 0.018848 1999912 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '*.ikstart.ini' '..'
11 332 1 0.018866 1999984
11 332 R FALSE
11 333 0 0.018879 1999912 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(9) of type (stream)
11 333 1 0.018893 1999984
11 333 R '.'
10 A /var/www/html/uploads/ikstart.php 6165 $file = '.'
11 334 0 0.018915 1999912 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '*.ikstart.ini' '.'
11 334 1 0.018929 1999984
11 334 R FALSE
11 335 0 0.018942 1999912 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(9) of type (stream)
11 335 1 0.018955 1999992
11 335 R 'prepend.php'
10 A /var/www/html/uploads/ikstart.php 6165 $file = 'prepend.php'
11 336 0 0.018979 1999920 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '*.ikstart.ini' 'prepend.php'
11 336 1 0.018994 1999992
11 336 R FALSE
11 337 0 0.019007 1999920 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(9) of type (stream)
11 337 1 0.019019 1999992
11 337 R 'data'
10 A /var/www/html/uploads/ikstart.php 6165 $file = 'data'
11 338 0 0.019042 1999912 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '*.ikstart.ini' 'data'
11 338 1 0.019056 1999984
11 338 R FALSE
11 339 0 0.019069 1999912 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(9) of type (stream)
11 339 1 0.019081 1999992
11 339 R '.htaccess'
10 A /var/www/html/uploads/ikstart.php 6165 $file = '.htaccess'
11 340 0 0.019105 1999920 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '*.ikstart.ini' '.htaccess'
11 340 1 0.019119 1999992
11 340 R FALSE
11 341 0 0.019132 1999920 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(9) of type (stream)
11 341 1 0.019145 2000000
11 341 R 'ikstart.php'
10 A /var/www/html/uploads/ikstart.php 6165 $file = 'ikstart.php'
11 342 0 0.019189 1999920 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '*.ikstart.ini' 'ikstart.php'
11 342 1 0.019204 1999992
11 342 R FALSE
11 343 0 0.019217 1999920 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(9) of type (stream)
11 343 1 0.019231 1999960
11 343 R FALSE
10 A /var/www/html/uploads/ikstart.php 6165 $file = FALSE
11 344 0 0.019254 1999880 closedir 0 /var/www/html/uploads/ikstart.php 6179 1 resource(9) of type (stream)
11 344 1 0.019269 1999696
11 344 R NULL
10 328 1 0.019283 1999656
10 328 R []
9 A /var/www/html/uploads/ikstart.php 6496 $iniFiles = []
9 A /var/www/html/uploads/ikstart.php 6498 $basename = 'kickstart.ini'
10 345 0 0.019318 1999592 AKUtilsLister->getFiles 1 /var/www/html/uploads/ikstart.php 6499 2 '/var/www/html/uploads' '*.kickstart.ini'
10 A /var/www/html/uploads/ikstart.php 6153 $arr = []
10 A /var/www/html/uploads/ikstart.php 6154 $false = FALSE
11 346 0 0.019353 1999592 is_dir 0 /var/www/html/uploads/ikstart.php 6156 1 '/var/www/html/uploads'
11 346 1 0.019366 1999632
11 346 R TRUE
11 347 0 0.019379 1999592 opendir 0 /var/www/html/uploads/ikstart.php 6158 1 '/var/www/html/uploads'
11 347 1 0.019397 1999872
11 347 R resource(10) of type (stream)
10 A /var/www/html/uploads/ikstart.php 6158 $handle = resource(10) of type (stream)
11 348 0 0.019424 1999840 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(10) of type (stream)
11 348 1 0.019441 1999912
11 348 R '..'
10 A /var/www/html/uploads/ikstart.php 6165 $file = '..'
11 349 0 0.019464 1999872 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '*.kickstart.ini' '..'
11 349 1 0.019478 1999944
11 349 R FALSE
11 350 0 0.019491 1999872 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(10) of type (stream)
11 350 1 0.019505 1999944
11 350 R '.'
10 A /var/www/html/uploads/ikstart.php 6165 $file = '.'
11 351 0 0.019527 1999872 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '*.kickstart.ini' '.'
11 351 1 0.019541 1999944
11 351 R FALSE
11 352 0 0.019553 1999872 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(10) of type (stream)
11 352 1 0.019567 1999952
11 352 R 'prepend.php'
10 A /var/www/html/uploads/ikstart.php 6165 $file = 'prepend.php'
11 353 0 0.019591 1999880 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '*.kickstart.ini' 'prepend.php'
11 353 1 0.019605 1999952
11 353 R FALSE
11 354 0 0.019618 1999880 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(10) of type (stream)
11 354 1 0.019631 1999952
11 354 R 'data'
10 A /var/www/html/uploads/ikstart.php 6165 $file = 'data'
11 355 0 0.019654 1999872 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '*.kickstart.ini' 'data'
11 355 1 0.019667 1999944
11 355 R FALSE
11 356 0 0.019680 1999872 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(10) of type (stream)
11 356 1 0.019694 1999952
11 356 R '.htaccess'
10 A /var/www/html/uploads/ikstart.php 6165 $file = '.htaccess'
11 357 0 0.019717 1999880 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '*.kickstart.ini' '.htaccess'
11 357 1 0.019731 1999952
11 357 R FALSE
11 358 0 0.019743 1999880 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(10) of type (stream)
11 358 1 0.019756 1999960
11 358 R 'ikstart.php'
10 A /var/www/html/uploads/ikstart.php 6165 $file = 'ikstart.php'
11 359 0 0.019779 1999880 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '*.kickstart.ini' 'ikstart.php'
11 359 1 0.019793 1999952
11 359 R FALSE
11 360 0 0.019806 1999880 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(10) of type (stream)
11 360 1 0.019820 1999920
11 360 R FALSE
10 A /var/www/html/uploads/ikstart.php 6165 $file = FALSE
11 361 0 0.019843 1999840 closedir 0 /var/www/html/uploads/ikstart.php 6179 1 resource(10) of type (stream)
11 361 1 0.019858 1999656
11 361 R NULL
10 345 1 0.019871 1999616
10 345 R []
9 A /var/www/html/uploads/ikstart.php 6499 $iniFiles = []
10 362 0 0.019899 1999600 AKUtilsLister->getFiles 1 /var/www/html/uploads/ikstart.php 6513 2 '/var/www/html/uploads' '-??.kickstart.ini'
10 A /var/www/html/uploads/ikstart.php 6153 $arr = []
10 A /var/www/html/uploads/ikstart.php 6154 $false = FALSE
11 363 0 0.019935 1999600 is_dir 0 /var/www/html/uploads/ikstart.php 6156 1 '/var/www/html/uploads'
11 363 1 0.019948 1999640
11 363 R TRUE
11 364 0 0.019961 1999600 opendir 0 /var/www/html/uploads/ikstart.php 6158 1 '/var/www/html/uploads'
11 364 1 0.019978 1999880
11 364 R resource(11) of type (stream)
10 A /var/www/html/uploads/ikstart.php 6158 $handle = resource(11) of type (stream)
11 365 0 0.020004 1999848 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(11) of type (stream)
11 365 1 0.020021 1999920
11 365 R '..'
10 A /var/www/html/uploads/ikstart.php 6165 $file = '..'
11 366 0 0.020044 1999880 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '-??.kickstart.ini' '..'
11 366 1 0.020058 1999952
11 366 R FALSE
11 367 0 0.020071 1999880 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(11) of type (stream)
11 367 1 0.020084 1999952
11 367 R '.'
10 A /var/www/html/uploads/ikstart.php 6165 $file = '.'
11 368 0 0.020106 1999880 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '-??.kickstart.ini' '.'
11 368 1 0.020119 1999952
11 368 R FALSE
11 369 0 0.020132 1999880 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(11) of type (stream)
11 369 1 0.020145 1999960
11 369 R 'prepend.php'
10 A /var/www/html/uploads/ikstart.php 6165 $file = 'prepend.php'
11 370 0 0.020169 1999888 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '-??.kickstart.ini' 'prepend.php'
11 370 1 0.020183 1999960
11 370 R FALSE
11 371 0 0.020196 1999888 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(11) of type (stream)
11 371 1 0.020209 1999960
11 371 R 'data'
10 A /var/www/html/uploads/ikstart.php 6165 $file = 'data'
11 372 0 0.020236 1999880 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '-??.kickstart.ini' 'data'
11 372 1 0.020251 1999952
11 372 R FALSE
11 373 0 0.020264 1999880 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(11) of type (stream)
11 373 1 0.020277 1999960
11 373 R '.htaccess'
10 A /var/www/html/uploads/ikstart.php 6165 $file = '.htaccess'
11 374 0 0.020300 1999888 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '-??.kickstart.ini' '.htaccess'
11 374 1 0.020314 1999960
11 374 R FALSE
11 375 0 0.020327 1999888 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(11) of type (stream)
11 375 1 0.020340 1999968
11 375 R 'ikstart.php'
10 A /var/www/html/uploads/ikstart.php 6165 $file = 'ikstart.php'
11 376 0 0.020364 1999888 fnmatch 0 /var/www/html/uploads/ikstart.php 6167 2 '-??.kickstart.ini' 'ikstart.php'
11 376 1 0.020378 1999960
11 376 R FALSE
11 377 0 0.020390 1999888 readdir 0 /var/www/html/uploads/ikstart.php 6165 1 resource(11) of type (stream)
11 377 1 0.020404 1999928
11 377 R FALSE
10 A /var/www/html/uploads/ikstart.php 6165 $file = FALSE
11 378 0 0.020426 1999848 closedir 0 /var/www/html/uploads/ikstart.php 6179 1 resource(11) of type (stream)
11 378 1 0.020441 1999664
11 378 R NULL
10 362 1 0.020454 1999624
10 362 R []
9 A /var/www/html/uploads/ikstart.php 6513 $iniFiles = []
9 A /var/www/html/uploads/ikstart.php 6519 $this->language = NULL
10 379 0 0.020490 1999592 file_exists 0 /var/www/html/uploads/ikstart.php 6529 1 '.kickstart.ini'
10 379 1 0.020508 1999632
10 379 R FALSE
9 324 1 0.020523 1998688
8 319 1 0.020530 1998688
7 A /var/www/html/uploads/ikstart.php 6386 $instance = class AKText { private $default_translation = ['AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']; private $strings = ['AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']; private $language = NULL; private ${AKAbstractObject}_errors = []; protected $_errors_queue_size = 0; private ${AKAbstractObject}_warnings = []; protected $_warnings_queue_size = 0 }
7 318 1 0.020840 1999064
7 318 R class AKText { private $default_translation = ['AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']; private $strings = ['AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']; private $language = NULL; private ${AKAbstractObject}_errors = []; protected $_errors_queue_size = 0; private ${AKAbstractObject}_warnings = []; protected $_warnings_queue_size = 0 }
6 A /var/www/html/uploads/ikstart.php 11314 $translation = class AKText { private $default_translation = ['AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']; private $strings = ['AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']; private $language = NULL; private ${AKAbstractObject}_errors = []; protected $_errors_queue_size = 0; private ${AKAbstractObject}_warnings = []; protected $_warnings_queue_size = 0 }
7 380 0 0.021426 1999064 AKText->addDefaultLanguageStrings 1 /var/www/html/uploads/ikstart.php 11316 1 ['AKURL_IMPORT' => 'Import from URL', 'AKURL_TITLE_STEP1' => 'Specify the URL', 'AKURL_FILENAME' => 'URL to import', 'AKURL_JOOMLA' => 'Latest Joomla! release', 'AKURL_WORDPRESS' => 'Latest WordPress release', 'AKURL_CANCEL' => 'Cancel import', 'AKURL_TITLE_STEP2' => 'Importing...', 'AKURL_DO_NOT_CLOSE' => 'Please do not close this window while your backup archives are being imported', 'AKURL_TITLE_STEP3' => 'Import is complete', 'AKURL_BTN_RELOAD' => 'Reload Kickstart']
8 381 0 0.021460 1999064 array_merge 0 /var/www/html/uploads/ikstart.php 6585 2 ['AKURL_IMPORT' => 'Import from URL', 'AKURL_TITLE_STEP1' => 'Specify the URL', 'AKURL_FILENAME' => 'URL to import', 'AKURL_JOOMLA' => 'Latest Joomla! release', 'AKURL_WORDPRESS' => 'Latest WordPress release', 'AKURL_CANCEL' => 'Cancel import', 'AKURL_TITLE_STEP2' => 'Importing...', 'AKURL_DO_NOT_CLOSE' => 'Please do not close this window while your backup archives are being imported', 'AKURL_TITLE_STEP3' => 'Import is complete', 'AKURL_BTN_RELOAD' => 'Reload Kickstart'] ['AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']
8 381 1 0.021687 2007376
8 381 R ['AKURL_IMPORT' => 'Import from URL', 'AKURL_TITLE_STEP1' => 'Specify the URL', 'AKURL_FILENAME' => 'URL to import', 'AKURL_JOOMLA' => 'Latest Joomla! release', 'AKURL_WORDPRESS' => 'Latest WordPress release', 'AKURL_CANCEL' => 'Cancel import', 'AKURL_TITLE_STEP2' => 'Importing...', 'AKURL_DO_NOT_CLOSE' => 'Please do not close this window while your backup archives are being imported', 'AKURL_TITLE_STEP3' => 'Import is complete', 'AKURL_BTN_RELOAD' => 'Reload Kickstart', 'AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']
7 A /var/www/html/uploads/ikstart.php 6585 $this->strings = ['AKURL_IMPORT' => 'Import from URL', 'AKURL_TITLE_STEP1' => 'Specify the URL', 'AKURL_FILENAME' => 'URL to import', 'AKURL_JOOMLA' => 'Latest Joomla! release', 'AKURL_WORDPRESS' => 'Latest WordPress release', 'AKURL_CANCEL' => 'Cancel import', 'AKURL_TITLE_STEP2' => 'Importing...', 'AKURL_DO_NOT_CLOSE' => 'Please do not close this window while your backup archives are being imported', 'AKURL_TITLE_STEP3' => 'Import is complete', 'AKURL_BTN_RELOAD' => 'Reload Kickstart', 'AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']
7 380 1 0.022138 2007312
6 317 1 0.022146 2007312
6 317 R NULL
5 A /var/www/html/uploads/ikstart.php 8020 $result = NULL
5 315 1 0.022171 2007312
5 382 0 0.022179 2007312 AKText::getInstance 1 /var/www/html/uploads/ikstart.php 10165 0
5 382 1 0.022193 2007312
5 382 R class AKText { private $default_translation = ['AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']; private $strings = ['AKURL_IMPORT' => 'Import from URL', 'AKURL_TITLE_STEP1' => 'Specify the URL', 'AKURL_FILENAME' => 'URL to import', 'AKURL_JOOMLA' => 'Latest Joomla! release', 'AKURL_WORDPRESS' => 'Latest WordPress release', 'AKURL_CANCEL' => 'Cancel import', 'AKURL_TITLE_STEP2' => 'Importing...', 'AKURL_DO_NOT_CLOSE' => 'Please do not close this window while your backup archives are being imported', 'AKURL_TITLE_STEP3' => 'Import is complete', 'AKURL_BTN_RELOAD' => 'Reload Kickstart', 'AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']; private $language = NULL; private ${AKAbstractObject}_errors = []; protected $_errors_queue_size = 0; private ${AKAbstractObject}_warnings = []; protected $_warnings_queue_size = 0 }
4 A /var/www/html/uploads/ikstart.php 10165 $translation = class AKText { private $default_translation = ['AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']; private $strings = ['AKURL_IMPORT' => 'Import from URL', 'AKURL_TITLE_STEP1' => 'Specify the URL', 'AKURL_FILENAME' => 'URL to import', 'AKURL_JOOMLA' => 'Latest Joomla! release', 'AKURL_WORDPRESS' => 'Latest WordPress release', 'AKURL_CANCEL' => 'Cancel import', 'AKURL_TITLE_STEP2' => 'Importing...', 'AKURL_DO_NOT_CLOSE' => 'Please do not close this window while your backup archives are being imported', 'AKURL_TITLE_STEP3' => 'Import is complete', 'AKURL_BTN_RELOAD' => 'Reload Kickstart', 'AUTOMODEON' => 'Auto-mode enabled', 'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive', 'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing', 'ERR_INVALID_LOGIN' => 'Invalid login', 'COULDNT_CREATE_DIR' => 'Could not create %s folder', 'COULDNT_WRITE_FILE' => 'Could not open %s for writing.', 'WRONG_FTP_HOST' => 'Wrong FTP host or port', 'WRONG_FTP_USER' => 'Wrong FTP username or password', 'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist', 'FTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory', 'FTP_COULDNT_UPLOAD' => 'Could not upload %s', 'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart', 'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.', 'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.', 'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.', 'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.', 'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.', 'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.', 'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.', 'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.', 'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.', 'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message', 'SELECT_ARCHIVE' => 'Select a backup archive', 'ARCHIVE_FILE' => 'Archive file:', 'SELECT_EXTRACTION' => 'Select an extraction method', 'WRITE_TO_FILES' => 'Write to files:', 'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)', 'WRITE_DIRECTLY' => 'Directly', 'WRITE_FTP' => 'Use FTP for all files', 'WRITE_SFTP' => 'Use SFTP for all files', 'FTP_HOST' => '(S)FTP host name:', 'FTP_PORT' => '(S)FTP port:', 'FTP_FTPS' => 'Use FTP over SSL (FTPS)', 'FTP_PASSIVE' => 'Use FTP Passive Mode', 'FTP_USER' => '(S)FTP user name:', 'FTP_PASS' => '(S)FTP password:', 'FTP_DIR' => '(S)FTP directory:', 'FTP_TEMPDIR' => 'Temporary directory:', 'FTP_CONNECTION_OK' => 'FTP Connection Established', 'SFTP_CONNECTION_OK' => 'SFTP Connection Established', 'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed', 'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed', 'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.', 'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.', 'FTPBROWSER_ERROR_HOSTNAME' => 'Invalid FTP host or port', 'FTPBROWSER_ERROR_USERPASS' => 'Invalid FTP username or password', 'FTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'FTPBROWSER_ERROR_UNSUPPORTED' => 'Sorry, your FTP server doesn\'t support our FTP directory browser.', 'FTPBROWSER_LBL_GOPARENT' => '<up one level>', 'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.', 'FTPBROWSER_LBL_ERROR' => 'An error occurred', 'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.', 'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections', 'SFTP_WRONG_USER' => 'Wrong SFTP username or password', 'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path', 'SFTPBROWSER_ERROR_NOACCESS' => 'Directory doesn\'t exist or you don\'t have enough permissions to access it', 'SFTP_COULDNT_UPLOAD' => 'Could not upload %s', 'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s', 'UI-ROOT' => '<root>', 'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser', 'FTP_BROWSE' => 'Browse', 'BTN_CHECK' => 'Check', 'BTN_RESET' => 'Reset', 'BTN_TESTFTPCON' => 'Test FTP connection', 'BTN_TESTSFTPCON' => 'Test SFTP connection', 'BTN_GOTOSTART' => 'Start over', 'FINE_TUNE' => 'Fine tune', 'MIN_EXEC_TIME' => 'Minimum execution time:', 'MAX_EXEC_TIME' => 'Maximum execution time:', 'SECONDS_PER_STEP' => 'seconds per step', 'EXTRACT_FILES' => 'Extract files', 'BTN_START' => 'Start', 'EXTRACTING' => 'Extracting', 'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress', 'RESTACLEANUP' => 'Restoration and Clean Up', 'BTN_RUNINSTALLER' => 'Run the Installer', 'BTN_CLEANUP' => 'Clean Up', 'BTN_SITEFE' => 'Visit your site\'s front-end', 'BTN_SITEBE' => 'Visit your site\'s back-end', 'WARNINGS' => 'Extraction Warnings', 'ERROR_OCCURED' => 'An error occured', 'STEALTH_MODE' => 'Stealth mode', 'STEALTH_URL' => 'HTML file to show to web visitors', 'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive', 'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt', 'JPS_PASSWORD' => 'Archive Password (for JPS files)', 'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s', 'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:', 'QUICKSTART' => 'Quick Start Guide', 'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!', 'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.', 'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.', 'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!', 'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.', 'UPDATE_DLNOW' => 'Download now', 'UPDATE_MOREINFO' => 'More information', 'IGNORE_MOST_ERRORS' => 'Ignore most errors', 'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root', 'ARCHIVE_DIRECTORY' => 'Archive directory:', 'RELOAD_ARCHIVES' => 'Reload', 'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser', 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.']; private $language = NULL; private ${AKAbstractObject}_errors = []; protected $_errors_queue_size = 0; private ${AKAbstractObject}_warnings = []; protected $_warnings_queue_size = 0 }
5 383 0 0.022809 2007312 AKText->asJavascript 1 /var/www/html/uploads/ikstart.php 10166 0
5 A /var/www/html/uploads/ikstart.php 6437 $out = ''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'AKURL_IMPORT'
6 384 0 0.022847 2007312 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'AKURL_IMPORT' '\\\'"'
6 384 1 0.022863 2007424
6 384 R 'AKURL_IMPORT'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'AKURL_IMPORT'
6 385 0 0.022892 2007352 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Import from URL' '\\\'"'
6 385 1 0.022906 2007464
6 385 R 'Import from URL'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Import from URL'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'AKURL_IMPORT\':\t\'Import from URL\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'AKURL_TITLE_STEP1'
6 386 0 0.022957 2007376 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'AKURL_TITLE_STEP1' '\\\'"'
6 386 1 0.022972 2007496
6 386 R 'AKURL_TITLE_STEP1'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'AKURL_TITLE_STEP1'
6 387 0 0.022997 2007424 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Specify the URL' '\\\'"'
6 387 1 0.023011 2007536
6 387 R 'Specify the URL'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Specify the URL'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'AKURL_TITLE_STEP1\':\t\'Specify the URL\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'AKURL_FILENAME'
6 388 0 0.023070 2007424 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'AKURL_FILENAME' '\\\'"'
6 388 1 0.023084 2007536
6 388 R 'AKURL_FILENAME'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'AKURL_FILENAME'
6 389 0 0.023108 2007464 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'URL to import' '\\\'"'
6 389 1 0.023122 2007576
6 389 R 'URL to import'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'URL to import'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'AKURL_FILENAME\':\t\'URL to import\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'AKURL_JOOMLA'
6 390 0 0.023195 2007472 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'AKURL_JOOMLA' '\\\'"'
6 390 1 0.023209 2007584
6 390 R 'AKURL_JOOMLA'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'AKURL_JOOMLA'
6 391 0 0.023234 2007512 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Latest Joomla! release' '\\\'"'
6 391 1 0.023247 2007632
6 391 R 'Latest Joomla! release'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Latest Joomla! release'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'AKURL_JOOMLA\':\t\'Latest Joomla! release\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'AKURL_WORDPRESS'
6 392 0 0.023304 2007504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'AKURL_WORDPRESS' '\\\'"'
6 392 1 0.023318 2007616
6 392 R 'AKURL_WORDPRESS'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'AKURL_WORDPRESS'
6 393 0 0.023346 2007544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Latest WordPress release' '\\\'"'
6 393 1 0.023360 2007672
6 393 R 'Latest WordPress release'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Latest WordPress release'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'AKURL_WORDPRESS\':\t\'Latest WordPress release\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'AKURL_CANCEL'
6 394 0 0.023416 2007536 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'AKURL_CANCEL' '\\\'"'
6 394 1 0.023430 2007648
6 394 R 'AKURL_CANCEL'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'AKURL_CANCEL'
6 395 0 0.023453 2007576 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Cancel import' '\\\'"'
6 395 1 0.023467 2007688
6 395 R 'Cancel import'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Cancel import'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'AKURL_CANCEL\':\t\'Cancel import\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'AKURL_TITLE_STEP2'
6 396 0 0.023523 2007568 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'AKURL_TITLE_STEP2' '\\\'"'
6 396 1 0.023538 2007688
6 396 R 'AKURL_TITLE_STEP2'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'AKURL_TITLE_STEP2'
6 397 0 0.023562 2007616 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Importing...' '\\\'"'
6 397 1 0.023575 2007728
6 397 R 'Importing...'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Importing...'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'AKURL_TITLE_STEP2\':\t\'Importing...\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'AKURL_DO_NOT_CLOSE'
6 398 0 0.023631 2007632 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'AKURL_DO_NOT_CLOSE' '\\\'"'
6 398 1 0.023646 2007752
6 398 R 'AKURL_DO_NOT_CLOSE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'AKURL_DO_NOT_CLOSE'
6 399 0 0.023671 2007680 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Please do not close this window while your backup archives are being imported' '\\\'"'
6 399 1 0.023687 2007864
6 399 R 'Please do not close this window while your backup archives are being imported'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Please do not close this window while your backup archives are being imported'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'AKURL_DO_NOT_CLOSE\':\t\'Please do not close this window while your backup archives are being imported\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'AKURL_TITLE_STEP3'
6 400 0 0.023753 2007760 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'AKURL_TITLE_STEP3' '\\\'"'
6 400 1 0.023768 2007880
6 400 R 'AKURL_TITLE_STEP3'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'AKURL_TITLE_STEP3'
6 401 0 0.023792 2007808 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Import is complete' '\\\'"'
6 401 1 0.023806 2007928
6 401 R 'Import is complete'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Import is complete'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'AKURL_TITLE_STEP3\':\t\'Import is complete\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'AKURL_BTN_RELOAD'
6 402 0 0.023862 2007760 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'AKURL_BTN_RELOAD' '\\\'"'
6 402 1 0.023877 2007880
6 402 R 'AKURL_BTN_RELOAD'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'AKURL_BTN_RELOAD'
6 403 0 0.023901 2007808 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Reload Kickstart' '\\\'"'
6 403 1 0.023919 2007928
6 403 R 'Reload Kickstart'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Reload Kickstart'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'AKURL_BTN_RELOAD\':\t\'Reload Kickstart\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'AUTOMODEON'
6 404 0 0.023976 2007824 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'AUTOMODEON' '\\\'"'
6 404 1 0.023990 2007936
6 404 R 'AUTOMODEON'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'AUTOMODEON'
6 405 0 0.024014 2007864 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Auto-mode enabled' '\\\'"'
6 405 1 0.024028 2007984
6 405 R 'Auto-mode enabled'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Auto-mode enabled'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'AUTOMODEON\':\t\'Auto-mode enabled\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'ERR_NOT_A_JPA_FILE'
6 406 0 0.024115 2007952 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'ERR_NOT_A_JPA_FILE' '\\\'"'
6 406 1 0.024131 2008072
6 406 R 'ERR_NOT_A_JPA_FILE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'ERR_NOT_A_JPA_FILE'
6 407 0 0.024155 2008000 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'The file is not a JPA archive' '\\\'"'
6 407 1 0.024170 2008128
6 407 R 'The file is not a JPA archive'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'The file is not a JPA archive'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'ERR_NOT_A_JPA_FILE\':\t\'The file is not a JPA archive\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'ERR_CORRUPT_ARCHIVE'
6 408 0 0.024229 2007952 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'ERR_CORRUPT_ARCHIVE' '\\\'"'
6 408 1 0.024249 2008072
6 408 R 'ERR_CORRUPT_ARCHIVE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'ERR_CORRUPT_ARCHIVE'
6 409 0 0.024274 2008000 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'The archive file is corrupt, truncated or archive parts are missing' '\\\'"'
6 409 1 0.024290 2008168
6 409 R 'The archive file is corrupt, truncated or archive parts are missing'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'The archive file is corrupt, truncated or archive parts are missing'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'ERR_CORRUPT_ARCHIVE\':\t\'The archive file is corrupt, truncated or archive parts are missing\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'ERR_INVALID_LOGIN'
6 410 0 0.024356 2008080 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'ERR_INVALID_LOGIN' '\\\'"'
6 410 1 0.024370 2008200
6 410 R 'ERR_INVALID_LOGIN'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'ERR_INVALID_LOGIN'
6 411 0 0.024395 2008128 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Invalid login' '\\\'"'
6 411 1 0.024409 2008240
6 411 R 'Invalid login'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Invalid login'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'ERR_INVALID_LOGIN\':\t\'Invalid login\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'COULDNT_CREATE_DIR'
6 412 0 0.024465 2008080 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'COULDNT_CREATE_DIR' '\\\'"'
6 412 1 0.024479 2008200
6 412 R 'COULDNT_CREATE_DIR'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'COULDNT_CREATE_DIR'
6 413 0 0.024503 2008128 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Could not create %s folder' '\\\'"'
6 413 1 0.024517 2008256
6 413 R 'Could not create %s folder'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Could not create %s folder'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'COULDNT_CREATE_DIR\':\t\'Could not create %s folder\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'COULDNT_WRITE_FILE'
6 414 0 0.024582 2008080 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'COULDNT_WRITE_FILE' '\\\'"'
6 414 1 0.024596 2008200
6 414 R 'COULDNT_WRITE_FILE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'COULDNT_WRITE_FILE'
6 415 0 0.024621 2008128 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Could not open %s for writing.' '\\\'"'
6 415 1 0.024635 2008256
6 415 R 'Could not open %s for writing.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Could not open %s for writing.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'COULDNT_WRITE_FILE\':\t\'Could not open %s for writing.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'WRONG_FTP_HOST'
6 416 0 0.024696 2008208 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'WRONG_FTP_HOST' '\\\'"'
6 416 1 0.024711 2008320
6 416 R 'WRONG_FTP_HOST'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'WRONG_FTP_HOST'
6 417 0 0.024736 2008248 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Wrong FTP host or port' '\\\'"'
6 417 1 0.024750 2008368
6 417 R 'Wrong FTP host or port'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Wrong FTP host or port'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'WRONG_FTP_HOST\':\t\'Wrong FTP host or port\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'WRONG_FTP_USER'
6 418 0 0.024807 2008208 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'WRONG_FTP_USER' '\\\'"'
6 418 1 0.024821 2008320
6 418 R 'WRONG_FTP_USER'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'WRONG_FTP_USER'
6 419 0 0.024846 2008248 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Wrong FTP username or password' '\\\'"'
6 419 1 0.024860 2008376
6 419 R 'Wrong FTP username or password'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Wrong FTP username or password'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'WRONG_FTP_USER\':\t\'Wrong FTP username or password\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'WRONG_FTP_PATH1'
6 420 0 0.024919 2008336 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'WRONG_FTP_PATH1' '\\\'"'
6 420 1 0.024933 2008448
6 420 R 'WRONG_FTP_PATH1'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'WRONG_FTP_PATH1'
6 421 0 0.024957 2008376 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Wrong FTP initial directory - the directory doesn\'t exist' '\\\'"'
6 421 1 0.024973 2008544
6 421 R 'Wrong FTP initial directory - the directory doesn\\\'t exist'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Wrong FTP initial directory - the directory doesn\\\'t exist'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'WRONG_FTP_PATH1\':\t\'Wrong FTP initial directory - the directory doesn\\\'t exist\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_CANT_CREATE_DIR'
6 422 0 0.025038 2008336 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_CANT_CREATE_DIR' '\\\'"'
6 422 1 0.025052 2008456
6 422 R 'FTP_CANT_CREATE_DIR'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_CANT_CREATE_DIR'
6 423 0 0.025077 2008384 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Could not create directory %s' '\\\'"'
6 423 1 0.025091 2008512
6 423 R 'Could not create directory %s'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Could not create directory %s'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_CANT_CREATE_DIR\':\t\'Could not create directory %s\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_TEMPDIR_NOT_WRITABLE'
6 424 0 0.025155 2008592 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_TEMPDIR_NOT_WRITABLE' '\\\'"'
6 424 1 0.025170 2008720
6 424 R 'FTP_TEMPDIR_NOT_WRITABLE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_TEMPDIR_NOT_WRITABLE'
6 425 0 0.025196 2008648 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Could not find or create a writable temporary directory' '\\\'"'
6 425 1 0.025211 2008800
6 425 R 'Could not find or create a writable temporary directory'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Could not find or create a writable temporary directory'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_TEMPDIR_NOT_WRITABLE\':\t\'Could not find or create a writable temporary directory\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SFTP_TEMPDIR_NOT_WRITABLE'
6 426 0 0.025275 2008592 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SFTP_TEMPDIR_NOT_WRITABLE' '\\\'"'
6 426 1 0.025291 2008720
6 426 R 'SFTP_TEMPDIR_NOT_WRITABLE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SFTP_TEMPDIR_NOT_WRITABLE'
6 427 0 0.025316 2008648 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Could not find or create a writable temporary directory' '\\\'"'
6 427 1 0.025331 2008800
6 427 R 'Could not find or create a writable temporary directory'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Could not find or create a writable temporary directory'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SFTP_TEMPDIR_NOT_WRITABLE\':\t\'Could not find or create a writable temporary directory\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_COULDNT_UPLOAD'
6 428 0 0.025395 2008592 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_COULDNT_UPLOAD' '\\\'"'
6 428 1 0.025409 2008712
6 428 R 'FTP_COULDNT_UPLOAD'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_COULDNT_UPLOAD'
6 429 0 0.025434 2008640 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Could not upload %s' '\\\'"'
6 429 1 0.025448 2008760
6 429 R 'Could not upload %s'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Could not upload %s'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_COULDNT_UPLOAD\':\t\'Could not upload %s\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'THINGS_HEADER'
6 430 0 0.025505 2008592 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'THINGS_HEADER' '\\\'"'
6 430 1 0.025519 2008704
6 430 R 'THINGS_HEADER'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'THINGS_HEADER'
6 431 0 0.025544 2008632 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Things you should know about Akeeba Kickstart' '\\\'"'
6 431 1 0.025559 2008784
6 431 R 'Things you should know about Akeeba Kickstart'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Things you should know about Akeeba Kickstart'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'THINGS_HEADER\':\t\'Things you should know about Akeeba Kickstart\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'THINGS_01'
6 432 0 0.025620 2008848 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'THINGS_01' '\\\'"'
6 432 1 0.025634 2008960
6 432 R 'THINGS_01'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'THINGS_01'
6 433 0 0.025658 2008888 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.' '\\\'"'
6 433 1 0.025680 2009120
6 433 R 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'THINGS_01\':\t\'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'THINGS_02'
6 434 0 0.025753 2008848 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'THINGS_02' '\\\'"'
6 434 1 0.025766 2008960
6 434 R 'THINGS_02'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'THINGS_02'
6 435 0 0.025791 2008888 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.' '\\\'"'
6 435 1 0.025810 2009152
6 435 R 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'THINGS_02\':\t\'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'THINGS_03'
6 436 0 0.025884 2009104 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'THINGS_03' '\\\'"'
6 436 1 0.025898 2009216
6 436 R 'THINGS_03'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'THINGS_03'
6 437 0 0.025921 2009144 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.' '\\\'"'
6 437 1 0.025937 2009328
6 437 R 'Kickstart is bound by your server\\\'s configuration. As such, it may not work at all.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Kickstart is bound by your server\\\'s configuration. As such, it may not work at all.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'THINGS_03\':\t\'Kickstart is bound by your server\\\'s configuration. As such, it may not work at all.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'THINGS_04'
6 438 0 0.026003 2009104 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'THINGS_04' '\\\'"'
6 438 1 0.026018 2009216
6 438 R 'THINGS_04'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'THINGS_04'
6 439 0 0.026041 2009144 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.' '\\\'"'
6 439 1 0.026060 2009408
6 439 R 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'THINGS_04\':\t\'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'THINGS_05'
6 440 0 0.026135 2009360 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'THINGS_05' '\\\'"'
6 440 1 0.026148 2009472
6 440 R 'THINGS_05'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'THINGS_05'
6 441 0 0.026172 2009400 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.' '\\\'"'
6 441 1 0.026197 2009856
6 441 R 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'THINGS_05\':\t\'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'THINGS_06'
6 442 0 0.026280 2009872 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'THINGS_06' '\\\'"'
6 442 1 0.026294 2009984
6 442 R 'THINGS_06'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'THINGS_06'
6 443 0 0.026318 2009912 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.' '\\\'"'
6 443 1 0.026335 2010144
6 443 R 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'THINGS_06\':\t\'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'THINGS_07'
6 444 0 0.026404 2009872 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'THINGS_07' '\\\'"'
6 444 1 0.026418 2009984
6 444 R 'THINGS_07'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'THINGS_07'
6 445 0 0.026442 2009912 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.' '\\\'"'
6 445 1 0.026463 2010304
6 445 R 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\\\'s just how your server and CMS software work.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\\\'s just how your server and CMS software work.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'THINGS_07\':\t\'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\\\'s just how your server and CMS software work.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'THINGS_08'
6 446 0 0.026545 2010384 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'THINGS_08' '\\\'"'
6 446 1 0.026559 2010496
6 446 R 'THINGS_08'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'THINGS_08'
6 447 0 0.026583 2010424 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.' '\\\'"'
6 447 1 0.026602 2010688
6 447 R 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'THINGS_08\':\t\'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'THINGS_09'
6 448 0 0.026679 2010384 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'THINGS_09' '\\\'"'
6 448 1 0.026694 2010496
6 448 R 'THINGS_09'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'THINGS_09'
6 449 0 0.026717 2010424 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.' '\\\'"'
6 449 1 0.026735 2010656
6 449 R 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'THINGS_09\':\t\'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'CLOSE_LIGHTBOX'
6 450 0 0.026807 2010384 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'CLOSE_LIGHTBOX' '\\\'"'
6 450 1 0.026821 2010496
6 450 R 'CLOSE_LIGHTBOX'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'CLOSE_LIGHTBOX'
6 451 0 0.026846 2010424 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Click here or press ESC to close this message' '\\\'"'
6 451 1 0.026860 2010576
6 451 R 'Click here or press ESC to close this message'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Click here or press ESC to close this message'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'CLOSE_LIGHTBOX\':\t\'Click here or press ESC to close this message\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SELECT_ARCHIVE'
6 452 0 0.026923 2010384 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SELECT_ARCHIVE' '\\\'"'
6 452 1 0.026937 2010496
6 452 R 'SELECT_ARCHIVE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SELECT_ARCHIVE'
6 453 0 0.026961 2010424 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Select a backup archive' '\\\'"'
6 453 1 0.026975 2010544
6 453 R 'Select a backup archive'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Select a backup archive'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SELECT_ARCHIVE\':\t\'Select a backup archive\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'ARCHIVE_FILE'
6 454 0 0.027033 2010384 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'ARCHIVE_FILE' '\\\'"'
6 454 1 0.027046 2010496
6 454 R 'ARCHIVE_FILE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'ARCHIVE_FILE'
6 455 0 0.027070 2010424 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Archive file:' '\\\'"'
6 455 1 0.027083 2010536
6 455 R 'Archive file:'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Archive file:'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'ARCHIVE_FILE\':\t\'Archive file:\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SELECT_EXTRACTION'
6 456 0 0.027141 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SELECT_EXTRACTION' '\\\'"'
6 456 1 0.027155 2011528
6 456 R 'SELECT_EXTRACTION'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SELECT_EXTRACTION'
6 457 0 0.027215 2011456 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Select an extraction method' '\\\'"'
6 457 1 0.027234 2011584
6 457 R 'Select an extraction method'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Select an extraction method'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SELECT_EXTRACTION\':\t\'Select an extraction method\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'WRITE_TO_FILES'
6 458 0 0.027294 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'WRITE_TO_FILES' '\\\'"'
6 458 1 0.027308 2011520
6 458 R 'WRITE_TO_FILES'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'WRITE_TO_FILES'
6 459 0 0.027332 2011448 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Write to files:' '\\\'"'
6 459 1 0.027346 2011560
6 459 R 'Write to files:'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Write to files:'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'WRITE_TO_FILES\':\t\'Write to files:\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'WRITE_HYBRID'
6 460 0 0.027403 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'WRITE_HYBRID' '\\\'"'
6 460 1 0.027416 2011520
6 460 R 'WRITE_HYBRID'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'WRITE_HYBRID'
6 461 0 0.027441 2011448 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Hybrid (use FTP only if needed)' '\\\'"'
6 461 1 0.027455 2011576
6 461 R 'Hybrid (use FTP only if needed)'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Hybrid (use FTP only if needed)'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'WRITE_HYBRID\':\t\'Hybrid (use FTP only if needed)\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'WRITE_DIRECTLY'
6 462 0 0.027515 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'WRITE_DIRECTLY' '\\\'"'
6 462 1 0.027529 2011520
6 462 R 'WRITE_DIRECTLY'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'WRITE_DIRECTLY'
6 463 0 0.027554 2011448 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Directly' '\\\'"'
6 463 1 0.027567 2011560
6 463 R 'Directly'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Directly'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'WRITE_DIRECTLY\':\t\'Directly\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'WRITE_FTP'
6 464 0 0.027622 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'WRITE_FTP' '\\\'"'
6 464 1 0.027636 2011520
6 464 R 'WRITE_FTP'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'WRITE_FTP'
6 465 0 0.027659 2011448 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Use FTP for all files' '\\\'"'
6 465 1 0.027673 2011568
6 465 R 'Use FTP for all files'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Use FTP for all files'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'WRITE_FTP\':\t\'Use FTP for all files\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'WRITE_SFTP'
6 466 0 0.027730 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'WRITE_SFTP' '\\\'"'
6 466 1 0.027743 2011520
6 466 R 'WRITE_SFTP'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'WRITE_SFTP'
6 467 0 0.027767 2011448 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Use SFTP for all files' '\\\'"'
6 467 1 0.027781 2011568
6 467 R 'Use SFTP for all files'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Use SFTP for all files'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'WRITE_SFTP\':\t\'Use SFTP for all files\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_HOST'
6 468 0 0.027841 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_HOST' '\\\'"'
6 468 1 0.027854 2011520
6 468 R 'FTP_HOST'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_HOST'
6 469 0 0.027878 2011448 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 '(S)FTP host name:' '\\\'"'
6 469 1 0.027892 2011568
6 469 R '(S)FTP host name:'
5 A /var/www/html/uploads/ikstart.php 6441 $value = '(S)FTP host name:'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_HOST\':\t\'(S)FTP host name:\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_PORT'
6 470 0 0.027948 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_PORT' '\\\'"'
6 470 1 0.027961 2011520
6 470 R 'FTP_PORT'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_PORT'
6 471 0 0.027984 2011448 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 '(S)FTP port:' '\\\'"'
6 471 1 0.027999 2011560
6 471 R '(S)FTP port:'
5 A /var/www/html/uploads/ikstart.php 6441 $value = '(S)FTP port:'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_PORT\':\t\'(S)FTP port:\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_FTPS'
6 472 0 0.028053 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_FTPS' '\\\'"'
6 472 1 0.028067 2011520
6 472 R 'FTP_FTPS'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_FTPS'
6 473 0 0.028090 2011448 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Use FTP over SSL (FTPS)' '\\\'"'
6 473 1 0.028105 2011568
6 473 R 'Use FTP over SSL (FTPS)'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Use FTP over SSL (FTPS)'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_FTPS\':\t\'Use FTP over SSL (FTPS)\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_PASSIVE'
6 474 0 0.028162 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_PASSIVE' '\\\'"'
6 474 1 0.028176 2011520
6 474 R 'FTP_PASSIVE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_PASSIVE'
6 475 0 0.028200 2011448 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Use FTP Passive Mode' '\\\'"'
6 475 1 0.028214 2011568
6 475 R 'Use FTP Passive Mode'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Use FTP Passive Mode'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_PASSIVE\':\t\'Use FTP Passive Mode\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_USER'
6 476 0 0.028277 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_USER' '\\\'"'
6 476 1 0.028291 2011520
6 476 R 'FTP_USER'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_USER'
6 477 0 0.028314 2011448 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 '(S)FTP user name:' '\\\'"'
6 477 1 0.028328 2011568
6 477 R '(S)FTP user name:'
5 A /var/www/html/uploads/ikstart.php 6441 $value = '(S)FTP user name:'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_USER\':\t\'(S)FTP user name:\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_PASS'
6 478 0 0.028384 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_PASS' '\\\'"'
6 478 1 0.028398 2011520
6 478 R 'FTP_PASS'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_PASS'
6 479 0 0.028421 2011448 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 '(S)FTP password:' '\\\'"'
6 479 1 0.028435 2011568
6 479 R '(S)FTP password:'
5 A /var/www/html/uploads/ikstart.php 6441 $value = '(S)FTP password:'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_PASS\':\t\'(S)FTP password:\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_DIR'
6 480 0 0.028495 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_DIR' '\\\'"'
6 480 1 0.028508 2011512
6 480 R 'FTP_DIR'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_DIR'
6 481 0 0.028531 2011440 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 '(S)FTP directory:' '\\\'"'
6 481 1 0.028545 2011560
6 481 R '(S)FTP directory:'
5 A /var/www/html/uploads/ikstart.php 6441 $value = '(S)FTP directory:'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_DIR\':\t\'(S)FTP directory:\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_TEMPDIR'
6 482 0 0.028601 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_TEMPDIR' '\\\'"'
6 482 1 0.028615 2011520
6 482 R 'FTP_TEMPDIR'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_TEMPDIR'
6 483 0 0.028638 2011448 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Temporary directory:' '\\\'"'
6 483 1 0.028652 2011568
6 483 R 'Temporary directory:'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Temporary directory:'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_TEMPDIR\':\t\'Temporary directory:\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_CONNECTION_OK'
6 484 0 0.028708 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_CONNECTION_OK' '\\\'"'
6 484 1 0.028722 2011528
6 484 R 'FTP_CONNECTION_OK'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_CONNECTION_OK'
6 485 0 0.028746 2011456 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'FTP Connection Established' '\\\'"'
6 485 1 0.028761 2011584
6 485 R 'FTP Connection Established'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'FTP Connection Established'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_CONNECTION_OK\':\t\'FTP Connection Established\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SFTP_CONNECTION_OK'
6 486 0 0.028820 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SFTP_CONNECTION_OK' '\\\'"'
6 486 1 0.028835 2011528
6 486 R 'SFTP_CONNECTION_OK'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SFTP_CONNECTION_OK'
6 487 0 0.028859 2011456 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'SFTP Connection Established' '\\\'"'
6 487 1 0.028874 2011584
6 487 R 'SFTP Connection Established'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'SFTP Connection Established'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SFTP_CONNECTION_OK\':\t\'SFTP Connection Established\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_CONNECTION_FAILURE'
6 488 0 0.028934 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_CONNECTION_FAILURE' '\\\'"'
6 488 1 0.028948 2011528
6 488 R 'FTP_CONNECTION_FAILURE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_CONNECTION_FAILURE'
6 489 0 0.028973 2011456 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'The FTP Connection Failed' '\\\'"'
6 489 1 0.028988 2011584
6 489 R 'The FTP Connection Failed'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'The FTP Connection Failed'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_CONNECTION_FAILURE\':\t\'The FTP Connection Failed\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SFTP_CONNECTION_FAILURE'
6 490 0 0.029049 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SFTP_CONNECTION_FAILURE' '\\\'"'
6 490 1 0.029063 2011528
6 490 R 'SFTP_CONNECTION_FAILURE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SFTP_CONNECTION_FAILURE'
6 491 0 0.029089 2011456 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'The SFTP Connection Failed' '\\\'"'
6 491 1 0.029103 2011584
6 491 R 'The SFTP Connection Failed'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'The SFTP Connection Failed'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SFTP_CONNECTION_FAILURE\':\t\'The SFTP Connection Failed\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_TEMPDIR_WRITABLE'
6 492 0 0.029162 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_TEMPDIR_WRITABLE' '\\\'"'
6 492 1 0.029177 2011528
6 492 R 'FTP_TEMPDIR_WRITABLE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_TEMPDIR_WRITABLE'
6 493 0 0.029202 2011456 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'The temporary directory is writable.' '\\\'"'
6 493 1 0.029216 2011592
6 493 R 'The temporary directory is writable.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'The temporary directory is writable.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_TEMPDIR_WRITABLE\':\t\'The temporary directory is writable.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_TEMPDIR_UNWRITABLE'
6 494 0 0.029278 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_TEMPDIR_UNWRITABLE' '\\\'"'
6 494 1 0.029292 2011528
6 494 R 'FTP_TEMPDIR_UNWRITABLE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_TEMPDIR_UNWRITABLE'
6 495 0 0.029317 2011456 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'The temporary directory is not writable. Please check the permissions.' '\\\'"'
6 495 1 0.029333 2011624
6 495 R 'The temporary directory is not writable. Please check the permissions.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'The temporary directory is not writable. Please check the permissions.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_TEMPDIR_UNWRITABLE\':\t\'The temporary directory is not writable. Please check the permissions.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTPBROWSER_ERROR_HOSTNAME'
6 496 0 0.029400 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTPBROWSER_ERROR_HOSTNAME' '\\\'"'
6 496 1 0.029416 2011536
6 496 R 'FTPBROWSER_ERROR_HOSTNAME'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTPBROWSER_ERROR_HOSTNAME'
6 497 0 0.029441 2011464 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Invalid FTP host or port' '\\\'"'
6 497 1 0.029455 2011592
6 497 R 'Invalid FTP host or port'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Invalid FTP host or port'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTPBROWSER_ERROR_HOSTNAME\':\t\'Invalid FTP host or port\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTPBROWSER_ERROR_USERPASS'
6 498 0 0.029516 2011408 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTPBROWSER_ERROR_USERPASS' '\\\'"'
6 498 1 0.029531 2011536
6 498 R 'FTPBROWSER_ERROR_USERPASS'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTPBROWSER_ERROR_USERPASS'
6 499 0 0.029556 2011464 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Invalid FTP username or password' '\\\'"'
6 499 1 0.029570 2011600
6 499 R 'Invalid FTP username or password'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Invalid FTP username or password'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTPBROWSER_ERROR_USERPASS\':\t\'Invalid FTP username or password\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTPBROWSER_ERROR_NOACCESS'
6 500 0 0.029636 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTPBROWSER_ERROR_NOACCESS' '\\\'"'
6 500 1 0.029651 2015632
6 500 R 'FTPBROWSER_ERROR_NOACCESS'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTPBROWSER_ERROR_NOACCESS'
6 501 0 0.029676 2015560 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Directory doesn\'t exist or you don\'t have enough permissions to access it' '\\\'"'
6 501 1 0.029692 2015744
6 501 R 'Directory doesn\\\'t exist or you don\\\'t have enough permissions to access it'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Directory doesn\\\'t exist or you don\\\'t have enough permissions to access it'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTPBROWSER_ERROR_NOACCESS\':\t\'Directory doesn\\\'t exist or you don\\\'t have enough permissions to access it\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTPBROWSER_ERROR_UNSUPPORTED'
6 502 0 0.029760 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTPBROWSER_ERROR_UNSUPPORTED' '\\\'"'
6 502 1 0.029775 2015632
6 502 R 'FTPBROWSER_ERROR_UNSUPPORTED'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTPBROWSER_ERROR_UNSUPPORTED'
6 503 0 0.029800 2015560 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Sorry, your FTP server doesn\'t support our FTP directory browser.' '\\\'"'
6 503 1 0.029816 2015728
6 503 R 'Sorry, your FTP server doesn\\\'t support our FTP directory browser.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Sorry, your FTP server doesn\\\'t support our FTP directory browser.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTPBROWSER_ERROR_UNSUPPORTED\':\t\'Sorry, your FTP server doesn\\\'t support our FTP directory browser.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTPBROWSER_LBL_GOPARENT'
6 504 0 0.029883 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTPBROWSER_LBL_GOPARENT' '\\\'"'
6 504 1 0.029898 2015624
6 504 R 'FTPBROWSER_LBL_GOPARENT'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTPBROWSER_LBL_GOPARENT'
6 505 0 0.029924 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 '<up one level>' '\\\'"'
6 505 1 0.029938 2015672
6 505 R '<up one level>'
5 A /var/www/html/uploads/ikstart.php 6441 $value = '<up one level>'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTPBROWSER_LBL_GOPARENT\':\t\'<up one level>\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTPBROWSER_LBL_INSTRUCTIONS'
6 506 0 0.029997 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTPBROWSER_LBL_INSTRUCTIONS' '\\\'"'
6 506 1 0.030013 2015632
6 506 R 'FTPBROWSER_LBL_INSTRUCTIONS'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTPBROWSER_LBL_INSTRUCTIONS'
6 507 0 0.030039 2015560 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.' '\\\'"'
6 507 1 0.030057 2015792
6 507 R 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTPBROWSER_LBL_INSTRUCTIONS\':\t\'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTPBROWSER_LBL_ERROR'
6 508 0 0.030133 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTPBROWSER_LBL_ERROR' '\\\'"'
6 508 1 0.030148 2015624
6 508 R 'FTPBROWSER_LBL_ERROR'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTPBROWSER_LBL_ERROR'
6 509 0 0.030173 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'An error occurred' '\\\'"'
6 509 1 0.030187 2015672
6 509 R 'An error occurred'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'An error occurred'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTPBROWSER_LBL_ERROR\':\t\'An error occurred\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SFTP_NO_SSH2'
6 510 0 0.030245 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SFTP_NO_SSH2' '\\\'"'
6 510 1 0.030260 2015616
6 510 R 'SFTP_NO_SSH2'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SFTP_NO_SSH2'
6 511 0 0.030285 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.' '\\\'"'
6 511 1 0.030302 2015744
6 511 R 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SFTP_NO_SSH2\':\t\'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SFTP_NO_FTP_SUPPORT'
6 512 0 0.030372 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SFTP_NO_FTP_SUPPORT' '\\\'"'
6 512 1 0.030387 2015624
6 512 R 'SFTP_NO_FTP_SUPPORT'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SFTP_NO_FTP_SUPPORT'
6 513 0 0.030412 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Your SSH server does not allow SFTP connections' '\\\'"'
6 513 1 0.030427 2015704
6 513 R 'Your SSH server does not allow SFTP connections'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Your SSH server does not allow SFTP connections'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SFTP_NO_FTP_SUPPORT\':\t\'Your SSH server does not allow SFTP connections\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SFTP_WRONG_USER'
6 514 0 0.030655 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SFTP_WRONG_USER' '\\\'"'
6 514 1 0.030676 2015616
6 514 R 'SFTP_WRONG_USER'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SFTP_WRONG_USER'
6 515 0 0.030702 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Wrong SFTP username or password' '\\\'"'
6 515 1 0.030717 2015672
6 515 R 'Wrong SFTP username or password'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Wrong SFTP username or password'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SFTP_WRONG_USER\':\t\'Wrong SFTP username or password\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SFTP_WRONG_STARTING_DIR'
6 516 0 0.030780 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SFTP_WRONG_STARTING_DIR' '\\\'"'
6 516 1 0.030795 2015624
6 516 R 'SFTP_WRONG_STARTING_DIR'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SFTP_WRONG_STARTING_DIR'
6 517 0 0.030821 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'You must supply a valid absolute path' '\\\'"'
6 517 1 0.030835 2015688
6 517 R 'You must supply a valid absolute path'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'You must supply a valid absolute path'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SFTP_WRONG_STARTING_DIR\':\t\'You must supply a valid absolute path\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SFTPBROWSER_ERROR_NOACCESS'
6 518 0 0.030909 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SFTPBROWSER_ERROR_NOACCESS' '\\\'"'
6 518 1 0.030924 2015632
6 518 R 'SFTPBROWSER_ERROR_NOACCESS'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SFTPBROWSER_ERROR_NOACCESS'
6 519 0 0.030950 2015560 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Directory doesn\'t exist or you don\'t have enough permissions to access it' '\\\'"'
6 519 1 0.030967 2015744
6 519 R 'Directory doesn\\\'t exist or you don\\\'t have enough permissions to access it'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Directory doesn\\\'t exist or you don\\\'t have enough permissions to access it'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SFTPBROWSER_ERROR_NOACCESS\':\t\'Directory doesn\\\'t exist or you don\\\'t have enough permissions to access it\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SFTP_COULDNT_UPLOAD'
6 520 0 0.031035 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SFTP_COULDNT_UPLOAD' '\\\'"'
6 520 1 0.031049 2015624
6 520 R 'SFTP_COULDNT_UPLOAD'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SFTP_COULDNT_UPLOAD'
6 521 0 0.031074 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Could not upload %s' '\\\'"'
6 521 1 0.031088 2015672
6 521 R 'Could not upload %s'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Could not upload %s'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SFTP_COULDNT_UPLOAD\':\t\'Could not upload %s\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SFTP_CANT_CREATE_DIR'
6 522 0 0.031148 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SFTP_CANT_CREATE_DIR' '\\\'"'
6 522 1 0.031163 2015624
6 522 R 'SFTP_CANT_CREATE_DIR'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SFTP_CANT_CREATE_DIR'
6 523 0 0.031206 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Could not create directory %s' '\\\'"'
6 523 1 0.031223 2015680
6 523 R 'Could not create directory %s'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Could not create directory %s'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SFTP_CANT_CREATE_DIR\':\t\'Could not create directory %s\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'UI-ROOT'
6 524 0 0.031283 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'UI-ROOT' '\\\'"'
6 524 1 0.031297 2015608
6 524 R 'UI-ROOT'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'UI-ROOT'
6 525 0 0.031321 2015536 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 '<root>' '\\\'"'
6 525 1 0.031335 2015648
6 525 R '<root>'
5 A /var/www/html/uploads/ikstart.php 6441 $value = '<root>'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'UI-ROOT\':\t\'<root>\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'CONFIG_UI_FTPBROWSER_TITLE'
6 526 0 0.031391 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'CONFIG_UI_FTPBROWSER_TITLE' '\\\'"'
6 526 1 0.031407 2015632
6 526 R 'CONFIG_UI_FTPBROWSER_TITLE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'CONFIG_UI_FTPBROWSER_TITLE'
6 527 0 0.031433 2015560 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'FTP Directory Browser' '\\\'"'
6 527 1 0.031447 2015680
6 527 R 'FTP Directory Browser'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'FTP Directory Browser'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'CONFIG_UI_FTPBROWSER_TITLE\':\t\'FTP Directory Browser\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FTP_BROWSE'
6 528 0 0.031511 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FTP_BROWSE' '\\\'"'
6 528 1 0.031525 2015616
6 528 R 'FTP_BROWSE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FTP_BROWSE'
6 529 0 0.031550 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Browse' '\\\'"'
6 529 1 0.031563 2015648
6 529 R 'Browse'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Browse'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FTP_BROWSE\':\t\'Browse\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'BTN_CHECK'
6 530 0 0.031617 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'BTN_CHECK' '\\\'"'
6 530 1 0.031631 2015616
6 530 R 'BTN_CHECK'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'BTN_CHECK'
6 531 0 0.031655 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Check' '\\\'"'
6 531 1 0.031668 2015648
6 531 R 'Check'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Check'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'BTN_CHECK\':\t\'Check\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'BTN_RESET'
6 532 0 0.031722 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'BTN_RESET' '\\\'"'
6 532 1 0.031736 2015616
6 532 R 'BTN_RESET'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'BTN_RESET'
6 533 0 0.031759 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Reset' '\\\'"'
6 533 1 0.031772 2015648
6 533 R 'Reset'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Reset'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'BTN_RESET\':\t\'Reset\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'BTN_TESTFTPCON'
6 534 0 0.031826 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'BTN_TESTFTPCON' '\\\'"'
6 534 1 0.031840 2015616
6 534 R 'BTN_TESTFTPCON'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'BTN_TESTFTPCON'
6 535 0 0.031865 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Test FTP connection' '\\\'"'
6 535 1 0.031879 2015664
6 535 R 'Test FTP connection'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Test FTP connection'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'BTN_TESTFTPCON\':\t\'Test FTP connection\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'BTN_TESTSFTPCON'
6 536 0 0.031936 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'BTN_TESTSFTPCON' '\\\'"'
6 536 1 0.031950 2015616
6 536 R 'BTN_TESTSFTPCON'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'BTN_TESTSFTPCON'
6 537 0 0.031974 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Test SFTP connection' '\\\'"'
6 537 1 0.031988 2015664
6 537 R 'Test SFTP connection'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Test SFTP connection'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'BTN_TESTSFTPCON\':\t\'Test SFTP connection\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'BTN_GOTOSTART'
6 538 0 0.032047 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'BTN_GOTOSTART' '\\\'"'
6 538 1 0.032062 2015616
6 538 R 'BTN_GOTOSTART'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'BTN_GOTOSTART'
6 539 0 0.032092 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Start over' '\\\'"'
6 539 1 0.032106 2015656
6 539 R 'Start over'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Start over'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'BTN_GOTOSTART\':\t\'Start over\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'FINE_TUNE'
6 540 0 0.032162 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'FINE_TUNE' '\\\'"'
6 540 1 0.032175 2015616
6 540 R 'FINE_TUNE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'FINE_TUNE'
6 541 0 0.032198 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Fine tune' '\\\'"'
6 541 1 0.032212 2015656
6 541 R 'Fine tune'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Fine tune'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'FINE_TUNE\':\t\'Fine tune\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'MIN_EXEC_TIME'
6 542 0 0.032276 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'MIN_EXEC_TIME' '\\\'"'
6 542 1 0.032291 2015616
6 542 R 'MIN_EXEC_TIME'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'MIN_EXEC_TIME'
6 543 0 0.032315 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Minimum execution time:' '\\\'"'
6 543 1 0.032329 2015664
6 543 R 'Minimum execution time:'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Minimum execution time:'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'MIN_EXEC_TIME\':\t\'Minimum execution time:\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'MAX_EXEC_TIME'
6 544 0 0.032387 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'MAX_EXEC_TIME' '\\\'"'
6 544 1 0.032401 2015616
6 544 R 'MAX_EXEC_TIME'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'MAX_EXEC_TIME'
6 545 0 0.032424 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Maximum execution time:' '\\\'"'
6 545 1 0.032438 2015664
6 545 R 'Maximum execution time:'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Maximum execution time:'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'MAX_EXEC_TIME\':\t\'Maximum execution time:\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'SECONDS_PER_STEP'
6 546 0 0.032496 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'SECONDS_PER_STEP' '\\\'"'
6 546 1 0.032510 2015624
6 546 R 'SECONDS_PER_STEP'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'SECONDS_PER_STEP'
6 547 0 0.032534 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'seconds per step' '\\\'"'
6 547 1 0.032548 2015672
6 547 R 'seconds per step'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'seconds per step'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'SECONDS_PER_STEP\':\t\'seconds per step\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'EXTRACT_FILES'
6 548 0 0.032604 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'EXTRACT_FILES' '\\\'"'
6 548 1 0.032618 2015616
6 548 R 'EXTRACT_FILES'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'EXTRACT_FILES'
6 549 0 0.032642 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Extract files' '\\\'"'
6 549 1 0.032656 2015656
6 549 R 'Extract files'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Extract files'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'EXTRACT_FILES\':\t\'Extract files\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'BTN_START'
6 550 0 0.032715 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'BTN_START' '\\\'"'
6 550 1 0.032729 2015616
6 550 R 'BTN_START'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'BTN_START'
6 551 0 0.032752 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Start' '\\\'"'
6 551 1 0.032765 2015648
6 551 R 'Start'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Start'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'BTN_START\':\t\'Start\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'EXTRACTING'
6 552 0 0.032820 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'EXTRACTING' '\\\'"'
6 552 1 0.032833 2015616
6 552 R 'EXTRACTING'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'EXTRACTING'
6 553 0 0.032857 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Extracting' '\\\'"'
6 553 1 0.032870 2015656
6 553 R 'Extracting'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Extracting'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'EXTRACTING\':\t\'Extracting\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'DO_NOT_CLOSE_EXTRACT'
6 554 0 0.032927 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'DO_NOT_CLOSE_EXTRACT' '\\\'"'
6 554 1 0.032942 2015624
6 554 R 'DO_NOT_CLOSE_EXTRACT'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'DO_NOT_CLOSE_EXTRACT'
6 555 0 0.032967 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Do not close this window while the extraction is in progress' '\\\'"'
6 555 1 0.032982 2015720
6 555 R 'Do not close this window while the extraction is in progress'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Do not close this window while the extraction is in progress'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'DO_NOT_CLOSE_EXTRACT\':\t\'Do not close this window while the extraction is in progress\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'RESTACLEANUP'
6 556 0 0.033046 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'RESTACLEANUP' '\\\'"'
6 556 1 0.033061 2015616
6 556 R 'RESTACLEANUP'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'RESTACLEANUP'
6 557 0 0.033085 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Restoration and Clean Up' '\\\'"'
6 557 1 0.033099 2015672
6 557 R 'Restoration and Clean Up'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Restoration and Clean Up'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'RESTACLEANUP\':\t\'Restoration and Clean Up\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'BTN_RUNINSTALLER'
6 558 0 0.033156 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'BTN_RUNINSTALLER' '\\\'"'
6 558 1 0.033171 2015624
6 558 R 'BTN_RUNINSTALLER'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'BTN_RUNINSTALLER'
6 559 0 0.033196 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Run the Installer' '\\\'"'
6 559 1 0.033210 2015672
6 559 R 'Run the Installer'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Run the Installer'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'BTN_RUNINSTALLER\':\t\'Run the Installer\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'BTN_CLEANUP'
6 560 0 0.033266 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'BTN_CLEANUP' '\\\'"'
6 560 1 0.033279 2015616
6 560 R 'BTN_CLEANUP'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'BTN_CLEANUP'
6 561 0 0.033307 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Clean Up' '\\\'"'
6 561 1 0.033322 2015656
6 561 R 'Clean Up'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Clean Up'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'BTN_CLEANUP\':\t\'Clean Up\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'BTN_SITEFE'
6 562 0 0.033377 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'BTN_SITEFE' '\\\'"'
6 562 1 0.033391 2015616
6 562 R 'BTN_SITEFE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'BTN_SITEFE'
6 563 0 0.033414 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Visit your site\'s front-end' '\\\'"'
6 563 1 0.033429 2015672
6 563 R 'Visit your site\\\'s front-end'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Visit your site\\\'s front-end'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'BTN_SITEFE\':\t\'Visit your site\\\'s front-end\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'BTN_SITEBE'
6 564 0 0.033486 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'BTN_SITEBE' '\\\'"'
6 564 1 0.033501 2015616
6 564 R 'BTN_SITEBE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'BTN_SITEBE'
6 565 0 0.033524 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Visit your site\'s back-end' '\\\'"'
6 565 1 0.033538 2015672
6 565 R 'Visit your site\\\'s back-end'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Visit your site\\\'s back-end'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'BTN_SITEBE\':\t\'Visit your site\\\'s back-end\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'WARNINGS'
6 566 0 0.033597 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'WARNINGS' '\\\'"'
6 566 1 0.033610 2015616
6 566 R 'WARNINGS'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'WARNINGS'
6 567 0 0.033632 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Extraction Warnings' '\\\'"'
6 567 1 0.033646 2015664
6 567 R 'Extraction Warnings'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Extraction Warnings'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'WARNINGS\':\t\'Extraction Warnings\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'ERROR_OCCURED'
6 568 0 0.033702 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'ERROR_OCCURED' '\\\'"'
6 568 1 0.033717 2015616
6 568 R 'ERROR_OCCURED'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'ERROR_OCCURED'
6 569 0 0.033741 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'An error occured' '\\\'"'
6 569 1 0.033755 2015664
6 569 R 'An error occured'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'An error occured'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'ERROR_OCCURED\':\t\'An error occured\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'STEALTH_MODE'
6 570 0 0.033810 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'STEALTH_MODE' '\\\'"'
6 570 1 0.033824 2015616
6 570 R 'STEALTH_MODE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'STEALTH_MODE'
6 571 0 0.033848 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Stealth mode' '\\\'"'
6 571 1 0.033861 2015656
6 571 R 'Stealth mode'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Stealth mode'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'STEALTH_MODE\':\t\'Stealth mode\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'STEALTH_URL'
6 572 0 0.033919 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'STEALTH_URL' '\\\'"'
6 572 1 0.033932 2015616
6 572 R 'STEALTH_URL'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'STEALTH_URL'
6 573 0 0.033956 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'HTML file to show to web visitors' '\\\'"'
6 573 1 0.033971 2015680
6 573 R 'HTML file to show to web visitors'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'HTML file to show to web visitors'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'STEALTH_URL\':\t\'HTML file to show to web visitors\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'ERR_NOT_A_JPS_FILE'
6 574 0 0.034649 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'ERR_NOT_A_JPS_FILE' '\\\'"'
6 574 1 0.034667 2015624
6 574 R 'ERR_NOT_A_JPS_FILE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'ERR_NOT_A_JPS_FILE'
6 575 0 0.034693 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'The file is not a JPA archive' '\\\'"'
6 575 1 0.034707 2015680
6 575 R 'The file is not a JPA archive'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'The file is not a JPA archive'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'ERR_NOT_A_JPS_FILE\':\t\'The file is not a JPA archive\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'ERR_INVALID_JPS_PASSWORD'
6 576 0 0.034768 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'ERR_INVALID_JPS_PASSWORD' '\\\'"'
6 576 1 0.034783 2015632
6 576 R 'ERR_INVALID_JPS_PASSWORD'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'ERR_INVALID_JPS_PASSWORD'
6 577 0 0.034808 2015560 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'The password you gave is wrong or the archive is corrupt' '\\\'"'
6 577 1 0.034824 2015728
6 577 R 'The password you gave is wrong or the archive is corrupt'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'The password you gave is wrong or the archive is corrupt'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'ERR_INVALID_JPS_PASSWORD\':\t\'The password you gave is wrong or the archive is corrupt\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'JPS_PASSWORD'
6 578 0 0.034889 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'JPS_PASSWORD' '\\\'"'
6 578 1 0.034902 2015616
6 578 R 'JPS_PASSWORD'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'JPS_PASSWORD'
6 579 0 0.034927 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Archive Password (for JPS files)' '\\\'"'
6 579 1 0.034941 2015680
6 579 R 'Archive Password (for JPS files)'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Archive Password (for JPS files)'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'JPS_PASSWORD\':\t\'Archive Password (for JPS files)\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'INVALID_FILE_HEADER'
6 580 0 0.035002 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'INVALID_FILE_HEADER' '\\\'"'
6 580 1 0.035016 2015624
6 580 R 'INVALID_FILE_HEADER'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'INVALID_FILE_HEADER'
6 581 0 0.035040 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Invalid header in archive file, part %s, offset %s' '\\\'"'
6 581 1 0.035056 2015704
6 581 R 'Invalid header in archive file, part %s, offset %s'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Invalid header in archive file, part %s, offset %s'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'INVALID_FILE_HEADER\':\t\'Invalid header in archive file, part %s, offset %s\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'NEEDSOMEHELPKS'
6 582 0 0.035131 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'NEEDSOMEHELPKS' '\\\'"'
6 582 1 0.035146 2015616
6 582 R 'NEEDSOMEHELPKS'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'NEEDSOMEHELPKS'
6 583 0 0.035217 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Want some help to use this tool? Read this first:' '\\\'"'
6 583 1 0.035233 2015696
6 583 R 'Want some help to use this tool? Read this first:'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Want some help to use this tool? Read this first:'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'NEEDSOMEHELPKS\':\t\'Want some help to use this tool? Read this first:\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'QUICKSTART'
6 584 0 0.035298 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'QUICKSTART' '\\\'"'
6 584 1 0.035311 2015616
6 584 R 'QUICKSTART'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'QUICKSTART'
6 585 0 0.035335 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Quick Start Guide' '\\\'"'
6 585 1 0.035349 2015664
6 585 R 'Quick Start Guide'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Quick Start Guide'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'QUICKSTART\':\t\'Quick Start Guide\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'CANTGETITTOWORK'
6 586 0 0.035407 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'CANTGETITTOWORK' '\\\'"'
6 586 1 0.035420 2015616
6 586 R 'CANTGETITTOWORK'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'CANTGETITTOWORK'
6 587 0 0.035444 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Can\'t get it to work? Click me!' '\\\'"'
6 587 1 0.035459 2015680
6 587 R 'Can\\\'t get it to work? Click me!'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Can\\\'t get it to work? Click me!'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'CANTGETITTOWORK\':\t\'Can\\\'t get it to work? Click me!\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'NOARCHIVESCLICKHERE'
6 588 0 0.035519 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'NOARCHIVESCLICKHERE' '\\\'"'
6 588 1 0.035533 2015624
6 588 R 'NOARCHIVESCLICKHERE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'NOARCHIVESCLICKHERE'
6 589 0 0.035558 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'No archives detected. Click here for troubleshooting instructions.' '\\\'"'
6 589 1 0.035573 2015720
6 589 R 'No archives detected. Click here for troubleshooting instructions.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'No archives detected. Click here for troubleshooting instructions.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'NOARCHIVESCLICKHERE\':\t\'No archives detected. Click here for troubleshooting instructions.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'POSTRESTORATIONTROUBLESHOOTING'
6 590 0 0.035639 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'POSTRESTORATIONTROUBLESHOOTING' '\\\'"'
6 590 1 0.035654 2015632
6 590 R 'POSTRESTORATIONTROUBLESHOOTING'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'POSTRESTORATIONTROUBLESHOOTING'
6 591 0 0.035680 2015560 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Something not working after the restoration? Click here for troubleshooting instructions.' '\\\'"'
6 591 1 0.035696 2015760
6 591 R 'Something not working after the restoration? Click here for troubleshooting instructions.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Something not working after the restoration? Click here for troubleshooting instructions.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'POSTRESTORATIONTROUBLESHOOTING\':\t\'Something not working after the restoration? Click here for troubleshooting instructions.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'UPDATE_HEADER'
6 592 0 0.035770 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'UPDATE_HEADER' '\\\'"'
6 592 1 0.035783 2015616
6 592 R 'UPDATE_HEADER'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'UPDATE_HEADER'
6 593 0 0.035807 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!' '\\\'"'
6 593 1 0.035825 2015744
6 593 R 'An updated version of Akeeba Kickstart (<span id=\\"update-version\\">unknown</span>) is available!'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'An updated version of Akeeba Kickstart (<span id=\\"update-version\\">unknown</span>) is available!'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'UPDATE_HEADER\':\t\'An updated version of Akeeba Kickstart (<span id=\\"update-version\\">unknown</span>) is available!\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'UPDATE_NOTICE'
6 594 0 0.035896 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'UPDATE_NOTICE' '\\\'"'
6 594 1 0.035909 2015616
6 594 R 'UPDATE_NOTICE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'UPDATE_NOTICE'
6 595 0 0.035933 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.' '\\\'"'
6 595 1 0.035951 2015808
6 595 R 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'UPDATE_NOTICE\':\t\'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'UPDATE_DLNOW'
6 596 0 0.036024 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'UPDATE_DLNOW' '\\\'"'
6 596 1 0.036038 2015616
6 596 R 'UPDATE_DLNOW'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'UPDATE_DLNOW'
6 597 0 0.036062 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Download now' '\\\'"'
6 597 1 0.036076 2015656
6 597 R 'Download now'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Download now'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'UPDATE_DLNOW\':\t\'Download now\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'UPDATE_MOREINFO'
6 598 0 0.036132 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'UPDATE_MOREINFO' '\\\'"'
6 598 1 0.036146 2015616
6 598 R 'UPDATE_MOREINFO'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'UPDATE_MOREINFO'
6 599 0 0.036171 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'More information' '\\\'"'
6 599 1 0.036185 2015664
6 599 R 'More information'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'More information'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'UPDATE_MOREINFO\':\t\'More information\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'IGNORE_MOST_ERRORS'
6 600 0 0.036247 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'IGNORE_MOST_ERRORS' '\\\'"'
6 600 1 0.036266 2015624
6 600 R 'IGNORE_MOST_ERRORS'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'IGNORE_MOST_ERRORS'
6 601 0 0.036290 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Ignore most errors' '\\\'"'
6 601 1 0.036304 2015672
6 601 R 'Ignore most errors'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Ignore most errors'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'IGNORE_MOST_ERRORS\':\t\'Ignore most errors\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'WRONG_FTP_PATH2'
6 602 0 0.036361 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'WRONG_FTP_PATH2' '\\\'"'
6 602 1 0.036376 2015616
6 602 R 'WRONG_FTP_PATH2'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'WRONG_FTP_PATH2'
6 603 0 0.036400 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root' '\\\'"'
6 603 1 0.036415 2015744
6 603 R 'Wrong FTP initial directory - the directory doesn\\\'t correspond to your site\\\'s web root'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Wrong FTP initial directory - the directory doesn\\\'t correspond to your site\\\'s web root'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'WRONG_FTP_PATH2\':\t\'Wrong FTP initial directory - the directory doesn\\\'t correspond to your site\\\'s web root\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'ARCHIVE_DIRECTORY'
6 604 0 0.036485 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'ARCHIVE_DIRECTORY' '\\\'"'
6 604 1 0.036499 2015624
6 604 R 'ARCHIVE_DIRECTORY'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'ARCHIVE_DIRECTORY'
6 605 0 0.036523 2015552 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Archive directory:' '\\\'"'
6 605 1 0.036537 2015672
6 605 R 'Archive directory:'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Archive directory:'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'ARCHIVE_DIRECTORY\':\t\'Archive directory:\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'RELOAD_ARCHIVES'
6 606 0 0.036594 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'RELOAD_ARCHIVES' '\\\'"'
6 606 1 0.036607 2015616
6 606 R 'RELOAD_ARCHIVES'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'RELOAD_ARCHIVES'
6 607 0 0.036631 2015544 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Reload' '\\\'"'
6 607 1 0.036644 2015648
6 607 R 'Reload'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Reload'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'RELOAD_ARCHIVES\':\t\'Reload\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'CONFIG_UI_SFTPBROWSER_TITLE'
6 608 0 0.036701 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'CONFIG_UI_SFTPBROWSER_TITLE' '\\\'"'
6 608 1 0.036717 2015632
6 608 R 'CONFIG_UI_SFTPBROWSER_TITLE'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'CONFIG_UI_SFTPBROWSER_TITLE'
6 609 0 0.036743 2015560 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'SFTP Directory Browser' '\\\'"'
6 609 1 0.036757 2015680
6 609 R 'SFTP Directory Browser'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'SFTP Directory Browser'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'CONFIG_UI_SFTPBROWSER_TITLE\':\t\'SFTP Directory Browser\''
5 A /var/www/html/uploads/ikstart.php 6438 $key = 'ERR_COULD_NOT_OPEN_ARCHIVE_PART'
6 610 0 0.036817 2015504 addcslashes 0 /var/www/html/uploads/ikstart.php 6440 2 'ERR_COULD_NOT_OPEN_ARCHIVE_PART' '\\\'"'
6 610 1 0.036834 2015632
6 610 R 'ERR_COULD_NOT_OPEN_ARCHIVE_PART'
5 A /var/www/html/uploads/ikstart.php 6440 $key = 'ERR_COULD_NOT_OPEN_ARCHIVE_PART'
6 611 0 0.036861 2015560 addcslashes 0 /var/www/html/uploads/ikstart.php 6441 2 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.' '\\\'"'
6 611 1 0.036881 2015952
6 611 R 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.'
5 A /var/www/html/uploads/ikstart.php 6441 $value = 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.'
5 A /var/www/html/uploads/ikstart.php 6442 $out .= ',\n'
5 A /var/www/html/uploads/ikstart.php 6443 $out .= '\'ERR_COULD_NOT_OPEN_ARCHIVE_PART\':\t\'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.\''
5 383 1 0.036951 2015504
5 383 R '\'AKURL_IMPORT\':\t\'Import from URL\',\n\'AKURL_TITLE_STEP1\':\t\'Specify the URL\',\n\'AKURL_FILENAME\':\t\'URL to import\',\n\'AKURL_JOOMLA\':\t\'Latest Joomla! release\',\n\'AKURL_WORDPRESS\':\t\'Latest WordPress release\',\n\'AKURL_CANCEL\':\t\'Cancel import\',\n\'AKURL_TITLE_STEP2\':\t\'Importing...\',\n\'AKURL_DO_NOT_CLOSE\':\t\'Please do not close this window while your backup archives are being imported\',\n\'AKURL_TITLE_STEP3\':\t\'Import is complete\',\n\'AKURL_BTN_RELOAD\':\t\'Reload Kickstart\''
4 314 1 0.037276 2007312
4 612 0 0.037288 2007312 basename 0 /var/www/html/uploads/ikstart.php 9115 1 '/var/www/html/uploads/ikstart.php'
4 612 1 0.037305 2007384
4 612 R 'ikstart.php'
4 613 0 0.037778 2007312 AKKickstartUtils::getPath 1 /var/www/html/uploads/ikstart.php 9976 0
4 A /var/www/html/uploads/ikstart.php 7814 $path = '/var/www/html/uploads'
5 614 0 0.037805 2007312 str_replace 0 /var/www/html/uploads/ikstart.php 7815 3 '\\' '/' '/var/www/html/uploads'
5 614 1 0.037822 2007408
5 614 R '/var/www/html/uploads'
5 615 0 0.037837 2007312 rtrim 0 /var/www/html/uploads/ikstart.php 7815 2 '/var/www/html/uploads' '/'
5 615 1 0.037850 2007384
5 615 R '/var/www/html/uploads'
4 A /var/www/html/uploads/ikstart.php 7815 $path = '/var/www/html/uploads'
4 A /var/www/html/uploads/ikstart.php 7818 $path .= '/'
4 613 1 0.037885 2007360
4 613 R '/var/www/html/uploads/'
4 616 0 0.037900 2007360 addcslashes 0 /var/www/html/uploads/ikstart.php 9976 2 '/var/www/html/uploads/' '\\\'"'
4 616 1 0.037914 2007480
4 616 R '/var/www/html/uploads/'
4 617 0 0.037932 2007312 callExtraFeature 1 /var/www/html/uploads/ikstart.php 10147 2 'onExtraHeadJavascript' ???
4 A /var/www/html/uploads/ikstart.php 8015 $result = NULL
5 618 0 0.037959 2007312 method_exists 0 /var/www/html/uploads/ikstart.php 8017 2 class AKFeatureURLImport { private $params = [] } 'onExtraHeadJavascript'
5 618 1 0.037979 2007376
5 618 R TRUE
5 619 0 0.037994 2007312 AKFeatureURLImport->onExtraHeadJavascript 1 /var/www/html/uploads/ikstart.php 8020 1 []
5 619 1 0.038012 2007312
5 619 R NULL
4 A /var/www/html/uploads/ikstart.php 8020 $result = NULL
4 617 1 0.038035 2007312
3 310 1 0.038042 2007312
3 620 0 0.038400 2007312 callExtraFeature 1 /var/www/html/uploads/ikstart.php 10259 2 'onPage1' ???
3 A /var/www/html/uploads/ikstart.php 8015 $result = NULL
4 621 0 0.038427 2007312 method_exists 0 /var/www/html/uploads/ikstart.php 8017 2 class AKFeatureURLImport { private $params = [] } 'onPage1'
4 621 1 0.038445 2007376
4 621 R TRUE
4 622 0 0.038459 2007312 AKFeatureURLImport->onPage1 1 /var/www/html/uploads/ikstart.php 8020 1 []
4 622 1 0.038474 2007312
4 622 R NULL
3 A /var/www/html/uploads/ikstart.php 8020 $result = NULL
3 620 1 0.038497 2007312
3 623 0 0.038505 2007312 callExtraFeature 1 /var/www/html/uploads/ikstart.php 10271 2 'onPage1Step1' ???
3 A /var/www/html/uploads/ikstart.php 8015 $result = NULL
4 624 0 0.038529 2007312 method_exists 0 /var/www/html/uploads/ikstart.php 8017 2 class AKFeatureURLImport { private $params = [] } 'onPage1Step1'
4 624 1 0.038552 2007376
4 624 R TRUE
4 625 0 0.038566 2007312 AKFeatureURLImport->onPage1Step1 1 /var/www/html/uploads/ikstart.php 8020 1 []
4 625 1 0.038580 2007312
4 625 R NULL
3 A /var/www/html/uploads/ikstart.php 8020 $result = NULL
3 623 1 0.038603 2007312
3 626 0 0.038611 2007312 htmlentities 0 /var/www/html/uploads/ikstart.php 10276 1 '/var/www/html/uploads/'
3 626 1 0.038626 2007504
3 626 R '/var/www/html/uploads/'
3 627 0 0.038644 2007312 AKKickstartUtils::getPath 1 /var/www/html/uploads/ikstart.php 10339 0
3 A /var/www/html/uploads/ikstart.php 7814 $path = '/var/www/html/uploads'
4 628 0 0.038669 2007312 str_replace 0 /var/www/html/uploads/ikstart.php 7815 3 '\\' '/' '/var/www/html/uploads'
4 628 1 0.038684 2007408
4 628 R '/var/www/html/uploads'
4 629 0 0.038698 2007312 rtrim 0 /var/www/html/uploads/ikstart.php 7815 2 '/var/www/html/uploads' '/'
4 629 1 0.038712 2007384
4 629 R '/var/www/html/uploads'
3 A /var/www/html/uploads/ikstart.php 7815 $path = '/var/www/html/uploads'
3 A /var/www/html/uploads/ikstart.php 7818 $path .= '/'
3 627 1 0.038745 2007360
3 627 R '/var/www/html/uploads/'
3 630 0 0.038759 2007360 htmlentities 0 /var/www/html/uploads/ikstart.php 10339 1 '/var/www/html/uploads/'
3 630 1 0.038773 2007552
3 630 R '/var/www/html/uploads/'
2 190 1 0.038955 2007264
1 3 1 0.038968 2007264
0.039030 1741504
TRACE END [2023-02-13 01:16:06.571617]
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Akeeba Kickstart Core 4.1.1</title>
<style type="text/css" media="all" rel="stylesheet">
html {
background: #e9e9e9;
font-size: 62.5%;
}
body {
font-size: 14px;
font-size: 1.4rem;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
text-rendering: optimizelegibility;
background: transparent;
color:#555;
width:90%;
max-width:980px;
margin: 0 auto;
}
#page-container {
position:relative;
margin:5% 0;
background: #f9f9f9;
border: 1px solid #777;
border: 1px solid rgba(0,0,0,.2);
-webkit-box-shadow: 0px 0px 10px rgba(0,0,0,.1);
-moz-box-shadow: 0px 0px 10px rgba(0,0,0,.1);
box-shadow: 0px 0px 10px rgba(0,0,0,.1);
}
#header {
color: #555;
text-shadow: 0 1px #fff;
background: #f2f5f6;
background: -moz-linear-gradient(top, #f2f5f6 0%, #e3eaed 37%, #c8d7dc 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f2f5f6), color-stop(37%,#e3eaed), color-stop(100%,#c8d7dc));
background: -webkit-linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
background: -o-linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
background: -ms-linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
background: linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
-moz-background-clip: padding;
-webkit-background-clip: padding-box;
background-clip: padding-box;
margin-bottom: 0.7em;
border-bottom: 1px solid #ddd;
border-bottom: 1px solid rgba(0,0,0,.2);
padding:.25em;
font-size: 32px;
font-size: 3.2rem;
line-height: 1.2;
text-align: center;
}
#footer {
font-size: 8pt;
color: #233b53;
text-align: center;
border-top: 1px solid #ddd;
border-top: 1px solid rgba(0,0,0,.05);
padding: 1em 2em;
background: #deefff;
background: -moz-linear-gradient(top, #deefff 0%, #98bede 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#deefff), color-stop(100%,#98bede));
background: -webkit-linear-gradient(top, #deefff 0%,#98bede 100%);
background: -o-linear-gradient(top, #deefff 0%,#98bede 100%);
background: -ms-linear-gradient(top, #deefff 0%,#98bede 100%);
background: linear-gradient(top, #deefff 0%,#98bede 100%);
clear: both;
}
#error, .error {
display: none;
border: solid #cc0000;
border-width: 2px 0;
background: rgb(255,255,136);
background: -moz-linear-gradient(top, rgba(255,255,136,1) 0%, rgba(255,255,136,1) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,136,1)), color-stop(100%,rgba(255,255,136,1)));
background: -webkit-linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
background: -o-linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
background: -ms-linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
background: linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
color: #990000;
padding:2em 2em 1em;
margin-bottom: 1.15em;
text-align:center;
text-transform: uppercase;
}
#errorMessage, .errorMessage {
text-transform: none;
}
#error h3, .error h3 {
margin: 0;
padding: 0;
font-size: 12pt;
}
.clr {
clear: both;
}
.circle {
display: block;
float: left;
-moz-border-radius: 2em;
-webkit-border-radius: 2em;
border: 2px solid #e5e5e5;
font-weight: bold;
font-size: 18px;
font-size: 1.8rem;
line-height:1.5em;
color: #fff;
height: 1.5em;
width: 1.5em;
margin: 0.75em;
text-align: center;
background: rgb(35,83,138);
background: -moz-linear-gradient(top, rgba(35,83,138,1) 0%, rgba(167,207,223,1) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(35,83,138,1)), color-stop(100%,rgba(167,207,223,1)));
background: -webkit-linear-gradient(top, rgba(35,83,138,1) 0%,rgba(167,207,223,1) 100%);
background: -o-linear-gradient(top, rgba(35,83,138,1) 0%,rgba(167,207,223,1) 100%);
background: -ms-linear-gradient(top, rgba(35,83,138,1) 0%,rgba(167,207,223,1) 100%);
background: linear-gradient(top, rgba(35,83,138,1) 0%,rgba(167,207,223,1) 100%);
-webkit-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.8) inset, 0px -1px 2px rgba(255,255,255,.9) inset, 0px 0px 1px rgba(0,0,0,.7); 0 -1px 1px rgba(0,0,0,.4);
-moz-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.8) inset, 0px -1px 2px rgba(255,255,255,.9) inset, 0px 0px 1px rgba(0,0,0,.7); 0 -1px 1px rgba(0,0,0,.4);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.8) inset, 0px -1px 2px rgba(255,255,255,.9) inset, 0px 0px 1px rgba(0,0,0,.7); 0 -1px 1px rgba(0,0,0,.4);
}
.area-container {
margin: 1em 4em;
}
#page2a .area-container {
margin: 1em 0;
}
#runInstaller,
#runCleanup,
#gotoSite,
#gotoAdministrator,
#gotoPostRestorationRroubleshooting {
margin: 0 2em 1.3em;
}
h2 {
font-size: 24px;
font-size: 2.4rem;
font-weight: normal;
line-height: 1.3;
border: solid #ddd;
text-shadow: 0px 1px #fff;
border-top: 1px solid rgba(0,0,0,.05);
border-bottom: 1px solid rgba(0,0,0,.2);
border-left:none;
border-right:none;
padding: 0.5em 0;
background: #f2f5f6;
background: -moz-linear-gradient(top, #f2f5f6 0%, #e3eaed 37%, #c8d7dc 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f2f5f6), color-stop(37%,#e3eaed), color-stop(100%,#c8d7dc));
background: -webkit-linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
background: -o-linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
background: -ms-linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
background: linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
}
#preextraction h2 {
margin-top:0;
border-top:0;
text-align:center;
}
input,
select,
textarea {
font-size : 100%;
margin : 0;
vertical-align : baseline;
*vertical-align: middle;
}
button,
input {
line-height : normal;
font-weight:normal;
*overflow: visible;
}
input,
select,
textarea {
background:#fff;
color:#777;
font-size: 16px;
font-size: 1.6rem;
border:1px solid #d5d5d5;
-webkit-border-radius: .25em;
-moz-border-radius: .25em;
border-radius: .25em;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
width:50%;
padding:0 0 0 .5em;
}
input[type="checkbox"] {
width:auto;
}
.field {
height:1.5em;
}
label {
display:inline-block;
width:30%;
font-size: 85%;
font-weight: normal;
text-transform: uppercase;
cursor : pointer;
color: #777;
margin:.5em 0;
}
input:focus, input:hover {
background-color: #fffbb3;
}
.button {
display: inline-block;
margin: 1em .25em;
text-transform: uppercase;
padding: 1em 2em;
background: #2cb12c;
color:#fff;
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.2), 0 1px rgba(0, 0, 0, 0.4);
-webkit-box-shadow: 0 1px 3px rgba(255, 255, 255, 0.5) inset, -1px 2px 2px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 1px 3px rgba(255, 255, 255, 0.5) inset, -1px 2px 2px rgba(0, 0, 0, 0.2);
box-shadow: 0 1px 3px rgba(255, 255, 255, 0.5) inset, -1px 2px 2px rgba(0, 0, 0, 0.2);
background: -moz-linear-gradient(top, #2cb12c 0%, #259625 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2cb12c), color-stop(100%,#259625));
background: -webkit-linear-gradient(top, #2cb12c 0%,#259625 100%);
background: -o-linear-gradient(top, #2cb12c 0%,#259625 100%);
background: -ms-linear-gradient(top, #2cb12c 0%,#259625 100%);
background: linear-gradient(top, #2cb12c 0%,#259625 100%);
border: solid #ddd;
border: 1px solid rgba(0,0,0,.1);
cursor: pointer;
-webkit-border-radius: .25em;
-moz-border-radius: .25em;
border-radius: .25em;
-webkit-transition: 0.3s linear all;
-moz-transition: 0.3s linear all;
-ms-transition: 0.3s linear all;
-o-transition: 0.3s linear all;
transition: 0.3s linear all;
}
#checkFTPTempDir.button,
#resetFTPTempDir.button,
#testFTP.button,
#browseFTP,
#reloadArchives,
#notWorking.button {
padding: .5em 1em;
text-transform: none;
}
.button:hover {
background: #259625;
background: -moz-linear-gradient(top, #259625 0%, #2cb12c 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#259625), color-stop(100%,#2cb12c));
background: -webkit-linear-gradient(top, #259625 0%,#2cb12c 100%);
background: -o-linear-gradient(top, #259625 0%,#2cb12c 100%);
background: -ms-linear-gradient(top, #259625 0%,#2cb12c 100%);
background: linear-gradient(top, #259625 0%,#2cb12c 100%);
}
.button:active {
background: #3c3;
color: #444;
text-shadow: 0 1px #fff;
border: solid #ccc;
border: 1px solid rgba(0,0,0,.3);
-webkit-box-shadow: 0 1px 3px rgba(0,0,0, 0.5) inset;
-moz-box-shadow: 0 1px 3px rgba(0,0,0, 0.5) inset;
box-shadow: 0 1px 3px rgba(0,0,0, 0.5) inset;
}
#notWorking.button, .bluebutton {
text-decoration: none;
background: #7abcff;
background: -moz-linear-gradient(top, #7abcff 0%, #60abf8 44%, #4096ee 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7abcff), color-stop(44%,#60abf8), color-stop(100%,#4096ee));
background: -webkit-linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
background: -o-linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
background: -ms-linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
background: linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
}
#notWorking.button:hover, .bluebutton:hover {
background: #4096ee;
background: -moz-linear-gradient(top, #4096ee 0%, #60abf8 56%, #7abcff 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#4096ee), color-stop(56%,#60abf8), color-stop(100%,#7abcff));
background: -webkit-linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: -o-linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: -ms-linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
}
#notWorking.button:active, .bluebutton:active {
background: #7abcff;
}
.loprofile {
padding: 0.5em 1em;
font-size: 80%;
}
.black_overlay{
display: none;
position: absolute;
top: 0%;
left: 0%;
width: 100%;
height: 100%;
background-color: black;
z-index:1001;
-moz-opacity: 0.8;
opacity:.80;
filter: alpha(opacity=80);
}
.white_content {
display: none;
position: absolute;
padding: 0 0 1em;
background: #fff;
border: 1px solid #ddd;
border: 1px solid rgba(0,0,0,.3);
z-index:1002;
overflow: hidden;
}
.white_content a{
margin-left:4em;
}
ol {
margin:0 2em;
padding:0 2em 1em;
}
li {
margin : 0 0 .5em;
}
#genericerror {
background-color: #f0f000 !important;
border: 4px solid #fcc !important;
}
#genericerrorInner {
font-size: 110%;
color: #33000;
}
#warn-not-close, .warn-not-close {
padding: 0.2em 0.5em;
text-align: center;
background: #fcfc00;
font-size: smaller;
font-weight: bold;
}
#progressbar, .progressbar {
display: block;
width: 80%;
height: 32px;
border: 1px solid #ccc;
margin: 1em 10% 0.2em;
-moz-border-radius: .25em;
-webkit-border-radius: .25em;
border-radius: .25em;
}
#progressbar-inner, .progressbar-inner {
display: block;
width: 100%;
height: 100%;
background: #4096ee;
background: -moz-linear-gradient(left, #4096ee 0%, #60abf8 56%, #7abcff 100%);
background: -webkit-gradient(linear, left top, right top, color-stop(0%,#4096ee), color-stop(56%,#60abf8), color-stop(100%,#7abcff));
background: -webkit-linear-gradient(left, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: -o-linear-gradient(left, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: -ms-linear-gradient(left, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: linear-gradient(left, #4096ee 0%,#60abf8 56%,#7abcff 100%);
}
#currentFile {
font-family: Consolas, "Courier New", Courier, monospace;
font-size: 9pt;
height: 10pt;
overflow: hidden;
text-overflow: ellipsis;
background: #ccc;
margin: 0 10% 1em;
padding:.125em;
}
#extractionComplete {
}
#warningsContainer {
border-bottom: 2px solid brown;
border-left: 2px solid brown;
border-right: 2px solid brown;
padding: 5px 0;
background: #ffffcc;
-webkit-border-bottom-right-radius: 5px;
-webkit-border-bottom-left-radius: 5px;
-moz-border-radius-bottomleft: 5px;
-moz-border-radius-bottomright: 5px;
}
#warningsHeader h2 {
color: black;
text-shadow: 2px 2px 5px #999999;
border-top: 2px solid brown;
border-left: 2px solid brown;
border-right: 2px solid brown;
border-bottom: thin solid brown;
-webkit-border-top-right-radius: 5px;
-webkit-border-top-left-radius: 5px;
-moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px;
background: yellow;
font-size: large;
padding: 2px 5px;
margin: 0px;
}
#warnings {
height: 200px;
overflow-y: scroll;
}
#warnings div {
background: #eeeeee;
font-size: small;
padding: 2px 4px;
border-bottom: thin solid #333333;
}
#automode {
display: inline-block;
padding: 6pt 12pt;
background-color: #cc0000;
border: thick solid yellow;
color: white;
font-weight: bold;
font-size: 125%;
position: absolute;
float: right;
top: 1em;
right: 1em;
}
.helpme,
#warn-not-close {
background: rgb(255,255,136);
background: -moz-linear-gradient(top, rgba(255,255,136,1) 0%, rgba(255,255,136,1) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,136,1)), color-stop(100%,rgba(255,255,136,1)));
background: -webkit-linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
background: -o-linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
background: -ms-linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
background: linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
padding: 0.75em 0.5em;
border: solid #febf01;
border-width: 1px 0;
text-align: center;
}
#update-notification {
margin: 1em;
padding: 0.5em;
background-color: #FF9;
color: #F33;
text-align: center;
border-radius: 20px;
border: medium solid red;
box-shadow: 5px 5px 5px black;
}
.update-notify {
font-size: 20pt;
font-weight: bold;
}
.update-links {
color: #333;
font-size: 14pt;
}
#update-dlnow {
text-decoration: none;
color: #333;
border: thin solid #333;
padding: 0.5em;
border-radius: 5px;
background-color: #f0f0f0;
text-shadow: 1px 1px 1px #999;
}
#update-dlnow:hover {
background-color: #fff;
}
#update-whatsnew {
font-size: 11pt;
color: blue;
text-decoration: underline;
}
.update-whyupdate {
color: #333;
font-size: 9pt;
}
/* FTP Browser */
.breadcrumb {background-color: #F5F5F5; border-radius: 4px; list-style: none outside none; margin: 0 0 18px; padding: 8px 15px;}
.breadcrumb > li {display: inline-block; text-shadow: 0 1px 0 #FFFFFF;}
#ak_crumbs span {padding: 1px 3px;}
#ak_crumbs a {cursor: pointer;}
#ftpBrowserFolderList a{cursor:pointer}
/* Bootstrap porting */
.table {margin-bottom: 18px;width: 100%;}
.table th, .table td {border-top: 1px solid #DDDDDD; line-height: 18px; padding: 8px; text-align: left; vertical-align: top;}
.table-striped tbody > tr:nth-child(2n+1) > td, .table-striped tbody > tr:nth-child(2n+1) > th { background-color: #F9F9F9;}
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
.ui-helper-clearfix:after { clear: both; }
.ui-helper-clearfix { zoom: 1; }
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active { text-decoration: none; }
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; }
button.ui-button-icons-only { width: 3.7em; }
/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4; }
.ui-button-text-only .ui-button-text { padding: 0; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }
/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
.ui-dialog { position: absolute; top: 0; left: 0; padding: .2em; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; display:none}
.ui-dialog .ui-dialog-titlebar-close span { display: none; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/* Component containers
----------------------------------*/
.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd; color: #222222; }
.ui-widget-content a { color: #222222; }
.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc ; color: #ffffff; font-weight: bold; }
.ui-widget-header a { color: #ffffff; }
/* Interaction states
----------------------------------*/
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited {text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover{
background: #4096ee;
background: -moz-linear-gradient(top, #4096ee 0%, #60abf8 56%, #7abcff 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#4096ee), color-stop(56%,#60abf8), color-stop(100%,#7abcff));
background: -webkit-linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: -o-linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: -ms-linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
}
.ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #1d5987; text-decoration: none; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; text-decoration: none; }
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 ; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec ; color: #cd0a0a; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
.ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); } /* For IE8 - See #6059 */
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display:none}
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -khtml-border-top-left-radius: 5px; border-top-left-radius: 5px; }
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; -khtml-border-top-right-radius: 5px; border-top-right-radius: 5px; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; -khtml-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; -khtml-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
/* Overlays */
.ui-widget-overlay { background: #000000 ; opacity: .8;filter:Alpha(Opacity=80); }
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #000000 ; opacity: .8;filter:Alpha(Opacity=80); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }
.ui-button {
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
font-size: 1.4rem;
display: inline-block;
padding: .5em 1em;
margin: 1em .25em;
color:#fff;
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.2), 0 1px rgba(0, 0, 0, 0.4);
-webkit-box-shadow: 0 1px 3px rgba(255, 255, 255, 0.5) inset, -1px 2px 2px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 1px 3px rgba(255, 255, 255, 0.5) inset, -1px 2px 2px rgba(0, 0, 0, 0.2);
box-shadow: 0 1px 3px rgba(255, 255, 255, 0.5) inset, -1px 2px 2px rgba(0, 0, 0, 0.2);
text-decoration: none;
background: #7abcff;
background: -moz-linear-gradient(top, #7abcff 0%, #60abf8 44%, #4096ee 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7abcff), color-stop(44%,#60abf8), color-stop(100%,#4096ee));
background: -webkit-linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
background: -o-linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
background: -ms-linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
background: linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
border: solid #ddd;
border: 1px solid rgba(0,0,0,.1);
cursor: pointer;
-webkit-border-radius: .25em;
-moz-border-radius: .25em;
border-radius: .25em;
-webkit-transition: 0.3s linear all;
-moz-transition: 0.3s linear all;
-ms-transition: 0.3s linear all;
-o-transition: 0.3s linear all;
transition: 0.3s linear all;
}
</style>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="//yandex.st/json2/2011-10-19/json2.min.js"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script>
<script type="text/javascript" language="javascript">
var akeeba_debug = false;
var sftp_path = '/var/www/html/';
var isJoomla = true;
/**
* Returns the version of Internet Explorer or a -1
* (indicating the use of another browser).
*
* @return integer MSIE version or -1
*/
function getInternetExplorerVersion()
{
var rv = -1; // Return value assumes failure.
if (navigator.appName == 'Microsoft Internet Explorer')
{
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
{
rv = parseFloat( RegExp.$1 );
}
}
return rv;
}
$(document).ready(function(){
// Hide 2nd Page
$('#page2').css('display','none');
// Translate the GUI
translateGUI();
// Hook interaction handlers
$(document).keyup( closeLightbox );
$('#kickstart\\.procengine').change( onChangeProcengine );
$('#kickstart\\.setup\\.sourcepath').change( onArchiveListReload );
$('#reloadArchives').click ( onArchiveListReload );
$('#checkFTPTempDir').click( oncheckFTPTempDirClick );
$('#resetFTPTempDir').click( onresetFTPTempDir );
$('#browseFTP').click( onbrowseFTP );
$('#testFTP').click( onTestFTPClick );
$('#gobutton').click( onStartExtraction );
$('#runInstaller').click( onRunInstallerClick );
$('#runCleanup').click( onRunCleanupClick );
$('#gotoSite').click(function(event){window.open('index.php','finalstepsite'); window.close();});
$('#gotoAdministrator').click(function(event){window.open('administrator/index.php','finalstepadmin'); window.close();});
$('#gotoStart').click( onGotoStartClick );
// Reset the progress bar
setProgressBar(0);
// Show warning
var msieVersion = getInternetExplorerVersion();
if((msieVersion != -1) && (msieVersion <= 8.99))
{
$('#ie7Warning').css('display','block');
}
if(!akeeba_debug) {
$('#preextraction').css('display','block');
$('#fade').css('display','block');
}
// Trigger change, so we avoid problems if the user refreshes the page
$('#kickstart\\.procengine').change();
});
var translation = {
'AKURL_IMPORT': 'Import from URL',
'AKURL_TITLE_STEP1': 'Specify the URL',
'AKURL_FILENAME': 'URL to import',
'AKURL_JOOMLA': 'Latest Joomla! release',
'AKURL_WORDPRESS': 'Latest WordPress release',
'AKURL_CANCEL': 'Cancel import',
'AKURL_TITLE_STEP2': 'Importing...',
'AKURL_DO_NOT_CLOSE': 'Please do not close this window while your backup archives are being imported',
'AKURL_TITLE_STEP3': 'Import is complete',
'AKURL_BTN_RELOAD': 'Reload Kickstart',
'AUTOMODEON': 'Auto-mode enabled',
'ERR_NOT_A_JPA_FILE': 'The file is not a JPA archive',
'ERR_CORRUPT_ARCHIVE': 'The archive file is corrupt, truncated or archive parts are missing',
'ERR_INVALID_LOGIN': 'Invalid login',
'COULDNT_CREATE_DIR': 'Could not create %s folder',
'COULDNT_WRITE_FILE': 'Could not open %s for writing.',
'WRONG_FTP_HOST': 'Wrong FTP host or port',
'WRONG_FTP_USER': 'Wrong FTP username or password',
'WRONG_FTP_PATH1': 'Wrong FTP initial directory - the directory doesn\'t exist',
'FTP_CANT_CREATE_DIR': 'Could not create directory %s',
'FTP_TEMPDIR_NOT_WRITABLE': 'Could not find or create a writable temporary directory',
'SFTP_TEMPDIR_NOT_WRITABLE': 'Could not find or create a writable temporary directory',
'FTP_COULDNT_UPLOAD': 'Could not upload %s',
'THINGS_HEADER': 'Things you should know about Akeeba Kickstart',
'THINGS_01': 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.',
'THINGS_02': 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.',
'THINGS_03': 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.',
'THINGS_04': 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.',
'THINGS_05': 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.',
'THINGS_06': 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.',
'THINGS_07': 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.',
'THINGS_08': 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.',
'THINGS_09': 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.',
'CLOSE_LIGHTBOX': 'Click here or press ESC to close this message',
'SELECT_ARCHIVE': 'Select a backup archive',
'ARCHIVE_FILE': 'Archive file:',
'SELECT_EXTRACTION': 'Select an extraction method',
'WRITE_TO_FILES': 'Write to files:',
'WRITE_HYBRID': 'Hybrid (use FTP only if needed)',
'WRITE_DIRECTLY': 'Directly',
'WRITE_FTP': 'Use FTP for all files',
'WRITE_SFTP': 'Use SFTP for all files',
'FTP_HOST': '(S)FTP host name:',
'FTP_PORT': '(S)FTP port:',
'FTP_FTPS': 'Use FTP over SSL (FTPS)',
'FTP_PASSIVE': 'Use FTP Passive Mode',
'FTP_USER': '(S)FTP user name:',
'FTP_PASS': '(S)FTP password:',
'FTP_DIR': '(S)FTP directory:',
'FTP_TEMPDIR': 'Temporary directory:',
'FTP_CONNECTION_OK': 'FTP Connection Established',
'SFTP_CONNECTION_OK': 'SFTP Connection Established',
'FTP_CONNECTION_FAILURE': 'The FTP Connection Failed',
'SFTP_CONNECTION_FAILURE': 'The SFTP Connection Failed',
'FTP_TEMPDIR_WRITABLE': 'The temporary directory is writable.',
'FTP_TEMPDIR_UNWRITABLE': 'The temporary directory is not writable. Please check the permissions.',
'FTPBROWSER_ERROR_HOSTNAME': 'Invalid FTP host or port',
'FTPBROWSER_ERROR_USERPASS': 'Invalid FTP username or password',
'FTPBROWSER_ERROR_NOACCESS': 'Directory doesn\'t exist or you don\'t have enough permissions to access it',
'FTPBROWSER_ERROR_UNSUPPORTED': 'Sorry, your FTP server doesn\'t support our FTP directory browser.',
'FTPBROWSER_LBL_GOPARENT': '<up one level>',
'FTPBROWSER_LBL_INSTRUCTIONS': 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.',
'FTPBROWSER_LBL_ERROR': 'An error occurred',
'SFTP_NO_SSH2': 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.',
'SFTP_NO_FTP_SUPPORT': 'Your SSH server does not allow SFTP connections',
'SFTP_WRONG_USER': 'Wrong SFTP username or password',
'SFTP_WRONG_STARTING_DIR': 'You must supply a valid absolute path',
'SFTPBROWSER_ERROR_NOACCESS': 'Directory doesn\'t exist or you don\'t have enough permissions to access it',
'SFTP_COULDNT_UPLOAD': 'Could not upload %s',
'SFTP_CANT_CREATE_DIR': 'Could not create directory %s',
'UI-ROOT': '<root>',
'CONFIG_UI_FTPBROWSER_TITLE': 'FTP Directory Browser',
'FTP_BROWSE': 'Browse',
'BTN_CHECK': 'Check',
'BTN_RESET': 'Reset',
'BTN_TESTFTPCON': 'Test FTP connection',
'BTN_TESTSFTPCON': 'Test SFTP connection',
'BTN_GOTOSTART': 'Start over',
'FINE_TUNE': 'Fine tune',
'MIN_EXEC_TIME': 'Minimum execution time:',
'MAX_EXEC_TIME': 'Maximum execution time:',
'SECONDS_PER_STEP': 'seconds per step',
'EXTRACT_FILES': 'Extract files',
'BTN_START': 'Start',
'EXTRACTING': 'Extracting',
'DO_NOT_CLOSE_EXTRACT': 'Do not close this window while the extraction is in progress',
'RESTACLEANUP': 'Restoration and Clean Up',
'BTN_RUNINSTALLER': 'Run the Installer',
'BTN_CLEANUP': 'Clean Up',
'BTN_SITEFE': 'Visit your site\'s front-end',
'BTN_SITEBE': 'Visit your site\'s back-end',
'WARNINGS': 'Extraction Warnings',
'ERROR_OCCURED': 'An error occured',
'STEALTH_MODE': 'Stealth mode',
'STEALTH_URL': 'HTML file to show to web visitors',
'ERR_NOT_A_JPS_FILE': 'The file is not a JPA archive',
'ERR_INVALID_JPS_PASSWORD': 'The password you gave is wrong or the archive is corrupt',
'JPS_PASSWORD': 'Archive Password (for JPS files)',
'INVALID_FILE_HEADER': 'Invalid header in archive file, part %s, offset %s',
'NEEDSOMEHELPKS': 'Want some help to use this tool? Read this first:',
'QUICKSTART': 'Quick Start Guide',
'CANTGETITTOWORK': 'Can\'t get it to work? Click me!',
'NOARCHIVESCLICKHERE': 'No archives detected. Click here for troubleshooting instructions.',
'POSTRESTORATIONTROUBLESHOOTING': 'Something not working after the restoration? Click here for troubleshooting instructions.',
'UPDATE_HEADER': 'An updated version of Akeeba Kickstart (<span id=\"update-version\">unknown</span>) is available!',
'UPDATE_NOTICE': 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.',
'UPDATE_DLNOW': 'Download now',
'UPDATE_MOREINFO': 'More information',
'IGNORE_MOST_ERRORS': 'Ignore most errors',
'WRONG_FTP_PATH2': 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root',
'ARCHIVE_DIRECTORY': 'Archive directory:',
'RELOAD_ARCHIVES': 'Reload',
'CONFIG_UI_SFTPBROWSER_TITLE': 'SFTP Directory Browser',
'ERR_COULD_NOT_OPEN_ARCHIVE_PART': 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.' }
var akeeba_ajax_url = 'ikstart.php';
var akeeba_error_callback = onGenericError;
var akeeba_restoration_stat_inbytes = 0;
var akeeba_restoration_stat_outbytes = 0;
var akeeba_restoration_stat_files = 0;
var akeeba_restoration_stat_total = 0;
var akeeba_factory = null;
var akeeba_ftpbrowser_host = null;
var akeeba_ftpbrowser_port = 21;
var akeeba_ftpbrowser_username = null;
var akeeba_ftpbrowser_password = null;
var akeeba_ftpbrowser_passive = 1;
var akeeba_ftpbrowser_ssl = 0;
var akeeba_ftpbrowser_directory = '';
var akeeba_sftpbrowser_host = null;
var akeeba_sftpbrowser_port = 21;
var akeeba_sftpbrowser_username = null;
var akeeba_sftpbrowser_password = null;
var akeeba_sftpbrowser_pubkey = null;
var akeeba_sftpbrowser_privkey = null;
var akeeba_sftpbrowser_directory = '';
function translateGUI()
{
$('*').each(function(i,e){
transKey = $(e).text();
if(array_key_exists(transKey, translation))
{
$(e).text( translation[transKey] );
}
});
}
function trans(key)
{
if(array_key_exists(key, translation)) {
return translation[key];
} else {
return key;
}
}
function array_key_exists ( key, search ) {
if (!search || (search.constructor !== Array && search.constructor !== Object)){
return false;
}
return key in search;
}
function empty (mixed_var) {
var key;
if (mixed_var === "" ||
mixed_var === 0 ||
mixed_var === "0" ||
mixed_var === null ||
mixed_var === false ||
typeof mixed_var === 'undefined'
){
return true;
}
if (typeof mixed_var == 'object') {
for (key in mixed_var) {
return false;
}
return true;
}
return false;
}
function is_array (mixed_var) {
var key = '';
var getFuncName = function (fn) {
var name = (/\W*function\s+([\w\$]+)\s*\(/).exec(fn);
if (!name) {
return '(Anonymous)';
}
return name[1];
};
if (!mixed_var) {
return false;
}
// BEGIN REDUNDANT
this.php_js = this.php_js || {};
this.php_js.ini = this.php_js.ini || {};
// END REDUNDANT
if (typeof mixed_var === 'object') {
if (this.php_js.ini['phpjs.objectsAsArrays'] && // Strict checking for being a JavaScript array (only check this way if call ini_set('phpjs.objectsAsArrays', 0) to disallow objects as arrays)
(
(this.php_js.ini['phpjs.objectsAsArrays'].local_value.toLowerCase &&
this.php_js.ini['phpjs.objectsAsArrays'].local_value.toLowerCase() === 'off') ||
parseInt(this.php_js.ini['phpjs.objectsAsArrays'].local_value, 10) === 0)
) {
return mixed_var.hasOwnProperty('length') && // Not non-enumerable because of being on parent class
!mixed_var.propertyIsEnumerable('length') && // Since is own property, if not enumerable, it must be a built-in function
getFuncName(mixed_var.constructor) !== 'String'; // exclude String()
}
if (mixed_var.hasOwnProperty) {
for (key in mixed_var) {
// Checks whether the object has the specified property
// if not, we figure it's not an object in the sense of a php-associative-array.
if (false === mixed_var.hasOwnProperty(key)) {
return false;
}
}
}
// Read discussion at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_is_array/
return true;
}
return false;
}
function resolvePath(filename)
{
filename = filename.replace('\/\/g', '\/');
var parts = filename.split('/');
var out = [];
$.each(parts, function(i, part){
if (part == '.') return;
if (part == '..') {
out.pop();
return;
}
out.push(part);
});
return out.join('/');
}
/**
* Performs an AJAX request and returns the parsed JSON output.
* The global akeeba_ajax_url is used as the AJAX proxy URL.
* If there is no errorCallback, the global akeeba_error_callback is used.
* @param data An object with the query data, e.g. a serialized form
* @param successCallback A function accepting a single object parameter, called on success
* @param errorCallback A function accepting a single string parameter, called on failure
*/
function doAjax(data, successCallback, errorCallback)
{
var structure =
{
type: "POST",
url: akeeba_ajax_url,
cache: false,
data: data,
timeout: 600000,
success: function(msg) {
// Initialize
var junk = null;
var message = "";
// Get rid of junk before the data
var valid_pos = msg.indexOf('###');
if( valid_pos == -1 ) {
// Valid data not found in the response
msg = 'Invalid AJAX data received:<br/>' + msg;
if(errorCallback == null)
{
if(akeeba_error_callback != null)
{
akeeba_error_callback(msg);
}
}
else
{
errorCallback(msg);
}
return;
} else if( valid_pos != 0 ) {
// Data is prefixed with junk
junk = msg.substr(0, valid_pos);
message = msg.substr(valid_pos);
}
else
{
message = msg;
}
message = message.substr(3); // Remove triple hash in the beginning
// Get of rid of junk after the data
var valid_pos = message.lastIndexOf('###');
message = message.substr(0, valid_pos); // Remove triple hash in the end
try {
var data = eval('('+message+')');
} catch(err) {
var msg = err.message + "\n<br/>\n<pre>\n" + message + "\n</pre>";
if(errorCallback == null)
{
if(akeeba_error_callback != null)
{
akeeba_error_callback(msg);
}
}
else
{
errorCallback(msg);
}
return;
}
// Call the callback function
successCallback(data);
},
error: function(Request, textStatus, errorThrown) {
var message = '<strong>AJAX Loading Error</strong><br/>HTTP Status: '+Request.status+' ('+Request.statusText+')<br/>';
message = message + 'Internal status: '+textStatus+'<br/>';
message = message + 'XHR ReadyState: ' + Response.readyState + '<br/>';
message = message + 'Raw server response:<br/>'+Request.responseText;
if(errorCallback == null)
{
if(akeeba_error_callback != null)
{
akeeba_error_callback(message);
}
}
else
{
errorCallback(message);
}
}
};
$.ajax( structure );
}
function onChangeProcengine(event)
{
if( $('#kickstart\\.procengine').val() == 'direct' )
{
$('#ftp-options').hide('fast');
} else {
$('#ftp-options').show('fast');
}
if($('#kickstart\\.procengine').val() == 'sftp' )
{
$('#ftp-ssl-passive').hide('fast');
if($('#kickstart\\.ftp\\.dir').val() == ''){
$('#kickstart\\.ftp\\.dir').val(sftp_path);
}
$('#testFTP').html(trans('BTN_TESTSFTPCON'))
}
else
{
$('#ftp-ssl-passive').show('fast');
$('#testFTP').html(trans('BTN_TESTFTPCON'))
}
}
function closeLightbox(event)
{
var closeMe = false;
if( (event == null) || (event == undefined) ) {
closeMe = true;
} else if(event.keyCode == '27') {
closeMe = true;
}
if(closeMe)
{
document.getElementById('preextraction').style.display='none';
document.getElementById('genericerror').style.display='none';
document.getElementById('fade').style.display='none';
$(document).unbind('keyup', closeLightbox);
}
}
function onGenericError(msg)
{
$('#genericerrorInner').html(msg);
$('#genericerror').css('display','block');
$('#fade').css('display','block');
$(document).keyup(closeLightbox);
}
function setProgressBar(percent)
{
var newValue = 0;
if(percent <= 1) {
newValue = 100 * percent;
} else {
newValue = percent;
}
$('#progressbar-inner').css('width',percent+'%');
}
function oncheckFTPTempDirClick(event)
{
var data = {
'task' : 'checkTempdir',
'json': JSON.stringify({
'kickstart.ftp.tempdir': $('#kickstart\\.ftp\\.tempdir').val()
})
};
doAjax(data, function(ret){
var key = ret.status ? 'FTP_TEMPDIR_WRITABLE' : 'FTP_TEMPDIR_UNWRITABLE';
alert( trans(key) );
});
}
function onTestFTPClick(event)
{
var type = 'ftp';
if($('#kickstart\\.procengine').val() == 'sftp')
{
type = 'sftp';
}
var data = {
'task' : 'checkFTP',
'json': JSON.stringify({
'type' : type,
'kickstart.ftp.host': $('#kickstart\\.ftp\\.host').val(),
'kickstart.ftp.port': $('#kickstart\\.ftp\\.port').val(),
'kickstart.ftp.ssl': $('#kickstart\\.ftp\\.ssl').is(':checked'),
'kickstart.ftp.passive': $('#kickstart\\.ftp\\.passive').is(':checked'),
'kickstart.ftp.user': $('#kickstart\\.ftp\\.user').val(),
'kickstart.ftp.pass': $('#kickstart\\.ftp\\.pass').val(),
'kickstart.ftp.dir': $('#kickstart\\.ftp\\.dir').val(),
'kickstart.ftp.tempdir': $('#kickstart\\.ftp\\.tempdir').val()
})
};
doAjax(data, function(ret){
if(type == 'ftp'){
var key = ret.status ? 'FTP_CONNECTION_OK' : 'FTP_CONNECTION_FAILURE';
}
else{
var key = ret.status ? 'SFTP_CONNECTION_OK' : 'SFTP_CONNECTION_FAILURE';
}
alert( trans(key) + "\n\n" + (ret.status ? '' : ret.message) );
});
}
function onbrowseFTP ()
{
if($('#kickstart\\.procengine').val() != 'sftp')
{
akeeba_ftpbrowser_host = $('#kickstart\\.ftp\\.host').val();
akeeba_ftpbrowser_port = $('#kickstart\\.ftp\\.port').val();
akeeba_ftpbrowser_username = $('#kickstart\\.ftp\\.user').val();
akeeba_ftpbrowser_password = $('#kickstart\\.ftp\\.pass').val();
akeeba_ftpbrowser_passive = $('#kickstart\\.ftp\\.passive').is(':checked');
akeeba_ftpbrowser_ssl = $('#kickstart\\.ftp\\.ssl').is(':checked');
akeeba_ftpbrowser_directory = $('#kickstart\\.ftp\\.dir').val();
var akeeba_onbrowseFTP_callback = function(path) {
var charlist = ('/').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '$1');
var re = new RegExp('^[' + charlist + ']+', 'g');
path = '/' + (path+'').replace(re, '');
$('#kickstart\\.ftp\\.dir').val(path);
};
akeeba_ftpbrowser_hook( akeeba_onbrowseFTP_callback );
}
else
{
akeeba_sftpbrowser_host = $('#kickstart\\.ftp\\.host').val();
akeeba_sftpbrowser_port = $('#kickstart\\.ftp\\.port').val();
akeeba_sftpbrowser_username = $('#kickstart\\.ftp\\.user').val();
akeeba_sftpbrowser_password = $('#kickstart\\.ftp\\.pass').val();
akeeba_sftpbrowser_directory = $('#kickstart\\.ftp\\.dir').val();
var akeeba_postprocsftp_callback = function(path) {
var charlist = ('/').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '$1');
var re = new RegExp('^[' + charlist + ']+', 'g');
path = '/' + (path+'').replace(re, '');
$('#kickstart\\.ftp\\.dir').val(path);
};
akeeba_sftpbrowser_hook( akeeba_postprocsftp_callback );
}
}
akeeba_ftpbrowser_hook = function( callback )
{
var ftp_dialog_element = $("#ftpdialog");
var ftp_callback = function() {
callback(akeeba_ftpbrowser_directory);
ftp_dialog_element.dialog("close");
};
ftp_dialog_element.css('display','block');
ftp_dialog_element.removeClass('ui-state-error');
ftp_dialog_element.dialog({
autoOpen : false,
title : trans('CONFIG_UI_FTPBROWSER_TITLE'),
draggable : false,
height : 500,
width : 500,
modal : true,
resizable : false,
buttons : {
"OK": ftp_callback,
"Cancel": function() {
ftp_dialog_element.dialog("close");
}
}
});
$('#ftpBrowserErrorContainer').css('display','none');
$('#ftpBrowserFolderList').html('');
$('#ak_crumbs').html('');
ftp_dialog_element.dialog('open');
if(empty(akeeba_ftpbrowser_directory)) akeeba_ftpbrowser_directory = '';
var data = {
'task' : 'ftpbrowse',
'json': JSON.stringify({
'host' : akeeba_ftpbrowser_host,
'port' : akeeba_ftpbrowser_port,
'username' : akeeba_ftpbrowser_username,
'password' : akeeba_ftpbrowser_password,
'passive' : (akeeba_ftpbrowser_passive ? 1 : 0),
'ssl' : (akeeba_ftpbrowser_ssl ? 1 : 0),
'directory' : akeeba_ftpbrowser_directory
})
};
// Do AJAX call and Render results
doAjax(
data,
function(data) {
if(data.error != false) {
// An error occured
$('#ftpBrowserError').html(trans(data.error));
$('#ftpBrowserErrorContainer').css('display','block');
$('#ftpBrowserFolderList').css('display','none');
$('#ak_crumbs').css('display','none');
} else {
// Create the interface
$('#ftpBrowserErrorContainer').css('display','none');
// Display the crumbs
if(!empty(data.breadcrumbs)) {
$('#ak_crumbs').css('display','block');
$('#ak_crumbs').html('');
var relativePath = '/';
akeeba_ftpbrowser_addcrumb(trans('UI-ROOT'), '/', callback);
$.each(data.breadcrumbs, function(i, crumb) {
relativePath += '/'+crumb;
akeeba_ftpbrowser_addcrumb(crumb, relativePath, callback);
});
} else {
$('#ak_crumbs').hide();
}
// Display the list of directories
if(!empty(data.list)) {
$('#ftpBrowserFolderList').show();
$.each(data.list, function(i, item) {
akeeba_ftpbrowser_create_link(akeeba_ftpbrowser_directory+'/'+item, item, $('#ftpBrowserFolderList'), callback );
});
} else {
$('#ftpBrowserFolderList').css('display','none');
}
}
},
function(message) {
$('#ftpBrowserError').html(message);
$('#ftpBrowserErrorContainer').css('display','block');
$('#ftpBrowserFolderList').css('display','none');
$('#ak_crumbs').css('display','none');
}
);
};
/**
* Creates a directory link for the FTP browser UI
*/
function akeeba_ftpbrowser_create_link(path, label, container, callback)
{
var row = $(document.createElement('tr'));
var cell = $(document.createElement('td')).appendTo(row);
var myElement = $(document.createElement('a'))
.text(label)
.click(function(){
akeeba_ftpbrowser_directory = resolvePath(path);
akeeba_ftpbrowser_hook(callback);
})
.appendTo(cell);
row.appendTo($(container));
}
/**
* Adds a breadcrumb to the FTP browser
*/
function akeeba_ftpbrowser_addcrumb(crumb, relativePath, callback, last)
{
if(empty(last)) last = false;
var li = $(document.createElement('li'));
$(document.createElement('a'))
.html(crumb)
.click(function(e){
akeeba_ftpbrowser_directory = relativePath;
akeeba_ftpbrowser_hook(callback);
e.preventDefault();
})
.appendTo(li);
if(!last) {
$(document.createElement('span'))
.text('/')
.addClass('divider')
.appendTo(li);
}
li.appendTo('#ak_crumbs');
}
// FTP browser function
akeeba_sftpbrowser_hook = function( callback )
{
var sftp_dialog_element = $("#ftpdialog");
var sftp_callback = function() {
callback(akeeba_sftpbrowser_directory);
sftp_dialog_element.dialog("close");
};
sftp_dialog_element.css('display','block');
sftp_dialog_element.removeClass('ui-state-error');
sftp_dialog_element.dialog({
autoOpen : false,
'title' : trans('CONFIG_UI_SFTPBROWSER_TITLE'),
draggable : false,
height : 500,
width : 500,
modal : true,
resizable : false,
buttons : {
"OK": sftp_callback,
"Cancel": function() {
sftp_dialog_element.dialog("close");
}
}
});
$('#ftpBrowserErrorContainer').css('display','none');
$('#ftpBrowserFolderList').html('');
$('#ak_crumbs').html('');
sftp_dialog_element.dialog('open');
if(empty(akeeba_sftpbrowser_directory)) akeeba_sftpbrowser_directory = '';
var data = {
'task' : 'sftpbrowse',
'json': JSON.stringify({
'host' : akeeba_sftpbrowser_host,
'port' : akeeba_sftpbrowser_port,
'username' : akeeba_sftpbrowser_username,
'password' : akeeba_sftpbrowser_password,
'directory' : akeeba_sftpbrowser_directory
})
};
doAjax(
data,
function(data) {
if(data.error != false) {
// An error occured
$('#ftpBrowserError').html(data.error);
$('#ftpBrowserErrorContainer').css('display','block');
$('#ftpBrowserFolderList').css('display','none');
$('#ak_crumbs').css('display','none');
} else {
// Create the interface
$('#ftpBrowserErrorContainer').css('display','none');
// Display the crumbs
if(!empty(data.breadcrumbs)) {
$('#ak_crumbs').css('display','block');
$('#ak_crumbs').html('');
var relativePath = '/';
akeeba_sftpbrowser_addcrumb(trans('UI-ROOT'), '/', callback);
$.each(data.breadcrumbs, function(i, crumb) {
relativePath += '/'+crumb;
akeeba_sftpbrowser_addcrumb(crumb, relativePath, callback);
});
} else {
$('#ftpBrowserCrumbs').css('display','none');
}
// Display the list of directories
if(!empty(data.list)) {
$('#ftpBrowserFolderList').css('display','block');
$.each(data.list, function(i, item) {
akeeba_sftpbrowser_create_link(akeeba_sftpbrowser_directory+'/'+item, item, $('#ftpBrowserFolderList'), callback );
});
} else {
$('#ftpBrowserFolderList').css('display','none');
}
}
},
function(message) {
$('#ftpBrowserError').html(message);
$('#ftpBrowserErrorContainer').css('display','block');
$('#ftpBrowserFolderList').css('display','none');
$('#ftpBrowserCrumbs').css('display','none');
}
);
};
/**
* Creates a directory link for the SFTP browser UI
*/
function akeeba_sftpbrowser_create_link(path, label, container, callback)
{
var row = $(document.createElement('tr'));
var cell = $(document.createElement('td')).appendTo(row);
var myElement = $(document.createElement('a'))
.text(label)
.click(function(){
akeeba_sftpbrowser_directory = resolvePath(path);
akeeba_sftpbrowser_hook(callback);
})
.appendTo(cell);
row.appendTo($(container));
}
/**
* Adds a breadcrumb to the SFTP browser
*/
function akeeba_sftpbrowser_addcrumb(crumb, relativePath, callback, last)
{
if(empty(last)) last = false;
var li = $(document.createElement('li'));
$(document.createElement('a'))
.html(crumb)
.click(function(e){
akeeba_sftpbrowser_directory = relativePath;
akeeba_sftpbrowser_hook(callback);
e.preventDefault();
})
.appendTo(li);
if(!last) {
$(document.createElement('span'))
.text('/')
.addClass('divider')
.appendTo(li);
}
li.appendTo('#ak_crumbs');
}
function onStartExtraction()
{
$('#page1').hide('fast');
$('#page2').show('fast');
$('#currentFile').text( '' );
akeeba_error_callback = errorHandler;
var data = {
'task' : 'startExtracting',
'json': JSON.stringify({
'kickstart.setup.sourcepath': $('#kickstart\\.setup\\.sourcepath').val(),
'kickstart.setup.sourcefile': $('#kickstart\\.setup\\.sourcefile').val(),
'kickstart.jps.password': $('#kickstart\\.jps\\.password').val(),
'kickstart.tuning.min_exec_time': $('#kickstart\\.tuning\\.min_exec_time').val(),
'kickstart.tuning.max_exec_time': $('#kickstart\\.tuning\\.max_exec_time').val(),
'kickstart.stealth.enable': $('#kickstart\\.stealth\\.enable').is(':checked'),
'kickstart.stealth.url': $('#kickstart\\.stealth\\.url').val(),
'kickstart.tuning.run_time_bias': 75,
'kickstart.setup.restoreperms': 0,
'kickstart.setup.dryrun': 0,
'kickstart.setup.ignoreerrors': $('#kickstart\\.setup\\.ignoreerrors').is(':checked'),
'kickstart.enabled': 1,
'kickstart.security.password': '',
'kickstart.procengine': $('#kickstart\\.procengine').val(),
'kickstart.ftp.host': $('#kickstart\\.ftp\\.host').val(),
'kickstart.ftp.port': $('#kickstart\\.ftp\\.port').val(),
'kickstart.ftp.ssl': $('#kickstart\\.ftp\\.ssl').is(':checked'),
'kickstart.ftp.passive': $('#kickstart\\.ftp\\.passive').is(':checked'),
'kickstart.ftp.user': $('#kickstart\\.ftp\\.user').val(),
'kickstart.ftp.pass': $('#kickstart\\.ftp\\.pass').val(),
'kickstart.ftp.dir': $('#kickstart\\.ftp\\.dir').val(),
'kickstart.ftp.tempdir': $('#kickstart\\.ftp\\.tempdir').val()
})
};
doAjax(data, function(ret){
processRestorationStep(ret);
});
}
function processRestorationStep(data)
{
// Look for errors
if(!data.status)
{
errorHandler(data.message);
return;
}
// Propagate warnings to the GUI
if( !empty(data.Warnings) )
{
$.each(data.Warnings, function(i, item){
$('#warnings').append(
$(document.createElement('div'))
.html(item)
);
$('#warningsBox').show('fast');
});
}
// Parse total size, if exists
if(array_key_exists('totalsize', data))
{
if(is_array(data.filelist))
{
akeeba_restoration_stat_total = 0;
$.each(data.filelist,function(i, item)
{
akeeba_restoration_stat_total += item[1];
});
}
akeeba_restoration_stat_outbytes = 0;
akeeba_restoration_stat_inbytes = 0;
akeeba_restoration_stat_files = 0;
}
// Update GUI
akeeba_restoration_stat_inbytes += data.bytesIn;
akeeba_restoration_stat_outbytes += data.bytesOut;
akeeba_restoration_stat_files += data.files;
var percentage = 0;
if( akeeba_restoration_stat_total > 0 )
{
percentage = 100 * akeeba_restoration_stat_inbytes / akeeba_restoration_stat_total;
if(percentage < 0) {
percentage = 0;
} else if(percentage > 100) {
percentage = 100;
}
}
if(data.done) percentage = 100;
setProgressBar(percentage);
$('#currentFile').text( data.lastfile );
if(!empty(data.factory)) akeeba_factory = data.factory;
post = {
'task' : 'continueExtracting',
'json' : JSON.stringify({factory: akeeba_factory})
};
if(!data.done)
{
doAjax(post, function(ret){
processRestorationStep(ret);
});
}
else
{
$('#page2a').hide('fast');
$('#extractionComplete').show('fast');
$('#runInstaller').css('display','inline-block');
}
}
function onGotoStartClick(event)
{
$('#page2').hide('fast');
$('#error').hide('fast');
$('#page1').show('fast');
}
function onRunInstallerClick(event)
{
var windowReference = window.open('installation/index.php','installer');
if(!windowReference.opener) {
windowReference.opener = this.window;
}
$('#runCleanup').css('display','inline-block');
$('#runInstaller').hide('fast');
}
function onRunCleanupClick(event)
{
post = {
'task' : 'isJoomla',
// Passing the factory preserves the renamed files array
'json' : JSON.stringify({factory: akeeba_factory})
};
doAjax(post, function(ret){
isJoomla = ret;
onRealRunCleanupClick();
});
}
function onRealRunCleanupClick()
{
post = {
'task' : 'cleanUp',
// Passing the factory preserves the renamed files array
'json' : JSON.stringify({factory: akeeba_factory})
};
doAjax(post, function(ret){
$('#runCleanup').hide('fast');
$('#gotoSite').css('display','inline-block');
if (isJoomla)
{
$('#gotoAdministrator').css('display','inline-block');
}
else
{
$('#gotoAdministrator').css('display','none');
}
$('#gotoPostRestorationRroubleshooting').css('display','block');
});
}
function errorHandler(msg)
{
$('#errorMessage').html(msg);
$('#error').show('fast');
}
function onresetFTPTempDir(event)
{
$('#kickstart\\.ftp\\.tempdir').val('/var/www/html/');
}
function onArchiveListReload()
{
post = {
'task' : 'listArchives',
'json' : JSON.stringify({path: $('#kickstart\\.setup\\.sourcepath').val()})
}
doAjax(post, function(ret){
$('#sourcefileContainer').html(ret);
});
}
/**
* Akeeba Kickstart Update Check
*/
var akeeba_update = {version: '0'};
var akeeba_version = '4.1.1';
function version_compare (v1, v2, operator) {
// BEGIN REDUNDANT
this.php_js = this.php_js || {};
this.php_js.ENV = this.php_js.ENV || {};
// END REDUNDANT
// Important: compare must be initialized at 0.
var i = 0,
x = 0,
compare = 0,
// vm maps textual PHP versions to negatives so they're less than 0.
// PHP currently defines these as CASE-SENSITIVE. It is important to
// leave these as negatives so that they can come before numerical versions
// and as if no letters were there to begin with.
// (1alpha is < 1 and < 1.1 but > 1dev1)
// If a non-numerical value can't be mapped to this table, it receives
// -7 as its value.
vm = {
'dev': -6,
'alpha': -5,
'a': -5,
'beta': -4,
'b': -4,
'RC': -3,
'rc': -3,
'#': -2,
'p': -1,
'pl': -1
},
// This function will be called to prepare each version argument.
// It replaces every _, -, and + with a dot.
// It surrounds any nonsequence of numbers/dots with dots.
// It replaces sequences of dots with a single dot.
// version_compare('4..0', '4.0') == 0
// Important: A string of 0 length needs to be converted into a value
// even less than an unexisting value in vm (-7), hence [-8].
// It's also important to not strip spaces because of this.
// version_compare('', ' ') == 1
prepVersion = function (v) {
v = ('' + v).replace(/[_\-+]/g, '.');
v = v.replace(/([^.\d]+)/g, '.$1.').replace(/\.{2,}/g, '.');
return (!v.length ? [-8] : v.split('.'));
},
// This converts a version component to a number.
// Empty component becomes 0.
// Non-numerical component becomes a negative number.
// Numerical component becomes itself as an integer.
numVersion = function (v) {
return !v ? 0 : (isNaN(v) ? vm[v] || -7 : parseInt(v, 10));
};
v1 = prepVersion(v1);
v2 = prepVersion(v2);
x = Math.max(v1.length, v2.length);
for (i = 0; i < x; i++) {
if (v1[i] == v2[i]) {
continue;
}
v1[i] = numVersion(v1[i]);
v2[i] = numVersion(v2[i]);
if (v1[i] < v2[i]) {
compare = -1;
break;
} else if (v1[i] > v2[i]) {
compare = 1;
break;
}
}
if (!operator) {
return compare;
}
// Important: operator is CASE-SENSITIVE.
// "No operator" seems to be treated as less than
// Any other values seem to make the function return null.
switch (operator) {
case '>':
case 'gt':
return (compare > 0);
case '>=':
case 'ge':
return (compare >= 0);
case '<=':
case 'le':
return (compare <= 0);
case '==':
case '=':
case 'eq':
return (compare === 0);
case '<>':
case '!=':
case 'ne':
return (compare !== 0);
case '':
case '<':
case 'lt':
return (compare < 0);
default:
return null;
}
}
function checkUpdates()
{
var structure =
{
type: "GET",
url: 'http://query.yahooapis.com/v1/public/yql',
data: {
q: 'SELECT * FROM xml WHERE url="http://nocdn.akeebabackup.com/updates/kickstartpro.xml"',
format: 'json',
callback: 'updatesCallback'
},
cache: true,
crossDomain: true,
jsonp: 'updatesCallback',
timeout: 15000
};
$.ajax( structure );
}
function updatesCallback(msg)
{
$.each(msg.query.results.updates.update, function(i, el){
var myUpdate = {
'version' : el.version,
'infourl' : el.infourl['content'],
'dlurl' : el.downloads.downloadurl.content
}
if(version_compare(myUpdate.version, akeeba_update.version, 'ge')) {
akeeba_update = myUpdate;
}
});
if(version_compare(akeeba_update.version, akeeba_version, 'gt')) {
notifyAboutUpdates();
}
}
function notifyAboutUpdates()
{
$('#update-version').text(akeeba_update.version);
$('#update-dlnow').attr('href', akeeba_update.dlurl);
$('#update-whatsnew').attr('href', akeeba_update.infourl);
$('#update-notification').show('slow');
}
var akeeba_url_filename = null;
$(document).ready(function(){
$('#ak-url-showgui').click(function(e){
$('#ak-url-gui').show('fast');
$('#ak-url-progress').hide('fast');
$('#ak-url-complete').hide('fast');
$('#ak-url-error').hide('fast');
$('#page1-content').hide('fast');
});
$('#ak-url-hidegui').click(function(e){
$('#ak-url-gui').hide('fast');
$('#ak-url-progress').hide('fast');
$('#ak-url-complete').hide('fast');
$('#ak-url-error').hide('fast');
$('#page1-content').show('fast');
});
$('#ak-url-reload').click(function(e){
window.location.reload();
});
$('#ak-url-gotoStart').click(function(e){
$('#ak-url-gui').show('fast');
$('#ak-url-progress').hide('fast');
$('#ak-url-complete').hide('fast');
$('#ak-url-error').hide('fast');
});
});
function onAKURLImport()
{
akeeba_url_filename = $('#url\\.filename').val();
ak_urlimport_start();
}
function AKURLsetProgressBar(percent)
{
var newValue = 0;
if(percent <= 1) {
newValue = 100 * percent;
} else {
newValue = percent;
}
$('#ak-url-progressbar-inner').css('width',percent+'%');
}
function ak_urlimport_start()
{
akeeba_error_callback = AKURLerrorHandler;
$('#ak-url-gui').hide('fast');
$('#ak-url-progress').show('fast');
$('#ak-url-complete').hide('fast');
$('#ak-url-error').hide('fast');
AKURLsetProgressBar(0);
$('#ak-url-progresstext').html('');
var data = {
'task' : 'urlimport',
'json' : JSON.stringify({
'file' : akeeba_url_filename,
'frag' : "-1",
'totalSize' : "-1"
})
};
doAjax(data, function(ret){
ak_urlimport_step(ret);
});
}
function ak_urlimport_step(data)
{
// Look for errors
if(!data.status)
{
AKURLerrorHandler(data.error);
return;
}
var totalSize = 0;
var doneSize = 0;
var percent = 0;
var frag = -1;
// get running stats
if(array_key_exists('totalSize', data)) {
totalSize = data.totalSize;
}
if(array_key_exists('doneSize', data)) {
doneSize = data.doneSize;
}
if(array_key_exists('percent', data)) {
percent = data.percent;
}
if(array_key_exists('frag', data)) {
frag = data.frag;
}
// Update GUI
AKURLsetProgressBar(percent);
//$('#ak-url-progresstext').text( percent+'% ('+doneSize+' / '+totalSize+' bytes)' );
$('#ak-url-progresstext').text( percent+'% ('+doneSize+' bytes)' );
post = {
'task' : 'urlimport',
'json' : JSON.stringify({
'file' : akeeba_url_filename,
'frag' : frag,
'totalSize' : totalSize,
'doneSize' : doneSize
})
};
if(percent < 100) {
// More work to do
doAjax(post, function(ret){
ak_urlimport_step(ret);
});
} else {
// Done!
$('#ak-url-gui').hide('fast');
$('#ak-url-progress').hide('fast');
$('#ak-url-complete').show('fast');
$('#ak-url-error').hide('fast');
}
}
function onAKURLJoomla()
{
akeeba_error_callback = AKURLerrorHandler;
var data = {
'task' : 'getjurl'
};
doAjax(data, function(ret)
{
ak_urlimport_gotjurl(ret);
});
}
function onAKURLWordpress()
{
$('#url\\.filename').val('http://wordpress.org/latest.zip');
}
function ak_urlimport_gotjurl(data)
{
var url = '';
if(array_key_exists('url', data)) {
url = data.url;
}
$('#url\\.filename').val(url);
}
function AKURLerrorHandler(msg)
{
$('#ak-url-gui').hide('fast');
$('#ak-url-progress').hide('fast');
$('#ak-url-complete').hide('fast');
$('#ak-url-error').show('fast');
$('#ak-url-errorMessage').html(msg);
}
</script>
</head>
<body>
<div id="automode" style="display:none;">
AUTOMODEON
</div>
<div id="fade" class="black_overlay" style="display: block;"></div>
<div id="page-container">
<div id="preextraction" class="white_content" style="display: block;">
<div id="ie7Warning" style="display:none;">
<h2>Deprecated Internet Explorer version</h2>
<p>
This script is not guaranteed to work properly on Internet Explorer 8
or earlier versions, or on Internet Explorer 9 and higher running
in compatibility mode.
</p>
<p>
Please use Internet Explorer 9 or later in native mode (the
"broken page" icon next to the address bar should not be
enabled). Alternatively, you may use the latest versions of Firefox,
Safari, Google Chrome or Opera.
</p>
</div>
<h2>Things you should know about Akeeba Kickstart</h2>
<ol>
<li>Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.</li>
<li>Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.</li>
<li>Kickstart is bound by your server's configuration. As such, it may not work at all.</li>
<li>You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.</li>
<li>Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.</li>
<li>Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.</li>
<li>Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it's just how your server and CMS software work.</li>
<li>You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.</li>
<li>This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.</li>
</ol>
<a href="javascript:void(0)" onclick="closeLightbox();">Click here or press ESC to close this message</a>
</div>
<div id="genericerror" class="white_content">
<pre id="genericerrorInner"></pre>
</div>
<div id="header">
<div class="title">Akeeba Kickstart Core 4.1.1</div>
</div>
<div id="update-notification" style="display: none">
<p class="update-notify">An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!</p>
<p class="update-whyupdate">You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.</p>
<p class="update-links">
<a href="#" id="update-dlnow">Download now</a>
<a href="#" id="update-whatsnew" target="_blank">More information</a>
</p>
</div>
<div id="page1">
<div id="ak-url-gui" style="display: none">
<div class="step1">
<div class="circle">1</div>
<h2>Specify the URL</h2>
<div class="area-container">
<label for="url.filename">URL to import</label>
<span class="field"><input type="text" style="width: 45%" id="url.filename" value=""></span>
<a id="ak-url-joomla" class="button bluebutton loprofile" onclick="onAKURLJoomla()">Latest Joomla! release</a>
<a id="ak-url-wordpress" class="button bluebutton loprofile" onclick="onAKURLWordpress()">Latest WordPress release</a>
<div class="clr"></div>
<a id="ak-url-connect" class="button" onclick="onAKURLImport()">Import from URL</a>
<a id="ak-url-hidegui" class="button bluebutton">Cancel import</a>
</div>
</div>
<div class="clr"></div>
</div>
<div id="ak-url-progress" style="display: none">
<div class="circle">2</div>
<h2>Importing...</h2>
<div class="area-container">
<div id="ak-url-importing">
<div class="warn-not-close">Please do not close this window while your backup archives are being imported</div>
<div id="ak-url-progressbar" class="progressbar">
<div id="ak-url-progressbar-inner" class="progressbar-inner"> </div>
</div>
<div id="ak-url-progresstext"></div>
</div>
</div>
</div>
<div id="ak-url-complete" style="display: none">
<div class="circle">3</div>
<h2>Import is complete</h2>
<div class="area-container">
<div id="ak-url-reload" class="button">Reload Kickstart</div>
</div>
</div>
<div id="ak-url-error" class="error" style="display: none;">
<h3>An error occured</h3>
<p id="ak-url-errorMessage" class="errorMessage"></p>
<div id="ak-url-gotoStart" class="button">Start over</div>
</div>
<div id="page1-content">
<div class="helpme">
<span>Want some help to use this tool? Read this first:</span> <a href="https://www.akeebabackup.com/documentation/quick-start-guide/using-kickstart.html" target="_blank">Quick Start Guide</a>
</div>
<div class="step1">
<div class="circle">1</div>
<h2>Select a backup archive</h2>
<div class="area-container">
<a id="ak-url-showgui" class="button bluebutton loprofile">Import from URL</a>
<div class="clr"></div>
<label for="kickstart.setup.sourcepath">Archive directory:</label>
<span class="field">
<input type="text" id="kickstart.setup.sourcepath" value="/var/www/html/">
<span class="button" id="reloadArchives" style="margin-top:0;margin-bottom:0">Reload</span>
</span>
<br>
<label for="kickstart.setup.sourcefile">Archive file:</label>
<span class="field" id="sourcefileContainer">
<a href="https://www.akeebabackup.com/documentation/troubleshooter/ksnoarchives.html" target="_blank">No archives detected. Click here for troubleshooting instructions.</a>
</span>
<br>
<label for="kickstart.jps.password">Archive Password (for JPS files)</label>
<span class="field"><input type="password" id="kickstart.jps.password" value=""></span>
</div>
</div>
<div class="clr"></div>
<div class="step2">
<div class="circle">2</div>
<h2>Select an extraction method</h2>
<div class="area-container">
<label for="kickstart.procengine">Write to files:</label>
<span class="field">
<select id="kickstart.procengine">
<option value="hybrid">Hybrid (use FTP only if needed)</option>
<option value="direct">Directly</option>
<option value="ftp">Use FTP for all files</option>
<option value="sftp">Use SFTP for all files</option>
</select>
</span><br>
<label for="kickstart.setup.ignoreerrors">Ignore most errors</label>
<span class="field"><input type="checkbox" id="kickstart.setup.ignoreerrors"></span>
<div id="ftp-options" style="">
<label for="kickstart.ftp.host">(S)FTP host name:</label>
<span class="field"><input type="text" id="kickstart.ftp.host" value="localhost"></span><br>
<label for="kickstart.ftp.port">(S)FTP port:</label>
<span class="field"><input type="text" id="kickstart.ftp.port" value="21"></span><br>
<div id="ftp-ssl-passive" style="">
<label for="kickstart.ftp.ssl">Use FTP over SSL (FTPS)</label>
<span class="field"><input type="checkbox" id="kickstart.ftp.ssl"></span><br>
<label for="kickstart.ftp.passive">Use FTP Passive Mode</label>
<span class="field"><input type="checkbox" id="kickstart.ftp.passive" checked="checked"></span><br>
</div>
<label for="kickstart.ftp.user">(S)FTP user name:</label>
<span class="field"><input type="text" id="kickstart.ftp.user" value=""></span><br>
<label for="kickstart.ftp.pass">(S)FTP password:</label>
<span class="field"><input type="password" id="kickstart.ftp.pass" value=""></span><br>
<label for="kickstart.ftp.dir">(S)FTP directory:</label>
<span class="field">
<input type="text" id="kickstart.ftp.dir" value="">
<span class="button" id="browseFTP" style="margin-top:0;margin-bottom:0">Browse</span>
</span><br>
<label for="kickstart.ftp.tempdir">Temporary directory:</label>
<span class="field">
<input type="text" id="kickstart.ftp.tempdir" value="/var/www/html/">
<span class="button" id="checkFTPTempDir">Check</span>
<span class="button" id="resetFTPTempDir">Reset</span>
</span><br>
<label></label>
<span class="button" id="testFTP">Test FTP connection</span>
<a id="notWorking" class="button" href="https://www.akeebabackup.com/documentation/troubleshooter/kscantextract.html" target="_blank">Can't get it to work? Click me!</a>
<br>
</div>
</div>
</div>
<div class="clr"></div>
<div class="step3">
<div class="circle">3</div>
<h2>Fine tune</h2>
<div class="area-container">
<label for="kickstart.tuning.min_exec_time">Minimum execution time:</label>
<span class="field"><input type="text" id="kickstart.tuning.min_exec_time" value="1"></span> <span>seconds per step</span><br>
<label for="kickstart.tuning.max_exec_time">Maximum execution time:</label>
<span class="field"><input type="text" id="kickstart.tuning.max_exec_time" value="5"></span> <span>seconds per step</span><br>
<label for="kickstart.stealth.enable">Stealth mode</label>
<span class="field"><input type="checkbox" id="kickstart.stealth.enable"></span><br>
<label for="kickstart.stealth.url">HTML file to show to web visitors</label>
<span class="field"><input type="text" id="kickstart.stealth.url" value=""></span><br>
</div>
</div>
<div class="clr"></div>
<div class="step4">
<div class="circle">4</div>
<h2>Extract files</h2>
<div class="area-container">
<span></span>
<span id="gobutton" class="button">Start</span>
</div>
</div>
<div class="clr"></div>
</div>
<div id="ftpdialog" style="display:none;">
<p class="instructions alert alert-info">Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.</p>
<div class="error alert alert-error" id="ftpBrowserErrorContainer">
<h3>An error occurred</h3>
<p id="ftpBrowserError"></p>
</div>
<ul id="ak_crumbs" class="breadcrumb"></ul>
<div class="row-fluid">
<div class="span12">
<table id="ftpBrowserFolderList" class="table table-striped">
</table>
</div>
</div>
</div>
</div>
<div id="page2" style="display: none;">
<div id="page2a">
<div class="circle">5</div>
<h2>Extracting</h2>
<div class="area-container">
<div id="warn-not-close">Do not close this window while the extraction is in progress</div>
<div id="progressbar">
<div id="progressbar-inner" style="width: 0%;"> </div>
</div>
<div id="currentFile"></div>
</div>
</div>
<div id="extractionComplete" style="display: none">
<div class="circle">6</div>
<h2>Restoration and Clean Up</h2>
<div id="runInstaller" class="button">Run the Installer</div>
<div id="runCleanup" class="button" style="display:none">Clean Up</div>
<div id="gotoSite" class="button" style="display:none">Visit your site's front-end</div>
<div id="gotoAdministrator" class="button" style="display:none">Visit your site's back-end</div>
<div id="gotoPostRestorationRroubleshooting" style="display:none">
<a href="https://www.akeebabackup.com/documentation/troubleshooter/post-restoration.html" target="_blank">Something not working after the restoration? Click here for troubleshooting instructions.</a>
</div>
</div>
<div id="warningsBox" style="display: none;">
<div id="warningsHeader">
<h2>Extraction Warnings</h2>
</div>
<div id="warningsContainer">
<div id="warnings"></div>
</div>
</div>
<div id="error" style="display: none;">
<h3>An error occured</h3>
<p id="errorMessage"></p>
<div id="gotoStart" class="button">Start over</div>
<div>
<a href="https://www.akeebabackup.com/documentation/troubleshooter/kscantextract.html" target="_blank">Can't get it to work? Click me!</a>
</div>
</div>
</div>
<div id="footer">
<div class="copyright">Copyright © 2008–2013 <a href="http://www.akeebabackup.com">Nicholas K.
Dionysopoulos / Akeeba Backup</a>. All legal rights reserved.<br>
This program is free software: you can redistribute it and/or modify it under the terms of
the <a href="http://www.gnu.org/gpl-3.htmlhttp://www.gnu.org/copyleft/gpl.html">GNU General
Public License</a> as published by the Free Software Foundation, either version 3 of the License,
or (at your option) any later version.<br>
Design credits: <a href="http://internet-inspired.com/">Internet Inspired</a>, slightly modified by AkeebaBackup.com
</div>
</div>
</div>
</body></html>
<?php
/**
* Akeeba Kickstart
* A JSON-powered archive extraction tool
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / AkeebaBackup.com
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/*
Akeeba Kickstart - The server-side archive extraction wizard
Copyright (C) 2008-2013 Nicholas K. Dionysopoulos / AkeebaBackup.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
define('KICKSTART',1);
define('VERSION', '4.1.1');
define('KICKSTARTPRO', '0');
// Uncomment the following line to enable Kickstart's debug mode
//define('KSDEBUG', 1);
// Used during development
if (!defined('KSDEBUG') && isset($_SERVER) && isset($_SERVER['HTTP_HOST']) && (strpos($_SERVER['HTTP_HOST'], 'local.web') !== false))
{
define('KSDEBUG', 1);
}
define('KSWINDOWS', substr(PHP_OS, 0, 3) == 'WIN');
if(!defined('KSROOTDIR'))
{
define('KSROOTDIR', dirname(__FILE__));
}
if(defined('KSDEBUG')) {
ini_set('error_log', KSROOTDIR.'/kickstart_error_log' );
if(file_exists(KSROOTDIR.'/kickstart_error_log')) {
@unlink(KSROOTDIR.'/kickstart_error_log');
}
error_reporting(E_ALL | E_STRICT);
} else {
@error_reporting(E_NONE);
}
// ==========================================================================================
// IIS missing REQUEST_URI workaround
// ==========================================================================================
/*
* Based REQUEST_URI for IIS Servers 1.0 by NeoSmart Technologies
* The proper method to solve IIS problems is to take a look at this:
* http://neosmart.net/dl.php?id=7
*/
//This file should be located in the same directory as php.exe or php5isapi.dll
if (!isset($_SERVER['REQUEST_URI']))
{
if (isset($_SERVER['HTTP_REQUEST_URI']))
{
$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_REQUEST_URI'];
//Good to go!
}
else
{
//Someone didn't follow the instructions!
if(isset($_SERVER['SCRIPT_NAME']))
$_SERVER['HTTP_REQUEST_URI'] = $_SERVER['SCRIPT_NAME'];
else
$_SERVER['HTTP_REQUEST_URI'] = $_SERVER['PHP_SELF'];
if($_SERVER['QUERY_STRING']){
$_SERVER['HTTP_REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
}
//WARNING: This is a workaround!
//For guaranteed compatibility, HTTP_REQUEST_URI *MUST* be defined!
//See product documentation for instructions!
$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_REQUEST_URI'];
}
}
// Define the cacert.pem location, if it exists
$cacertpem = KSROOTDIR . '/cacert.pem';
if(is_file($cacertpem)) {
if(is_readable($cacertpem)) {
define('AKEEBA_CACERT_PEM', $cacertpem);
}
}
unset($cacertpem);
// Loads other PHP files containing extra Kickstart features
$dh = @opendir(KSROOTDIR);
if($dh === false) return;
while($filename = readdir($dh)) {
if(!is_file($filename)) continue;
if(substr($filename, 0, 10) != 'kickstart.') continue;
if(substr($filename, -4) != '.php') continue;
if($filename == 'kickstart.php') continue;
include_once $filename;
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
define('_AKEEBA_RESTORATION', 1);
defined('DS') or define('DS', DIRECTORY_SEPARATOR);
// Unarchiver run states
define('AK_STATE_NOFILE', 0); // File header not read yet
define('AK_STATE_HEADER', 1); // File header read; ready to process data
define('AK_STATE_DATA', 2); // Processing file data
define('AK_STATE_DATAREAD', 3); // Finished processing file data; ready to post-process
define('AK_STATE_POSTPROC', 4); // Post-processing
define('AK_STATE_DONE', 5); // Done with post-processing
/* Windows system detection */
if (!defined('_AKEEBA_IS_WINDOWS'))
{
if (function_exists('php_uname'))
{
define('_AKEEBA_IS_WINDOWS', stristr(php_uname(), 'windows'));
}
else
{
define('_AKEEBA_IS_WINDOWS', DIRECTORY_SEPARATOR == '\\');
}
}
// Get the file's root
if (!defined('KSROOTDIR'))
{
define('KSROOTDIR', dirname(__FILE__));
}
if (!defined('KSLANGDIR'))
{
define('KSLANGDIR', KSROOTDIR);
}
// Make sure the locale is correct for basename() to work
if (function_exists('setlocale'))
{
@setlocale(LC_ALL, 'en_US.UTF8');
}
// fnmatch not available on non-POSIX systems
// Thanks to soywiz@php.net for this usefull alternative function [http://gr2.php.net/fnmatch]
if (!function_exists('fnmatch'))
{
function fnmatch($pattern, $string)
{
return @preg_match(
'/^' . strtr(addcslashes($pattern, '/\\.+^$(){}=!<>|'),
array('*' => '.*', '?' => '.?')) . '$/i', $string
);
}
}
// Unicode-safe binary data length function
if (!function_exists('akstringlen'))
{
if (function_exists('mb_strlen'))
{
function akstringlen($string)
{
return mb_strlen($string, '8bit');
}
}
else
{
function akstringlen($string)
{
return strlen($string);
}
}
}
/**
* Gets a query parameter from GET or POST data
*
* @param $key
* @param $default
*/
function getQueryParam($key, $default = null)
{
$value = $default;
if (array_key_exists($key, $_REQUEST))
{
$value = $_REQUEST[$key];
}
if (get_magic_quotes_gpc() && !is_null($value))
{
$value = stripslashes($value);
}
return $value;
}
// Debugging function
function debugMsg($msg)
{
if (!defined('KSDEBUG'))
{
return;
}
$fp = fopen('debug.txt', 'at');
fwrite($fp, $msg . "\n");
fclose($fp);
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* Akeeba Backup's JSON compatibility layer
*
* On systems where json_encode and json_decode are not available, Akeeba
* Backup will attempt to use PEAR's Services_JSON library to emulate them.
* A copy of this library is included in this file and will be used if and
* only if it isn't already loaded, e.g. due to PEAR's auto-loading, or a
* 3PD extension loading it for its own purposes.
*/
/**
* Converts to and from JSON format.
*
* JSON (JavaScript Object Notation) is a lightweight data-interchange
* format. It is easy for humans to read and write. It is easy for machines
* to parse and generate. It is based on a subset of the JavaScript
* Programming Language, Standard ECMA-262 3rd Edition - December 1999.
* This feature can also be found in Python. JSON is a text format that is
* completely language independent but uses conventions that are familiar
* to programmers of the C-family of languages, including C, C++, C#, Java,
* JavaScript, Perl, TCL, and many others. These properties make JSON an
* ideal data-interchange language.
*
* This package provides a simple encoder and decoder for JSON notation. It
* is intended for use with client-side Javascript applications that make
* use of HTTPRequest to perform server communication functions - data can
* be encoded into JSON notation for use in a client-side javascript, or
* decoded from incoming Javascript requests. JSON format is native to
* Javascript, and can be directly eval()'ed with no further parsing
* overhead
*
* All strings should be in ASCII or UTF-8 format!
*
* LICENSE: Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met: Redistributions of source code must retain the
* above copyright notice, this list of conditions and the following
* disclaimer. Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* @category
* @package Services_JSON
* @author Michal Migurski <mike-json@teczno.com>
* @author Matt Knapp <mdknapp[at]gmail[dot]com>
* @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
* @copyright 2005 Michal Migurski
* @version CVS: $Id: restore.php 612 2011-05-19 08:26:26Z nikosdion $
* @license http://www.opensource.org/licenses/bsd-license.php
* @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
*/
if(!defined('JSON_FORCE_OBJECT'))
{
define('JSON_FORCE_OBJECT', 1);
}
if(!defined('SERVICES_JSON_SLICE'))
{
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_SLICE', 1);
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_STR', 2);
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_ARR', 3);
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_OBJ', 4);
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_CMT', 5);
/**
* Behavior switch for Services_JSON::decode()
*/
define('SERVICES_JSON_LOOSE_TYPE', 16);
/**
* Behavior switch for Services_JSON::decode()
*/
define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
}
/**
* Converts to and from JSON format.
*
* Brief example of use:
*
* <code>
* // create a new instance of Services_JSON
* $json = new Services_JSON();
*
* // convert a complexe value to JSON notation, and send it to the browser
* $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
* $output = $json->encode($value);
*
* print($output);
* // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
*
* // accept incoming POST data, assumed to be in JSON notation
* $input = file_get_contents('php://input', 1000000);
* $value = $json->decode($input);
* </code>
*/
if(!class_exists('Akeeba_Services_JSON'))
{
class Akeeba_Services_JSON
{
/**
* constructs a new JSON instance
*
* @param int $use object behavior flags; combine with boolean-OR
*
* possible values:
* - SERVICES_JSON_LOOSE_TYPE: loose typing.
* "{...}" syntax creates associative arrays
* instead of objects in decode().
* - SERVICES_JSON_SUPPRESS_ERRORS: error suppression.
* Values which can't be encoded (e.g. resources)
* appear as NULL instead of throwing errors.
* By default, a deeply-nested resource will
* bubble up with an error, so all return values
* from encode() should be checked with isError()
*/
function __construct($use = 0)
{
$this->use = $use;
}
/**
* convert a string from one UTF-16 char to one UTF-8 char
*
* Normally should be handled by mb_convert_encoding, but
* provides a slower PHP-only method for installations
* that lack the multibye string extension.
*
* @param string $utf16 UTF-16 character
* @return string UTF-8 character
* @access private
*/
function utf162utf8($utf16)
{
// oh please oh please oh please oh please oh please
if(function_exists('mb_convert_encoding')) {
return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
}
$bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
switch(true) {
case ((0x7F & $bytes) == $bytes):
// this case should never be reached, because we are in ASCII range
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0x7F & $bytes);
case (0x07FF & $bytes) == $bytes:
// return a 2-byte UTF-8 character
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0xC0 | (($bytes >> 6) & 0x1F))
. chr(0x80 | ($bytes & 0x3F));
case (0xFFFF & $bytes) == $bytes:
// return a 3-byte UTF-8 character
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0xE0 | (($bytes >> 12) & 0x0F))
. chr(0x80 | (($bytes >> 6) & 0x3F))
. chr(0x80 | ($bytes & 0x3F));
}
// ignoring UTF-32 for now, sorry
return '';
}
/**
* convert a string from one UTF-8 char to one UTF-16 char
*
* Normally should be handled by mb_convert_encoding, but
* provides a slower PHP-only method for installations
* that lack the multibye string extension.
*
* @param string $utf8 UTF-8 character
* @return string UTF-16 character
* @access private
*/
function utf82utf16($utf8)
{
// oh please oh please oh please oh please oh please
if(function_exists('mb_convert_encoding')) {
return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
}
switch(strlen($utf8)) {
case 1:
// this case should never be reached, because we are in ASCII range
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return $utf8;
case 2:
// return a UTF-16 character from a 2-byte UTF-8 char
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0x07 & (ord($utf8{0}) >> 2))
. chr((0xC0 & (ord($utf8{0}) << 6))
| (0x3F & ord($utf8{1})));
case 3:
// return a UTF-16 character from a 3-byte UTF-8 char
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr((0xF0 & (ord($utf8{0}) << 4))
| (0x0F & (ord($utf8{1}) >> 2)))
. chr((0xC0 & (ord($utf8{1}) << 6))
| (0x7F & ord($utf8{2})));
}
// ignoring UTF-32 for now, sorry
return '';
}
/**
* encodes an arbitrary variable into JSON format
*
* @param mixed $var any number, boolean, string, array, or object to be encoded.
* see argument 1 to Services_JSON() above for array-parsing behavior.
* if var is a strng, note that encode() always expects it
* to be in ASCII or UTF-8 format!
*
* @return mixed JSON string representation of input var or an error if a problem occurs
* @access public
*/
function encode($var)
{
switch (gettype($var)) {
case 'boolean':
return $var ? 'true' : 'false';
case 'NULL':
return 'null';
case 'integer':
return (int) $var;
case 'double':
case 'float':
return (float) $var;
case 'string':
// STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
$ascii = '';
$strlen_var = strlen($var);
/*
* Iterate over every character in the string,
* escaping with a slash or encoding to UTF-8 where necessary
*/
for ($c = 0; $c < $strlen_var; ++$c) {
$ord_var_c = ord($var{$c});
switch (true) {
case $ord_var_c == 0x08:
$ascii .= '\b';
break;
case $ord_var_c == 0x09:
$ascii .= '\t';
break;
case $ord_var_c == 0x0A:
$ascii .= '\n';
break;
case $ord_var_c == 0x0C:
$ascii .= '\f';
break;
case $ord_var_c == 0x0D:
$ascii .= '\r';
break;
case $ord_var_c == 0x22:
case $ord_var_c == 0x2F:
case $ord_var_c == 0x5C:
// double quote, slash, slosh
$ascii .= '\\'.$var{$c};
break;
case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
// characters U-00000000 - U-0000007F (same as ASCII)
$ascii .= $var{$c};
break;
case (($ord_var_c & 0xE0) == 0xC0):
// characters U-00000080 - U-000007FF, mask 110XXXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c, ord($var{$c + 1}));
$c += 1;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
case (($ord_var_c & 0xF0) == 0xE0):
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}));
$c += 2;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
case (($ord_var_c & 0xF8) == 0xF0):
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}),
ord($var{$c + 3}));
$c += 3;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
case (($ord_var_c & 0xFC) == 0xF8):
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}),
ord($var{$c + 3}),
ord($var{$c + 4}));
$c += 4;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
case (($ord_var_c & 0xFE) == 0xFC):
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}),
ord($var{$c + 3}),
ord($var{$c + 4}),
ord($var{$c + 5}));
$c += 5;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
}
}
return '"'.$ascii.'"';
case 'array':
/*
* As per JSON spec if any array key is not an integer
* we must treat the the whole array as an object. We
* also try to catch a sparsely populated associative
* array with numeric keys here because some JS engines
* will create an array with empty indexes up to
* max_index which can cause memory issues and because
* the keys, which may be relevant, will be remapped
* otherwise.
*
* As per the ECMA and JSON specification an object may
* have any string as a property. Unfortunately due to
* a hole in the ECMA specification if the key is a
* ECMA reserved word or starts with a digit the
* parameter is only accessible using ECMAScript's
* bracket notation.
*/
// treat as a JSON object
if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
$properties = array_map(array($this, 'name_value'),
array_keys($var),
array_values($var));
foreach($properties as $property) {
if(Akeeba_Services_JSON::isError($property)) {
return $property;
}
}
return '{' . join(',', $properties) . '}';
}
// treat it like a regular array
$elements = array_map(array($this, 'encode'), $var);
foreach($elements as $element) {
if(Akeeba_Services_JSON::isError($element)) {
return $element;
}
}
return '[' . join(',', $elements) . ']';
case 'object':
$vars = get_object_vars($var);
$properties = array_map(array($this, 'name_value'),
array_keys($vars),
array_values($vars));
foreach($properties as $property) {
if(Akeeba_Services_JSON::isError($property)) {
return $property;
}
}
return '{' . join(',', $properties) . '}';
default:
return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS)
? 'null'
: new Akeeba_Services_JSON_Error(gettype($var)." can not be encoded as JSON string");
}
}
/**
* array-walking function for use in generating JSON-formatted name-value pairs
*
* @param string $name name of key to use
* @param mixed $value reference to an array element to be encoded
*
* @return string JSON-formatted name-value pair, like '"name":value'
* @access private
*/
function name_value($name, $value)
{
$encoded_value = $this->encode($value);
if(Akeeba_Services_JSON::isError($encoded_value)) {
return $encoded_value;
}
return $this->encode(strval($name)) . ':' . $encoded_value;
}
/**
* reduce a string by removing leading and trailing comments and whitespace
*
* @param $str string string value to strip of comments and whitespace
*
* @return string string value stripped of comments and whitespace
* @access private
*/
function reduce_string($str)
{
$str = preg_replace(array(
// eliminate single line comments in '// ...' form
'#^\s*//(.+)$#m',
// eliminate multi-line comments in '/* ... */' form, at start of string
'#^\s*/\*(.+)\*/#Us',
// eliminate multi-line comments in '/* ... */' form, at end of string
'#/\*(.+)\*/\s*$#Us'
), '', $str);
// eliminate extraneous space
return trim($str);
}
/**
* decodes a JSON string into appropriate variable
*
* @param string $str JSON-formatted string
*
* @return mixed number, boolean, string, array, or object
* corresponding to given JSON input string.
* See argument 1 to Akeeba_Services_JSON() above for object-output behavior.
* Note that decode() always returns strings
* in ASCII or UTF-8 format!
* @access public
*/
function decode($str)
{
$str = $this->reduce_string($str);
switch (strtolower($str)) {
case 'true':
return true;
case 'false':
return false;
case 'null':
return null;
default:
$m = array();
if (is_numeric($str)) {
// Lookie-loo, it's a number
// This would work on its own, but I'm trying to be
// good about returning integers where appropriate:
// return (float)$str;
// Return float or int, as appropriate
return ((float)$str == (integer)$str)
? (integer)$str
: (float)$str;
} elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) {
// STRINGS RETURNED IN UTF-8 FORMAT
$delim = substr($str, 0, 1);
$chrs = substr($str, 1, -1);
$utf8 = '';
$strlen_chrs = strlen($chrs);
for ($c = 0; $c < $strlen_chrs; ++$c) {
$substr_chrs_c_2 = substr($chrs, $c, 2);
$ord_chrs_c = ord($chrs{$c});
switch (true) {
case $substr_chrs_c_2 == '\b':
$utf8 .= chr(0x08);
++$c;
break;
case $substr_chrs_c_2 == '\t':
$utf8 .= chr(0x09);
++$c;
break;
case $substr_chrs_c_2 == '\n':
$utf8 .= chr(0x0A);
++$c;
break;
case $substr_chrs_c_2 == '\f':
$utf8 .= chr(0x0C);
++$c;
break;
case $substr_chrs_c_2 == '\r':
$utf8 .= chr(0x0D);
++$c;
break;
case $substr_chrs_c_2 == '\\"':
case $substr_chrs_c_2 == '\\\'':
case $substr_chrs_c_2 == '\\\\':
case $substr_chrs_c_2 == '\\/':
if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
($delim == "'" && $substr_chrs_c_2 != '\\"')) {
$utf8 .= $chrs{++$c};
}
break;
case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
// single, escaped unicode character
$utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
. chr(hexdec(substr($chrs, ($c + 4), 2)));
$utf8 .= $this->utf162utf8($utf16);
$c += 5;
break;
case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
$utf8 .= $chrs{$c};
break;
case ($ord_chrs_c & 0xE0) == 0xC0:
// characters U-00000080 - U-000007FF, mask 110XXXXX
//see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 2);
++$c;
break;
case ($ord_chrs_c & 0xF0) == 0xE0:
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 3);
$c += 2;
break;
case ($ord_chrs_c & 0xF8) == 0xF0:
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 4);
$c += 3;
break;
case ($ord_chrs_c & 0xFC) == 0xF8:
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 5);
$c += 4;
break;
case ($ord_chrs_c & 0xFE) == 0xFC:
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 6);
$c += 5;
break;
}
}
return $utf8;
} elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
// array, or object notation
if ($str{0} == '[') {
$stk = array(SERVICES_JSON_IN_ARR);
$arr = array();
} else {
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
$stk = array(SERVICES_JSON_IN_OBJ);
$obj = array();
} else {
$stk = array(SERVICES_JSON_IN_OBJ);
$obj = new stdClass();
}
}
array_push($stk, array('what' => SERVICES_JSON_SLICE,
'where' => 0,
'delim' => false));
$chrs = substr($str, 1, -1);
$chrs = $this->reduce_string($chrs);
if ($chrs == '') {
if (reset($stk) == SERVICES_JSON_IN_ARR) {
return $arr;
} else {
return $obj;
}
}
//print("\nparsing {$chrs}\n");
$strlen_chrs = strlen($chrs);
for ($c = 0; $c <= $strlen_chrs; ++$c) {
$top = end($stk);
$substr_chrs_c_2 = substr($chrs, $c, 2);
if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
// found a comma that is not inside a string, array, etc.,
// OR we've reached the end of the character list
$slice = substr($chrs, $top['where'], ($c - $top['where']));
array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
//print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
if (reset($stk) == SERVICES_JSON_IN_ARR) {
// we are in an array, so just push an element onto the stack
array_push($arr, $this->decode($slice));
} elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
// we are in an object, so figure
// out the property name and set an
// element in an associative array,
// for now
$parts = array();
if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
// "name":value pair
$key = $this->decode($parts[1]);
$val = $this->decode($parts[2]);
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
$obj[$key] = $val;
} else {
$obj->$key = $val;
}
} elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
// name:value pair, where name is unquoted
$key = $parts[1];
$val = $this->decode($parts[2]);
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
$obj[$key] = $val;
} else {
$obj->$key = $val;
}
}
}
} elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
// found a quote, and we are not inside a string
array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
//print("Found start of string at {$c}\n");
} elseif (($chrs{$c} == $top['delim']) &&
($top['what'] == SERVICES_JSON_IN_STR) &&
((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) {
// found a quote, we're in a string, and it's not escaped
// we know that it's not escaped becase there is _not_ an
// odd number of backslashes at the end of the string so far
array_pop($stk);
//print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
} elseif (($chrs{$c} == '[') &&
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
// found a left-bracket, and we are in an array, object, or slice
array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false));
//print("Found start of array at {$c}\n");
} elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
// found a right-bracket, and we're in an array
array_pop($stk);
//print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
} elseif (($chrs{$c} == '{') &&
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
// found a left-brace, and we are in an array, object, or slice
array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
//print("Found start of object at {$c}\n");
} elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
// found a right-brace, and we're in an object
array_pop($stk);
//print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
} elseif (($substr_chrs_c_2 == '/*') &&
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
// found a comment start, and we are in an array, object, or slice
array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false));
$c++;
//print("Found start of comment at {$c}\n");
} elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) {
// found a comment end, and we're in one now
array_pop($stk);
$c++;
for ($i = $top['where']; $i <= $c; ++$i)
$chrs = substr_replace($chrs, ' ', $i, 1);
//print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
}
}
if (reset($stk) == SERVICES_JSON_IN_ARR) {
return $arr;
} elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
return $obj;
}
}
}
}
function isError($data, $code = null)
{
if (class_exists('pear')) {
return PEAR::isError($data, $code);
} elseif (is_object($data) && (get_class($data) == 'services_json_error' ||
is_subclass_of($data, 'services_json_error'))) {
return true;
}
return false;
}
}
class Akeeba_Services_JSON_Error
{
function __construct($message = 'unknown error', $code = null,
$mode = null, $options = null, $userinfo = null)
{
}
}
}
if(!function_exists('json_encode'))
{
function json_encode($value, $options = 0) {
$flags = SERVICES_JSON_LOOSE_TYPE;
if( $options & JSON_FORCE_OBJECT ) $flags = 0;
$encoder = new Akeeba_Services_JSON($flags);
return $encoder->encode($value);
}
}
if(!function_exists('json_decode'))
{
function json_decode($value, $assoc = false)
{
$flags = 0;
if($assoc) $flags = SERVICES_JSON_LOOSE_TYPE;
$decoder = new Akeeba_Services_JSON($flags);
return $decoder->decode($value);
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* The base class of Akeeba Engine objects. Allows for error and warnings logging
* and propagation. Largely based on the Joomla! 1.5 JObject class.
*/
abstract class AKAbstractObject
{
/** @var array An array of errors */
private $_errors = array();
/** @var array The queue size of the $_errors array. Set to 0 for infinite size. */
protected $_errors_queue_size = 0;
/** @var array An array of warnings */
private $_warnings = array();
/** @var array The queue size of the $_warnings array. Set to 0 for infinite size. */
protected $_warnings_queue_size = 0;
/**
* Public constructor, makes sure we are instanciated only by the factory class
*/
public function __construct()
{
/*
// Assisted Singleton pattern
if(function_exists('debug_backtrace'))
{
$caller=debug_backtrace();
if(
($caller[1]['class'] != 'AKFactory') &&
($caller[2]['class'] != 'AKFactory') &&
($caller[3]['class'] != 'AKFactory') &&
($caller[4]['class'] != 'AKFactory')
) {
var_dump(debug_backtrace());
trigger_error("You can't create direct descendants of ".__CLASS__, E_USER_ERROR);
}
}
*/
}
/**
* Get the most recent error message
* @param integer $i Optional error index
* @return string Error message
*/
public function getError($i = null)
{
return $this->getItemFromArray($this->_errors, $i);
}
/**
* Return all errors, if any
* @return array Array of error messages
*/
public function getErrors()
{
return $this->_errors;
}
/**
* Add an error message
* @param string $error Error message
*/
public function setError($error)
{
if($this->_errors_queue_size > 0)
{
if(count($this->_errors) >= $this->_errors_queue_size)
{
array_shift($this->_errors);
}
}
array_push($this->_errors, $error);
}
/**
* Resets all error messages
*/
public function resetErrors()
{
$this->_errors = array();
}
/**
* Get the most recent warning message
* @param integer $i Optional warning index
* @return string Error message
*/
public function getWarning($i = null)
{
return $this->getItemFromArray($this->_warnings, $i);
}
/**
* Return all warnings, if any
* @return array Array of error messages
*/
public function getWarnings()
{
return $this->_warnings;
}
/**
* Add an error message
* @param string $error Error message
*/
public function setWarning($warning)
{
if($this->_warnings_queue_size > 0)
{
if(count($this->_warnings) >= $this->_warnings_queue_size)
{
array_shift($this->_warnings);
}
}
array_push($this->_warnings, $warning);
}
/**
* Resets all warning messages
*/
public function resetWarnings()
{
$this->_warnings = array();
}
/**
* Propagates errors and warnings to a foreign object. The foreign object SHOULD
* implement the setError() and/or setWarning() methods but DOESN'T HAVE TO be of
* AKAbstractObject type. For example, this can even be used to propagate to a
* JObject instance in Joomla!. Propagated items will be removed from ourself.
* @param object $object The object to propagate errors and warnings to.
*/
public function propagateToObject(&$object)
{
// Skip non-objects
if(!is_object($object)) return;
if( method_exists($object,'setError') )
{
if(!empty($this->_errors))
{
foreach($this->_errors as $error)
{
$object->setError($error);
}
$this->_errors = array();
}
}
if( method_exists($object,'setWarning') )
{
if(!empty($this->_warnings))
{
foreach($this->_warnings as $warning)
{
$object->setWarning($warning);
}
$this->_warnings = array();
}
}
}
/**
* Propagates errors and warnings from a foreign object. Each propagated list is
* then cleared on the foreign object, as long as it implements resetErrors() and/or
* resetWarnings() methods.
* @param object $object The object to propagate errors and warnings from
*/
public function propagateFromObject(&$object)
{
if( method_exists($object,'getErrors') )
{
$errors = $object->getErrors();
if(!empty($errors))
{
foreach($errors as $error)
{
$this->setError($error);
}
}
if(method_exists($object,'resetErrors'))
{
$object->resetErrors();
}
}
if( method_exists($object,'getWarnings') )
{
$warnings = $object->getWarnings();
if(!empty($warnings))
{
foreach($warnings as $warning)
{
$this->setWarning($warning);
}
}
if(method_exists($object,'resetWarnings'))
{
$object->resetWarnings();
}
}
}
/**
* Sets the size of the error queue (acts like a LIFO buffer)
* @param int $newSize The new queue size. Set to 0 for infinite length.
*/
protected function setErrorsQueueSize($newSize = 0)
{
$this->_errors_queue_size = (int)$newSize;
}
/**
* Sets the size of the warnings queue (acts like a LIFO buffer)
* @param int $newSize The new queue size. Set to 0 for infinite length.
*/
protected function setWarningsQueueSize($newSize = 0)
{
$this->_warnings_queue_size = (int)$newSize;
}
/**
* Returns the last item of a LIFO string message queue, or a specific item
* if so specified.
* @param array $array An array of strings, holding messages
* @param int $i Optional message index
* @return mixed The message string, or false if the key doesn't exist
*/
private function getItemFromArray($array, $i = null)
{
// Find the item
if ( $i === null) {
// Default, return the last item
$item = end($array);
}
else
if ( ! array_key_exists($i, $array) ) {
// If $i has been specified but does not exist, return false
return false;
}
else
{
$item = $array[$i];
}
return $item;
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* The superclass of all Akeeba Kickstart parts. The "parts" are intelligent stateful
* classes which perform a single procedure and have preparation, running and
* finalization phases. The transition between phases is handled automatically by
* this superclass' tick() final public method, which should be the ONLY public API
* exposed to the rest of the Akeeba Engine.
*/
abstract class AKAbstractPart extends AKAbstractObject
{
/**
* Indicates whether this part has finished its initialisation cycle
* @var boolean
*/
protected $isPrepared = false;
/**
* Indicates whether this part has more work to do (it's in running state)
* @var boolean
*/
protected $isRunning = false;
/**
* Indicates whether this part has finished its finalization cycle
* @var boolean
*/
protected $isFinished = false;
/**
* Indicates whether this part has finished its run cycle
* @var boolean
*/
protected $hasRan = false;
/**
* The name of the engine part (a.k.a. Domain), used in return table
* generation.
* @var string
*/
protected $active_domain = "";
/**
* The step this engine part is in. Used verbatim in return table and
* should be set by the code in the _run() method.
* @var string
*/
protected $active_step = "";
/**
* A more detailed description of the step this engine part is in. Used
* verbatim in return table and should be set by the code in the _run()
* method.
* @var string
*/
protected $active_substep = "";
/**
* Any configuration variables, in the form of an array.
* @var array
*/
protected $_parametersArray = array();
/** @var string The database root key */
protected $databaseRoot = array();
/** @var int Last reported warnings's position in array */
private $warnings_pointer = -1;
/** @var array An array of observers */
protected $observers = array();
/**
* Runs the preparation for this part. Should set _isPrepared
* to true
*/
abstract protected function _prepare();
/**
* Runs the finalisation process for this part. Should set
* _isFinished to true.
*/
abstract protected function _finalize();
/**
* Runs the main functionality loop for this part. Upon calling,
* should set the _isRunning to true. When it finished, should set
* the _hasRan to true. If an error is encountered, setError should
* be used.
*/
abstract protected function _run();
/**
* Sets the BREAKFLAG, which instructs this engine part that the current step must break immediately,
* in fear of timing out.
*/
protected function setBreakFlag()
{
AKFactory::set('volatile.breakflag', true);
}
/**
* Sets the engine part's internal state, in an easy to use manner
*
* @param string $state One of init, prepared, running, postrun, finished, error
* @param string $errorMessage The reported error message, should the state be set to error
*/
protected function setState($state = 'init', $errorMessage='Invalid setState argument')
{
switch($state)
{
case 'init':
$this->isPrepared = false;
$this->isRunning = false;
$this->isFinished = false;
$this->hasRun = false;
break;
case 'prepared':
$this->isPrepared = true;
$this->isRunning = false;
$this->isFinished = false;
$this->hasRun = false;
break;
case 'running':
$this->isPrepared = true;
$this->isRunning = true;
$this->isFinished = false;
$this->hasRun = false;
break;
case 'postrun':
$this->isPrepared = true;
$this->isRunning = false;
$this->isFinished = false;
$this->hasRun = true;
break;
case 'finished':
$this->isPrepared = true;
$this->isRunning = false;
$this->isFinished = true;
$this->hasRun = false;
break;
case 'error':
default:
$this->setError($errorMessage);
break;
}
}
/**
* The public interface to an engine part. This method takes care for
* calling the correct method in order to perform the initialisation -
* run - finalisation cycle of operation and return a proper reponse array.
* @return array A Reponse Array
*/
final public function tick()
{
// Call the right action method, depending on engine part state
switch( $this->getState() )
{
case "init":
$this->_prepare();
break;
case "prepared":
$this->_run();
break;
case "running":
$this->_run();
break;
case "postrun":
$this->_finalize();
break;
}
// Send a Return Table back to the caller
$out = $this->_makeReturnTable();
return $out;
}
/**
* Returns a copy of the class's status array
* @return array
*/
public function getStatusArray()
{
return $this->_makeReturnTable();
}
/**
* Sends any kind of setup information to the engine part. Using this,
* we avoid passing parameters to the constructor of the class. These
* parameters should be passed as an indexed array and should be taken
* into account during the preparation process only. This function will
* set the error flag if it's called after the engine part is prepared.
*
* @param array $parametersArray The parameters to be passed to the
* engine part.
*/
final public function setup( $parametersArray )
{
if( $this->isPrepared )
{
$this->setState('error', "Can't modify configuration after the preparation of " . $this->active_domain);
}
else
{
$this->_parametersArray = $parametersArray;
if(array_key_exists('root', $parametersArray))
{
$this->databaseRoot = $parametersArray['root'];
}
}
}
/**
* Returns the state of this engine part.
*
* @return string The state of this engine part. It can be one of
* error, init, prepared, running, postrun, finished.
*/
final public function getState()
{
if( $this->getError() )
{
return "error";
}
if( !($this->isPrepared) )
{
return "init";
}
if( !($this->isFinished) && !($this->isRunning) && !( $this->hasRun ) && ($this->isPrepared) )
{
return "prepared";
}
if ( !($this->isFinished) && $this->isRunning && !( $this->hasRun ) )
{
return "running";
}
if ( !($this->isFinished) && !($this->isRunning) && $this->hasRun )
{
return "postrun";
}
if ( $this->isFinished )
{
return "finished";
}
}
/**
* Constructs a Response Array based on the engine part's state.
* @return array The Response Array for the current state
*/
final protected function _makeReturnTable()
{
// Get a list of warnings
$warnings = $this->getWarnings();
// Report only new warnings if there is no warnings queue size
if( $this->_warnings_queue_size == 0 )
{
if( ($this->warnings_pointer > 0) && ($this->warnings_pointer < (count($warnings)) ) )
{
$warnings = array_slice($warnings, $this->warnings_pointer + 1);
$this->warnings_pointer += count($warnings);
}
else
{
$this->warnings_pointer = count($warnings);
}
}
$out = array(
'HasRun' => (!($this->isFinished)),
'Domain' => $this->active_domain,
'Step' => $this->active_step,
'Substep' => $this->active_substep,
'Error' => $this->getError(),
'Warnings' => $warnings
);
return $out;
}
final protected function setDomain($new_domain)
{
$this->active_domain = $new_domain;
}
final public function getDomain()
{
return $this->active_domain;
}
final protected function setStep($new_step)
{
$this->active_step = $new_step;
}
final public function getStep()
{
return $this->active_step;
}
final protected function setSubstep($new_substep)
{
$this->active_substep = $new_substep;
}
final public function getSubstep()
{
return $this->active_substep;
}
/**
* Attaches an observer object
* @param AKAbstractPartObserver $obs
*/
function attach(AKAbstractPartObserver $obs) {
$this->observers["$obs"] = $obs;
}
/**
* Dettaches an observer object
* @param AKAbstractPartObserver $obs
*/
function detach(AKAbstractPartObserver $obs) {
delete($this->observers["$obs"]);
}
/**
* Notifies observers each time something interesting happened to the part
* @param mixed $message The event object
*/
protected function notify($message) {
foreach ($this->observers as $obs) {
$obs->update($this, $message);
}
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* The base class of unarchiver classes
*/
abstract class AKAbstractUnarchiver extends AKAbstractPart
{
/** @var string Archive filename */
protected $filename = null;
/** @var array List of the names of all archive parts */
public $archiveList = array();
/** @var int The total size of all archive parts */
public $totalSize = array();
/** @var integer Current archive part number */
protected $currentPartNumber = -1;
/** @var integer The offset inside the current part */
protected $currentPartOffset = 0;
/** @var bool Should I restore permissions? */
protected $flagRestorePermissions = false;
/** @var AKAbstractPostproc Post processing class */
protected $postProcEngine = null;
/** @var string Absolute path to prepend to extracted files */
protected $addPath = '';
/** @var array Which files to rename */
public $renameFiles = array();
/** @var array Which directories to rename */
public $renameDirs = array();
/** @var array Which files to skip */
public $skipFiles = array();
/** @var integer Chunk size for processing */
protected $chunkSize = 524288;
/** @var resource File pointer to the current archive part file */
protected $fp = null;
/** @var int Run state when processing the current archive file */
protected $runState = null;
/** @var stdClass File header data, as read by the readFileHeader() method */
protected $fileHeader = null;
/** @var int How much of the uncompressed data we've read so far */
protected $dataReadLength = 0;
/** @var array Unwriteable files in these directories are always ignored and do not cause errors when not extracted */
protected $ignoreDirectories = array();
/**
* Public constructor
*/
public function __construct()
{
parent::__construct();
}
/**
* Wakeup function, called whenever the class is unserialized
*/
public function __wakeup()
{
if($this->currentPartNumber >= 0)
{
$this->fp = @fopen($this->archiveList[$this->currentPartNumber], 'rb');
if( (is_resource($this->fp)) && ($this->currentPartOffset > 0) )
{
@fseek($this->fp, $this->currentPartOffset);
}
}
}
/**
* Sleep function, called whenever the class is serialized
*/
public function shutdown()
{
if(is_resource($this->fp))
{
$this->currentPartOffset = @ftell($this->fp);
@fclose($this->fp);
}
}
/**
* Implements the abstract _prepare() method
*/
final protected function _prepare()
{
parent::__construct();
if( count($this->_parametersArray) > 0 )
{
foreach($this->_parametersArray as $key => $value)
{
switch($key)
{
// Archive's absolute filename
case 'filename':
$this->filename = $value;
// Sanity check
if (!empty($value))
{
$value = strtolower($value);
if (strlen($value) > 6)
{
if (
(substr($value, 0, 7) == 'http://')
|| (substr($value, 0, 8) == 'https://')
|| (substr($value, 0, 6) == 'ftp://')
|| (substr($value, 0, 7) == 'ssh2://')
|| (substr($value, 0, 6) == 'ssl://')
)
{
$this->setState('error', 'Invalid archive location');
}
}
}
break;
// Should I restore permissions?
case 'restore_permissions':
$this->flagRestorePermissions = $value;
break;
// Should I use FTP?
case 'post_proc':
$this->postProcEngine = AKFactory::getpostProc($value);
break;
// Path to add in the beginning
case 'add_path':
$this->addPath = $value;
$this->addPath = str_replace('\\','/',$this->addPath);
$this->addPath = rtrim($this->addPath,'/');
if(!empty($this->addPath)) $this->addPath .= '/';
break;
// Which files to rename (hash array)
case 'rename_files':
$this->renameFiles = $value;
break;
// Which files to rename (hash array)
case 'rename_dirs':
$this->renameDirs = $value;
break;
// Which files to skip (indexed array)
case 'skip_files':
$this->skipFiles = $value;
break;
// Which directories to ignore when we can't write files in them (indexed array)
case 'ignoredirectories':
$this->ignoreDirectories = $value;
break;
}
}
}
$this->scanArchives();
$this->readArchiveHeader();
$errMessage = $this->getError();
if(!empty($errMessage))
{
$this->setState('error', $errMessage);
}
else
{
$this->runState = AK_STATE_NOFILE;
$this->setState('prepared');
}
}
protected function _run()
{
if($this->getState() == 'postrun') return;
$this->setState('running');
$timer = AKFactory::getTimer();
$status = true;
while( $status && ($timer->getTimeLeft() > 0) )
{
switch( $this->runState )
{
case AK_STATE_NOFILE:
debugMsg(__CLASS__.'::_run() - Reading file header');
$status = $this->readFileHeader();
if($status)
{
debugMsg(__CLASS__.'::_run() - Preparing to extract '.$this->fileHeader->realFile);
// Send start of file notification
$message = new stdClass;
$message->type = 'startfile';
$message->content = new stdClass;
if( array_key_exists('realfile', get_object_vars($this->fileHeader)) ) {
$message->content->realfile = $this->fileHeader->realFile;
} else {
$message->content->realfile = $this->fileHeader->file;
}
$message->content->file = $this->fileHeader->file;
if( array_key_exists('compressed', get_object_vars($this->fileHeader)) ) {
$message->content->compressed = $this->fileHeader->compressed;
} else {
$message->content->compressed = 0;
}
$message->content->uncompressed = $this->fileHeader->uncompressed;
$this->notify($message);
} else {
debugMsg(__CLASS__.'::_run() - Could not read file header');
}
break;
case AK_STATE_HEADER:
case AK_STATE_DATA:
debugMsg(__CLASS__.'::_run() - Processing file data');
$status = $this->processFileData();
break;
case AK_STATE_DATAREAD:
case AK_STATE_POSTPROC:
debugMsg(__CLASS__.'::_run() - Calling post-processing class');
$this->postProcEngine->timestamp = $this->fileHeader->timestamp;
$status = $this->postProcEngine->process();
$this->propagateFromObject( $this->postProcEngine );
$this->runState = AK_STATE_DONE;
break;
case AK_STATE_DONE:
default:
if($status)
{
debugMsg(__CLASS__.'::_run() - Finished extracting file');
// Send end of file notification
$message = new stdClass;
$message->type = 'endfile';
$message->content = new stdClass;
if( array_key_exists('realfile', get_object_vars($this->fileHeader)) ) {
$message->content->realfile = $this->fileHeader->realFile;
} else {
$message->content->realfile = $this->fileHeader->file;
}
$message->content->file = $this->fileHeader->file;
if( array_key_exists('compressed', get_object_vars($this->fileHeader)) ) {
$message->content->compressed = $this->fileHeader->compressed;
} else {
$message->content->compressed = 0;
}
$message->content->uncompressed = $this->fileHeader->uncompressed;
$this->notify($message);
}
$this->runState = AK_STATE_NOFILE;
continue;
}
}
$error = $this->getError();
if( !$status && ($this->runState == AK_STATE_NOFILE) && empty( $error ) )
{
debugMsg(__CLASS__.'::_run() - Just finished');
// We just finished
$this->setState('postrun');
}
elseif( !empty($error) )
{
debugMsg(__CLASS__.'::_run() - Halted with an error:');
debugMsg($error);
$this->setState( 'error', $error );
}
}
protected function _finalize()
{
// Nothing to do
$this->setState('finished');
}
/**
* Returns the base extension of the file, e.g. '.jpa'
* @return string
*/
private function getBaseExtension()
{
static $baseextension;
if(empty($baseextension))
{
$basename = basename($this->filename);
$lastdot = strrpos($basename,'.');
$baseextension = substr($basename, $lastdot);
}
return $baseextension;
}
/**
* Scans for archive parts
*/
private function scanArchives()
{
if(defined('KSDEBUG')) {
@unlink('debug.txt');
}
debugMsg('Preparing to scan archives');
$privateArchiveList = array();
// Get the components of the archive filename
$dirname = dirname($this->filename);
$base_extension = $this->getBaseExtension();
$basename = basename($this->filename, $base_extension);
$this->totalSize = 0;
// Scan for multiple parts until we don't find any more of them
$count = 0;
$found = true;
$this->archiveList = array();
while($found)
{
++$count;
$extension = substr($base_extension, 0, 2).sprintf('%02d', $count);
$filename = $dirname.DIRECTORY_SEPARATOR.$basename.$extension;
$found = file_exists($filename);
if($found)
{
debugMsg('- Found archive '.$filename);
// Add yet another part, with a numeric-appended filename
$this->archiveList[] = $filename;
$filesize = @filesize($filename);
$this->totalSize += $filesize;
$privateArchiveList[] = array($filename, $filesize);
}
else
{
debugMsg('- Found archive '.$this->filename);
// Add the last part, with the regular extension
$this->archiveList[] = $this->filename;
$filename = $this->filename;
$filesize = @filesize($filename);
$this->totalSize += $filesize;
$privateArchiveList[] = array($filename, $filesize);
}
}
debugMsg('Total archive parts: '.$count);
$this->currentPartNumber = -1;
$this->currentPartOffset = 0;
$this->runState = AK_STATE_NOFILE;
// Send start of file notification
$message = new stdClass;
$message->type = 'totalsize';
$message->content = new stdClass;
$message->content->totalsize = $this->totalSize;
$message->content->filelist = $privateArchiveList;
$this->notify($message);
}
/**
* Opens the next part file for reading
*/
protected function nextFile()
{
debugMsg('Current part is '.$this->currentPartNumber.'; opening the next part');
++$this->currentPartNumber;
if( $this->currentPartNumber > (count($this->archiveList) - 1) )
{
$this->setState('postrun');
return false;
}
else
{
if( is_resource($this->fp) ) @fclose($this->fp);
debugMsg('Opening file '.$this->archiveList[$this->currentPartNumber]);
$this->fp = @fopen( $this->archiveList[$this->currentPartNumber], 'rb' );
if($this->fp === false) {
debugMsg('Could not open file - crash imminent');
$this->setError(AKText::sprintf('ERR_COULD_NOT_OPEN_ARCHIVE_PART', $this->archiveList[$this->currentPartNumber]));
}
fseek($this->fp, 0);
$this->currentPartOffset = 0;
return true;
}
}
/**
* Returns true if we have reached the end of file
* @param $local bool True to return EOF of the local file, false (default) to return if we have reached the end of the archive set
* @return bool True if we have reached End Of File
*/
protected function isEOF($local = false)
{
$eof = @feof($this->fp);
if(!$eof)
{
// Border case: right at the part's end (eeeek!!!). For the life of me, I don't understand why
// feof() doesn't report true. It expects the fp to be positioned *beyond* the EOF to report
// true. Incredible! :(
$position = @ftell($this->fp);
$filesize = @filesize( $this->archiveList[$this->currentPartNumber] );
if($filesize <= 0) {
// 2Gb or more files on a 32 bit version of PHP tend to get screwed up. Meh.
$eof = false;
} elseif( $position >= $filesize ) {
$eof = true;
}
}
if($local)
{
return $eof;
}
else
{
return $eof && ($this->currentPartNumber >= (count($this->archiveList)-1) );
}
}
/**
* Tries to make a directory user-writable so that we can write a file to it
* @param $path string A path to a file
*/
protected function setCorrectPermissions($path)
{
static $rootDir = null;
if(is_null($rootDir)) {
$rootDir = rtrim(AKFactory::get('kickstart.setup.destdir',''),'/\\');
}
$directory = rtrim(dirname($path),'/\\');
if($directory != $rootDir) {
// Is this an unwritable directory?
if(!is_writeable($directory)) {
$this->postProcEngine->chmod( $directory, 0755 );
}
}
$this->postProcEngine->chmod( $path, 0644 );
}
/**
* Concrete classes are supposed to use this method in order to read the archive's header and
* prepare themselves to the point of being ready to extract the first file.
*/
protected abstract function readArchiveHeader();
/**
* Concrete classes must use this method to read the file header
* @return bool True if reading the file was successful, false if an error occured or we reached end of archive
*/
protected abstract function readFileHeader();
/**
* Concrete classes must use this method to process file data. It must set $runState to AK_STATE_DATAREAD when
* it's finished processing the file data.
* @return bool True if processing the file data was successful, false if an error occured
*/
protected abstract function processFileData();
/**
* Reads data from the archive and notifies the observer with the 'reading' message
* @param $fp
* @param $length
*/
protected function fread($fp, $length = null)
{
if(is_numeric($length))
{
if($length > 0) {
$data = fread($fp, $length);
} else {
$data = fread($fp, PHP_INT_MAX);
}
}
else
{
$data = fread($fp, PHP_INT_MAX);
}
if($data === false) $data = '';
// Send start of file notification
$message = new stdClass;
$message->type = 'reading';
$message->content = new stdClass;
$message->content->length = strlen($data);
$this->notify($message);
return $data;
}
/**
* Is this file or directory contained in a directory we've decided to ignore
* write errors for? This is useful to let the extraction work despite write
* errors in the log, logs and tmp directories which MIGHT be used by the system
* on some low quality hosts and Plesk-powered hosts.
*
* @param string $shortFilename The relative path of the file/directory in the package
*
* @return boolean True if it belongs in an ignored directory
*/
public function isIgnoredDirectory($shortFilename)
{
// return false;
if (substr($shortFilename, -1) == '/')
{
$check = rtrim($shortFilename, '/');
}
else
{
$check = dirname($shortFilename);
}
return in_array($check, $this->ignoreDirectories);
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* File post processor engines base class
*/
abstract class AKAbstractPostproc extends AKAbstractObject
{
/** @var string The current (real) file path we'll have to process */
protected $filename = null;
/** @var int The requested permissions */
protected $perms = 0755;
/** @var string The temporary file path we gave to the unarchiver engine */
protected $tempFilename = null;
/** @var int The UNIX timestamp of the file's desired modification date */
public $timestamp = 0;
/**
* Processes the current file, e.g. moves it from temp to final location by FTP
*/
abstract public function process();
/**
* The unarchiver tells us the path to the filename it wants to extract and we give it
* a different path instead.
* @param string $filename The path to the real file
* @param int $perms The permissions we need the file to have
* @return string The path to the temporary file
*/
abstract public function processFilename($filename, $perms = 0755);
/**
* Recursively creates a directory if it doesn't exist
* @param string $dirName The directory to create
* @param int $perms The permissions to give to that directory
*/
abstract public function createDirRecursive( $dirName, $perms );
abstract public function chmod( $file, $perms );
abstract public function unlink( $file );
abstract public function rmdir( $directory );
abstract public function rename( $from, $to );
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* Descendants of this class can be used in the unarchiver's observer methods (attach, detach and notify)
* @author Nicholas
*
*/
abstract class AKAbstractPartObserver
{
abstract public function update($object, $message);
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* Direct file writer
*/
class AKPostprocDirect extends AKAbstractPostproc
{
public function process()
{
$restorePerms = AKFactory::get('kickstart.setup.restoreperms', false);
if($restorePerms)
{
@chmod($this->filename, $this->perms);
}
else
{
if(@is_file($this->filename))
{
@chmod($this->filename, 0644);
}
else
{
@chmod($this->filename, 0755);
}
}
if($this->timestamp > 0)
{
@touch($this->filename, $this->timestamp);
}
return true;
}
public function processFilename($filename, $perms = 0755)
{
$this->perms = $perms;
$this->filename = $filename;
return $filename;
}
public function createDirRecursive( $dirName, $perms )
{
if( AKFactory::get('kickstart.setup.dryrun','0') ) return true;
if (@mkdir($dirName, 0755, true)) {
@chmod($dirName, 0755);
return true;
}
$root = AKFactory::get('kickstart.setup.destdir');
$root = rtrim(str_replace('\\','/',$root),'/');
$dir = rtrim(str_replace('\\','/',$dirName),'/');
if(strpos($dir, $root) === 0) {
$dir = ltrim(substr($dir, strlen($root)), '/');
$root .= '/';
} else {
$root = '';
}
if(empty($dir)) return true;
$dirArray = explode('/', $dir);
$path = '';
foreach( $dirArray as $dir )
{
$path .= $dir . '/';
$ret = is_dir($root.$path) ? true : @mkdir($root.$path);
if( !$ret ) {
// Is this a file instead of a directory?
if(is_file($root.$path) )
{
@unlink($root.$path);
$ret = @mkdir($root.$path);
}
if( !$ret ) {
$this->setError( AKText::sprintf('COULDNT_CREATE_DIR',$path) );
return false;
}
}
// Try to set new directory permissions to 0755
@chmod($root.$path, $perms);
}
return true;
}
public function chmod( $file, $perms )
{
if( AKFactory::get('kickstart.setup.dryrun','0') ) return true;
return @chmod( $file, $perms );
}
public function unlink( $file )
{
return @unlink( $file );
}
public function rmdir( $directory )
{
return @rmdir( $directory );
}
public function rename( $from, $to )
{
return @rename($from, $to);
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* FTP file writer
*/
class AKPostprocFTP extends AKAbstractPostproc
{
/** @var bool Should I use FTP over implicit SSL? */
public $useSSL = false;
/** @var bool use Passive mode? */
public $passive = true;
/** @var string FTP host name */
public $host = '';
/** @var int FTP port */
public $port = 21;
/** @var string FTP user name */
public $user = '';
/** @var string FTP password */
public $pass = '';
/** @var string FTP initial directory */
public $dir = '';
/** @var resource The FTP handle */
private $handle = null;
/** @var string The temporary directory where the data will be stored */
private $tempDir = '';
public function __construct()
{
parent::__construct();
$this->useSSL = AKFactory::get('kickstart.ftp.ssl', false);
$this->passive = AKFactory::get('kickstart.ftp.passive', true);
$this->host = AKFactory::get('kickstart.ftp.host', '');
$this->port = AKFactory::get('kickstart.ftp.port', 21);
if(trim($this->port) == '') $this->port = 21;
$this->user = AKFactory::get('kickstart.ftp.user', '');
$this->pass = AKFactory::get('kickstart.ftp.pass', '');
$this->dir = AKFactory::get('kickstart.ftp.dir', '');
$this->tempDir = AKFactory::get('kickstart.ftp.tempdir', '');
$connected = $this->connect();
if($connected)
{
if(!empty($this->tempDir))
{
$tempDir = rtrim($this->tempDir, '/\\').'/';
$writable = $this->isDirWritable($tempDir);
}
else
{
$tempDir = '';
$writable = false;
}
if(!$writable) {
// Default temporary directory is the current root
$tempDir = KSROOTDIR;
if(empty($tempDir))
{
// Oh, we have no directory reported!
$tempDir = '.';
}
$absoluteDirToHere = $tempDir;
$tempDir = rtrim(str_replace('\\','/',$tempDir),'/');
if(!empty($tempDir)) $tempDir .= '/';
$this->tempDir = $tempDir;
// Is this directory writable?
$writable = $this->isDirWritable($tempDir);
}
if(!$writable)
{
// Nope. Let's try creating a temporary directory in the site's root.
$tempDir = $absoluteDirToHere.'/kicktemp';
$this->createDirRecursive($tempDir, 0777);
// Try making it writable...
$this->fixPermissions($tempDir);
$writable = $this->isDirWritable($tempDir);
}
// Was the new directory writable?
if(!$writable)
{
// Let's see if the user has specified one
$userdir = AKFactory::get('kickstart.ftp.tempdir', '');
if(!empty($userdir))
{
// Is it an absolute or a relative directory?
$absolute = false;
$absolute = $absolute || ( substr($userdir,0,1) == '/' );
$absolute = $absolute || ( substr($userdir,1,1) == ':' );
$absolute = $absolute || ( substr($userdir,2,1) == ':' );
if(!$absolute)
{
// Make absolute
$tempDir = $absoluteDirToHere.$userdir;
}
else
{
// it's already absolute
$tempDir = $userdir;
}
// Does the directory exist?
if( is_dir($tempDir) )
{
// Yeah. Is it writable?
$writable = $this->isDirWritable($tempDir);
}
}
}
$this->tempDir = $tempDir;
if(!$writable)
{
// No writable directory found!!!
$this->setError(AKText::_('FTP_TEMPDIR_NOT_WRITABLE'));
}
else
{
AKFactory::set('kickstart.ftp.tempdir', $tempDir);
$this->tempDir = $tempDir;
}
}
}
function __wakeup()
{
$this->connect();
}
public function connect()
{
// Connect to server, using SSL if so required
if($this->useSSL) {
$this->handle = @ftp_ssl_connect($this->host, $this->port);
} else {
$this->handle = @ftp_connect($this->host, $this->port);
}
if($this->handle === false)
{
$this->setError(AKText::_('WRONG_FTP_HOST'));
return false;
}
// Login
if(! @ftp_login($this->handle, $this->user, $this->pass))
{
$this->setError(AKText::_('WRONG_FTP_USER'));
@ftp_close($this->handle);
return false;
}
// Change to initial directory
if(! @ftp_chdir($this->handle, $this->dir))
{
$this->setError(AKText::_('WRONG_FTP_PATH1'));
@ftp_close($this->handle);
return false;
}
// Enable passive mode if the user requested it
if( $this->passive )
{
@ftp_pasv($this->handle, true);
}
else
{
@ftp_pasv($this->handle, false);
}
// Try to download ourselves
$testFilename = defined('KSSELFNAME') ? KSSELFNAME : basename(__FILE__);
$tempHandle = fopen('php://temp', 'r+');
if (@ftp_fget($this->handle, $tempHandle, $testFilename, FTP_ASCII, 0) === false)
{
$this->setError(AKText::_('WRONG_FTP_PATH2'));
@ftp_close($this->handle);
fclose($tempHandle);
return false;
}
fclose($tempHandle);
return true;
}
public function process()
{
if( is_null($this->tempFilename) )
{
// If an empty filename is passed, it means that we shouldn't do any post processing, i.e.
// the entity was a directory or symlink
return true;
}
$remotePath = dirname($this->filename);
$removePath = AKFactory::get('kickstart.setup.destdir','');
if(!empty($removePath))
{
$removePath = ltrim($removePath, "/");
$remotePath = ltrim($remotePath, "/");
$left = substr($remotePath, 0, strlen($removePath));
if($left == $removePath)
{
$remotePath = substr($remotePath, strlen($removePath));
}
}
$absoluteFSPath = dirname($this->filename);
$relativeFTPPath = trim($remotePath, '/');
$absoluteFTPPath = '/'.trim( $this->dir, '/' ).'/'.trim($remotePath, '/');
$onlyFilename = basename($this->filename);
$remoteName = $absoluteFTPPath.'/'.$onlyFilename;
$ret = @ftp_chdir($this->handle, $absoluteFTPPath);
if($ret === false)
{
$ret = $this->createDirRecursive( $absoluteFSPath, 0755);
if($ret === false) {
$this->setError(AKText::sprintf('FTP_COULDNT_UPLOAD', $this->filename));
return false;
}
$ret = @ftp_chdir($this->handle, $absoluteFTPPath);
if($ret === false) {
$this->setError(AKText::sprintf('FTP_COULDNT_UPLOAD', $this->filename));
return false;
}
}
$ret = @ftp_put($this->handle, $remoteName, $this->tempFilename, FTP_BINARY);
if($ret === false)
{
// If we couldn't create the file, attempt to fix the permissions in the PHP level and retry!
$this->fixPermissions($this->filename);
$this->unlink($this->filename);
$fp = @fopen($this->tempFilename, 'rb');
if($fp !== false)
{
$ret = @ftp_fput($this->handle, $remoteName, $fp, FTP_BINARY);
@fclose($fp);
}
else
{
$ret = false;
}
}
@unlink($this->tempFilename);
if($ret === false)
{
$this->setError(AKText::sprintf('FTP_COULDNT_UPLOAD', $this->filename));
return false;
}
$restorePerms = AKFactory::get('kickstart.setup.restoreperms', false);
if($restorePerms)
{
@ftp_chmod($this->_handle, $this->perms, $remoteName);
}
else
{
@ftp_chmod($this->_handle, 0644, $remoteName);
}
return true;
}
public function processFilename($filename, $perms = 0755)
{
// Catch some error conditions...
if($this->getError())
{
return false;
}
// If a null filename is passed, it means that we shouldn't do any post processing, i.e.
// the entity was a directory or symlink
if(is_null($filename))
{
$this->filename = null;
$this->tempFilename = null;
return null;
}
// Strip absolute filesystem path to website's root
$removePath = AKFactory::get('kickstart.setup.destdir','');
if(!empty($removePath))
{
$left = substr($filename, 0, strlen($removePath));
if($left == $removePath)
{
$filename = substr($filename, strlen($removePath));
}
}
// Trim slash on the left
$filename = ltrim($filename, '/');
$this->filename = $filename;
$this->tempFilename = tempnam($this->tempDir, 'kickstart-');
$this->perms = $perms;
if( empty($this->tempFilename) )
{
// Oops! Let's try something different
$this->tempFilename = $this->tempDir.'/kickstart-'.time().'.dat';
}
return $this->tempFilename;
}
private function isDirWritable($dir)
{
$fp = @fopen($dir.'/kickstart.dat', 'wb');
if($fp === false)
{
return false;
}
else
{
@fclose($fp);
unlink($dir.'/kickstart.dat');
return true;
}
}
public function createDirRecursive( $dirName, $perms )
{
// Strip absolute filesystem path to website's root
$removePath = AKFactory::get('kickstart.setup.destdir','');
if(!empty($removePath))
{
// UNIXize the paths
$removePath = str_replace('\\','/',$removePath);
$dirName = str_replace('\\','/',$dirName);
// Make sure they both end in a slash
$removePath = rtrim($removePath,'/\\').'/';
$dirName = rtrim($dirName,'/\\').'/';
// Process the path removal
$left = substr($dirName, 0, strlen($removePath));
if($left == $removePath)
{
$dirName = substr($dirName, strlen($removePath));
}
}
if(empty($dirName)) $dirName = ''; // 'cause the substr() above may return FALSE.
$check = '/'.trim($this->dir,'/').'/'.trim($dirName, '/');
if($this->is_dir($check)) return true;
$alldirs = explode('/', $dirName);
$previousDir = '/'.trim($this->dir);
foreach($alldirs as $curdir)
{
$check = $previousDir.'/'.$curdir;
if(!$this->is_dir($check))
{
// Proactively try to delete a file by the same name
@ftp_delete($this->handle, $check);
if(@ftp_mkdir($this->handle, $check) === false)
{
// If we couldn't create the directory, attempt to fix the permissions in the PHP level and retry!
$this->fixPermissions($removePath.$check);
if(@ftp_mkdir($this->handle, $check) === false)
{
// Can we fall back to pure PHP mode, sire?
if(!@mkdir($check))
{
$this->setError(AKText::sprintf('FTP_CANT_CREATE_DIR', $check));
return false;
}
else
{
// Since the directory was built by PHP, change its permissions
@chmod($check, "0777");
return true;
}
}
}
@ftp_chmod($this->handle, $perms, $check);
}
$previousDir = $check;
}
return true;
}
public function close()
{
@ftp_close($this->handle);
}
/*
* Tries to fix directory/file permissions in the PHP level, so that
* the FTP operation doesn't fail.
* @param $path string The full path to a directory or file
*/
private function fixPermissions( $path )
{
// Turn off error reporting
if(!defined('KSDEBUG')) {
$oldErrorReporting = @error_reporting(E_NONE);
}
// Get UNIX style paths
$relPath = str_replace('\\','/',$path);
$basePath = rtrim(str_replace('\\','/',KSROOTDIR),'/');
$basePath = rtrim($basePath,'/');
if(!empty($basePath)) $basePath .= '/';
// Remove the leading relative root
if( substr($relPath,0,strlen($basePath)) == $basePath )
$relPath = substr($relPath,strlen($basePath));
$dirArray = explode('/', $relPath);
$pathBuilt = rtrim($basePath,'/');
foreach( $dirArray as $dir )
{
if(empty($dir)) continue;
$oldPath = $pathBuilt;
$pathBuilt .= '/'.$dir;
if(is_dir($oldPath.$dir))
{
@chmod($oldPath.$dir, 0777);
}
else
{
if(@chmod($oldPath.$dir, 0777) === false)
{
@unlink($oldPath.$dir);
}
}
}
// Restore error reporting
if(!defined('KSDEBUG')) {
@error_reporting($oldErrorReporting);
}
}
public function chmod( $file, $perms )
{
return @ftp_chmod($this->handle, $perms, $file);
}
private function is_dir( $dir )
{
return @ftp_chdir( $this->handle, $dir );
}
public function unlink( $file )
{
$removePath = AKFactory::get('kickstart.setup.destdir','');
if(!empty($removePath))
{
$left = substr($file, 0, strlen($removePath));
if($left == $removePath)
{
$file = substr($file, strlen($removePath));
}
}
$check = '/'.trim($this->dir,'/').'/'.trim($file, '/');
return @ftp_delete( $this->handle, $check );
}
public function rmdir( $directory )
{
$removePath = AKFactory::get('kickstart.setup.destdir','');
if(!empty($removePath))
{
$left = substr($directory, 0, strlen($removePath));
if($left == $removePath)
{
$directory = substr($directory, strlen($removePath));
}
}
$check = '/'.trim($this->dir,'/').'/'.trim($directory, '/');
return @ftp_rmdir( $this->handle, $check );
}
public function rename( $from, $to )
{
$originalFrom = $from;
$originalTo = $to;
$removePath = AKFactory::get('kickstart.setup.destdir','');
if(!empty($removePath))
{
$left = substr($from, 0, strlen($removePath));
if($left == $removePath)
{
$from = substr($from, strlen($removePath));
}
}
$from = '/'.trim($this->dir,'/').'/'.trim($from, '/');
if(!empty($removePath))
{
$left = substr($to, 0, strlen($removePath));
if($left == $removePath)
{
$to = substr($to, strlen($removePath));
}
}
$to = '/'.trim($this->dir,'/').'/'.trim($to, '/');
$result = @ftp_rename( $this->handle, $from, $to );
if($result !== true)
{
return @rename($from, $to);
}
else
{
return true;
}
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* FTP file writer
*/
class AKPostprocSFTP extends AKAbstractPostproc
{
/** @var bool Should I use FTP over implicit SSL? */
public $useSSL = false;
/** @var bool use Passive mode? */
public $passive = true;
/** @var string FTP host name */
public $host = '';
/** @var int FTP port */
public $port = 21;
/** @var string FTP user name */
public $user = '';
/** @var string FTP password */
public $pass = '';
/** @var string FTP initial directory */
public $dir = '';
/** @var resource SFTP resource handle */
private $handle = null;
/** @var resource SSH2 connection resource handle */
private $_connection = null;
/** @var string Current remote directory, including the remote directory string */
private $_currentdir;
/** @var string The temporary directory where the data will be stored */
private $tempDir = '';
public function __construct()
{
parent::__construct();
$this->host = AKFactory::get('kickstart.ftp.host', '');
$this->port = AKFactory::get('kickstart.ftp.port', 22);
if(trim($this->port) == '') $this->port = 22;
$this->user = AKFactory::get('kickstart.ftp.user', '');
$this->pass = AKFactory::get('kickstart.ftp.pass', '');
$this->dir = AKFactory::get('kickstart.ftp.dir', '');
$this->tempDir = AKFactory::get('kickstart.ftp.tempdir', '');
$connected = $this->connect();
if($connected)
{
if(!empty($this->tempDir))
{
$tempDir = rtrim($this->tempDir, '/\\').'/';
$writable = $this->isDirWritable($tempDir);
}
else
{
$tempDir = '';
$writable = false;
}
if(!$writable) {
// Default temporary directory is the current root
$tempDir = KSROOTDIR;
if(empty($tempDir))
{
// Oh, we have no directory reported!
$tempDir = '.';
}
$absoluteDirToHere = $tempDir;
$tempDir = rtrim(str_replace('\\','/',$tempDir),'/');
if(!empty($tempDir)) $tempDir .= '/';
$this->tempDir = $tempDir;
// Is this directory writable?
$writable = $this->isDirWritable($tempDir);
}
if(!$writable)
{
// Nope. Let's try creating a temporary directory in the site's root.
$tempDir = $absoluteDirToHere.'/kicktemp';
$this->createDirRecursive($tempDir, 0777);
// Try making it writable...
$this->fixPermissions($tempDir);
$writable = $this->isDirWritable($tempDir);
}
// Was the new directory writable?
if(!$writable)
{
// Let's see if the user has specified one
$userdir = AKFactory::get('kickstart.ftp.tempdir', '');
if(!empty($userdir))
{
// Is it an absolute or a relative directory?
$absolute = false;
$absolute = $absolute || ( substr($userdir,0,1) == '/' );
$absolute = $absolute || ( substr($userdir,1,1) == ':' );
$absolute = $absolute || ( substr($userdir,2,1) == ':' );
if(!$absolute)
{
// Make absolute
$tempDir = $absoluteDirToHere.$userdir;
}
else
{
// it's already absolute
$tempDir = $userdir;
}
// Does the directory exist?
if( is_dir($tempDir) )
{
// Yeah. Is it writable?
$writable = $this->isDirWritable($tempDir);
}
}
}
$this->tempDir = $tempDir;
if(!$writable)
{
// No writable directory found!!!
$this->setError(AKText::_('SFTP_TEMPDIR_NOT_WRITABLE'));
}
else
{
AKFactory::set('kickstart.ftp.tempdir', $tempDir);
$this->tempDir = $tempDir;
}
}
}
function __wakeup()
{
$this->connect();
}
public function connect()
{
$this->_connection = false;
if(!function_exists('ssh2_connect'))
{
$this->setError(AKText::_('SFTP_NO_SSH2'));
return false;
}
$this->_connection = @ssh2_connect($this->host, $this->port);
if (!@ssh2_auth_password($this->_connection, $this->user, $this->pass))
{
$this->setError(AKText::_('SFTP_WRONG_USER'));
$this->_connection = false;
return false;
}
$this->handle = @ssh2_sftp($this->_connection);
// I must have an absolute directory
if(!$this->dir)
{
$this->setError(AKText::_('SFTP_WRONG_STARTING_DIR'));
return false;
}
// Change to initial directory
if(!$this->sftp_chdir('/'))
{
$this->setError(AKText::_('SFTP_WRONG_STARTING_DIR'));
unset($this->_connection);
unset($this->handle);
return false;
}
// Try to download ourselves
$testFilename = defined('KSSELFNAME') ? KSSELFNAME : basename(__FILE__);
$basePath = '/'.trim($this->dir, '/');
if(@fopen("ssh2.sftp://{$this->handle}$basePath/$testFilename",'r+') === false)
{
$this->setError(AKText::_('SFTP_WRONG_STARTING_DIR'));
unset($this->_connection);
unset($this->handle);
return false;
}
return true;
}
public function process()
{
if( is_null($this->tempFilename) )
{
// If an empty filename is passed, it means that we shouldn't do any post processing, i.e.
// the entity was a directory or symlink
return true;
}
$remotePath = dirname($this->filename);
$absoluteFSPath = dirname($this->filename);
$absoluteFTPPath = '/'.trim( $this->dir, '/' ).'/'.trim($remotePath, '/');
$onlyFilename = basename($this->filename);
$remoteName = $absoluteFTPPath.'/'.$onlyFilename;
$ret = $this->sftp_chdir($absoluteFTPPath);
if($ret === false)
{
$ret = $this->createDirRecursive( $absoluteFSPath, 0755);
if($ret === false)
{
$this->setError(AKText::sprintf('SFTP_COULDNT_UPLOAD', $this->filename));
return false;
}
$ret = $this->sftp_chdir($absoluteFTPPath);
if($ret === false)
{
$this->setError(AKText::sprintf('SFTP_COULDNT_UPLOAD', $this->filename));
return false;
}
}
// Create the file
$ret = $this->write($this->tempFilename, $remoteName);
// If I got a -1 it means that I wasn't able to open the file, so I have to stop here
if($ret === -1)
{
$this->setError(AKText::sprintf('SFTP_COULDNT_UPLOAD', $this->filename));
return false;
}
if($ret === false)
{
// If we couldn't create the file, attempt to fix the permissions in the PHP level and retry!
$this->fixPermissions($this->filename);
$this->unlink($this->filename);
$ret = $this->write($this->tempFilename, $remoteName);
}
@unlink($this->tempFilename);
if($ret === false)
{
$this->setError(AKText::sprintf('SFTP_COULDNT_UPLOAD', $this->filename));
return false;
}
$restorePerms = AKFactory::get('kickstart.setup.restoreperms', false);
if($restorePerms)
{
$this->chmod($remoteName, $this->perms);
}
else
{
$this->chmod($remoteName, 0644);
}
return true;
}
public function processFilename($filename, $perms = 0755)
{
// Catch some error conditions...
if($this->getError())
{
return false;
}
// If a null filename is passed, it means that we shouldn't do any post processing, i.e.
// the entity was a directory or symlink
if(is_null($filename))
{
$this->filename = null;
$this->tempFilename = null;
return null;
}
// Strip absolute filesystem path to website's root
$removePath = AKFactory::get('kickstart.setup.destdir','');
if(!empty($removePath))
{
$left = substr($filename, 0, strlen($removePath));
if($left == $removePath)
{
$filename = substr($filename, strlen($removePath));
}
}
// Trim slash on the left
$filename = ltrim($filename, '/');
$this->filename = $filename;
$this->tempFilename = tempnam($this->tempDir, 'kickstart-');
$this->perms = $perms;
if( empty($this->tempFilename) )
{
// Oops! Let's try something different
$this->tempFilename = $this->tempDir.'/kickstart-'.time().'.dat';
}
return $this->tempFilename;
}
private function isDirWritable($dir)
{
if(@fopen("ssh2.sftp://{$this->handle}$dir/kickstart.dat",'wb') === false)
{
return false;
}
else
{
@ssh2_sftp_unlink($this->handle, $dir.'/kickstart.dat');
return true;
}
}
public function createDirRecursive( $dirName, $perms )
{
// Strip absolute filesystem path to website's root
$removePath = AKFactory::get('kickstart.setup.destdir','');
if(!empty($removePath))
{
// UNIXize the paths
$removePath = str_replace('\\','/',$removePath);
$dirName = str_replace('\\','/',$dirName);
// Make sure they both end in a slash
$removePath = rtrim($removePath,'/\\').'/';
$dirName = rtrim($dirName,'/\\').'/';
// Process the path removal
$left = substr($dirName, 0, strlen($removePath));
if($left == $removePath)
{
$dirName = substr($dirName, strlen($removePath));
}
}
if(empty($dirName)) $dirName = ''; // 'cause the substr() above may return FALSE.
$check = '/'.trim($this->dir,'/ ').'/'.trim($dirName, '/');
if($this->is_dir($check))
{
return true;
}
$alldirs = explode('/', $dirName);
$previousDir = '/'.trim($this->dir, '/ ');
foreach($alldirs as $curdir)
{
if(!$curdir)
{
continue;
}
$check = $previousDir.'/'.$curdir;
if(!$this->is_dir($check))
{
// Proactively try to delete a file by the same name
@ssh2_sftp_unlink($this->handle, $check);
if(@ssh2_sftp_mkdir($this->handle, $check) === false)
{
// If we couldn't create the directory, attempt to fix the permissions in the PHP level and retry!
$this->fixPermissions($check);
if(@ssh2_sftp_mkdir($this->handle, $check) === false)
{
// Can we fall back to pure PHP mode, sire?
if(!@mkdir($check))
{
$this->setError(AKText::sprintf('FTP_CANT_CREATE_DIR', $check));
return false;
}
else
{
// Since the directory was built by PHP, change its permissions
@chmod($check, "0777");
return true;
}
}
}
@ssh2_sftp_chmod($this->handle, $check, $perms);
}
$previousDir = $check;
}
return true;
}
public function close()
{
unset($this->_connection);
unset($this->handle);
}
/*
* Tries to fix directory/file permissions in the PHP level, so that
* the FTP operation doesn't fail.
* @param $path string The full path to a directory or file
*/
private function fixPermissions( $path )
{
// Turn off error reporting
if(!defined('KSDEBUG')) {
$oldErrorReporting = @error_reporting(E_NONE);
}
// Get UNIX style paths
$relPath = str_replace('\\','/',$path);
$basePath = rtrim(str_replace('\\','/',KSROOTDIR),'/');
$basePath = rtrim($basePath,'/');
if(!empty($basePath))
{
$basePath .= '/';
}
// Remove the leading relative root
if( substr($relPath,0,strlen($basePath)) == $basePath )
{
$relPath = substr($relPath,strlen($basePath));
}
$dirArray = explode('/', $relPath);
$pathBuilt = rtrim($basePath,'/');
foreach( $dirArray as $dir )
{
if(empty($dir))
{
continue;
}
$oldPath = $pathBuilt;
$pathBuilt .= '/'.$dir;
if(is_dir($oldPath.'/'.$dir))
{
@chmod($oldPath.'/'.$dir, 0777);
}
else
{
if(@chmod($oldPath.'/'.$dir, 0777) === false)
{
@unlink($oldPath.$dir);
}
}
}
// Restore error reporting
if(!defined('KSDEBUG')) {
@error_reporting($oldErrorReporting);
}
}
public function chmod( $file, $perms )
{
return @ssh2_sftp_chmod($this->handle, $file, $perms);
}
private function is_dir( $dir )
{
return $this->sftp_chdir($dir);
}
private function write($local, $remote)
{
$fp = @fopen("ssh2.sftp://{$this->handle}$remote",'w');
$localfp = @fopen($local,'rb');
if($fp === false)
{
return -1;
}
if($localfp === false)
{
@fclose($fp);
return -1;
}
$res = true;
while(!feof($localfp) && ($res !== false))
{
$buffer = @fread($localfp, 65567);
$res = @fwrite($fp, $buffer);
}
@fclose($fp);
@fclose($localfp);
return $res;
}
public function unlink( $file )
{
$check = '/'.trim($this->dir,'/').'/'.trim($file, '/');
return @ssh2_sftp_unlink($this->handle, $check);
}
public function rmdir( $directory )
{
$check = '/'.trim($this->dir,'/').'/'.trim($directory, '/');
return @ssh2_sftp_rmdir( $this->handle, $check);
}
public function rename( $from, $to )
{
$from = '/'.trim($this->dir,'/').'/'.trim($from, '/');
$to = '/'.trim($this->dir,'/').'/'.trim($to, '/');
$result = @ssh2_sftp_rename($this->handle, $from, $to);
if($result !== true)
{
return @rename($from, $to);
}
else
{
return true;
}
}
/**
* Changes to the requested directory in the remote server. You give only the
* path relative to the initial directory and it does all the rest by itself,
* including doing nothing if the remote directory is the one we want.
*
* @param string $dir The (realtive) remote directory
*
* @return bool True if successful, false otherwise.
*/
private function sftp_chdir($dir)
{
// Strip absolute filesystem path to website's root
$removePath = AKFactory::get('kickstart.setup.destdir','');
if(!empty($removePath))
{
// UNIXize the paths
$removePath = str_replace('\\','/',$removePath);
$dir = str_replace('\\','/',$dir);
// Make sure they both end in a slash
$removePath = rtrim($removePath,'/\\').'/';
$dir = rtrim($dir,'/\\').'/';
// Process the path removal
$left = substr($dir, 0, strlen($removePath));
if($left == $removePath)
{
$dir = substr($dir, strlen($removePath));
}
}
if(empty($dir))
{
// Because the substr() above may return FALSE.
$dir = '';
}
// Calculate "real" (absolute) SFTP path
$realdir = substr($this->dir, -1) == '/' ? substr($this->dir, 0, strlen($this->dir) - 1) : $this->dir;
$realdir .= '/'.$dir;
$realdir = substr($realdir, 0, 1) == '/' ? $realdir : '/'.$realdir;
if($this->_currentdir == $realdir)
{
// Already there, do nothing
return true;
}
$result = @ssh2_sftp_stat($this->handle, $realdir);
if($result === false)
{
return false;
}
else
{
// Update the private "current remote directory" variable
$this->_currentdir = $realdir;
return true;
}
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* Hybrid direct / FTP mode file writer
*/
class AKPostprocHybrid extends AKAbstractPostproc
{
/** @var bool Should I use the FTP layer? */
public $useFTP = false;
/** @var bool Should I use FTP over implicit SSL? */
public $useSSL = false;
/** @var bool use Passive mode? */
public $passive = true;
/** @var string FTP host name */
public $host = '';
/** @var int FTP port */
public $port = 21;
/** @var string FTP user name */
public $user = '';
/** @var string FTP password */
public $pass = '';
/** @var string FTP initial directory */
public $dir = '';
/** @var resource The FTP handle */
private $handle = null;
/** @var string The temporary directory where the data will be stored */
private $tempDir = '';
/** @var null The FTP connection handle */
private $_handle = null;
/**
* Public constructor. Tries to connect to the FTP server.
*/
public function __construct()
{
parent::__construct();
$this->useFTP = true;
$this->useSSL = AKFactory::get('kickstart.ftp.ssl', false);
$this->passive = AKFactory::get('kickstart.ftp.passive', true);
$this->host = AKFactory::get('kickstart.ftp.host', '');
$this->port = AKFactory::get('kickstart.ftp.port', 21);
$this->user = AKFactory::get('kickstart.ftp.user', '');
$this->pass = AKFactory::get('kickstart.ftp.pass', '');
$this->dir = AKFactory::get('kickstart.ftp.dir', '');
$this->tempDir = AKFactory::get('kickstart.ftp.tempdir', '');
if (trim($this->port) == '')
{
$this->port = 21;
}
// If FTP is not configured, skip it altogether
if (empty($this->host) || empty($this->user) || empty($this->pass))
{
$this->useFTP = false;
}
// Try to connect to the FTP server
$connected = $this->connect();
// If the connection fails, skip FTP altogether
if (!$connected)
{
$this->useFTP = false;
}
if ($connected)
{
if (!empty($this->tempDir))
{
$tempDir = rtrim($this->tempDir, '/\\') . '/';
$writable = $this->isDirWritable($tempDir);
}
else
{
$tempDir = '';
$writable = false;
}
if (!$writable)
{
// Default temporary directory is the current root
$tempDir = KSROOTDIR;
if (empty($tempDir))
{
// Oh, we have no directory reported!
$tempDir = '.';
}
$absoluteDirToHere = $tempDir;
$tempDir = rtrim(str_replace('\\', '/', $tempDir), '/');
if (!empty($tempDir))
{
$tempDir .= '/';
}
$this->tempDir = $tempDir;
// Is this directory writable?
$writable = $this->isDirWritable($tempDir);
}
if (!$writable)
{
// Nope. Let's try creating a temporary directory in the site's root.
$tempDir = $absoluteDirToHere . '/kicktemp';
$this->createDirRecursive($tempDir, 0777);
// Try making it writable...
$this->fixPermissions($tempDir);
$writable = $this->isDirWritable($tempDir);
}
// Was the new directory writable?
if (!$writable)
{
// Let's see if the user has specified one
$userdir = AKFactory::get('kickstart.ftp.tempdir', '');
if (!empty($userdir))
{
// Is it an absolute or a relative directory?
$absolute = false;
$absolute = $absolute || (substr($userdir, 0, 1) == '/');
$absolute = $absolute || (substr($userdir, 1, 1) == ':');
$absolute = $absolute || (substr($userdir, 2, 1) == ':');
if (!$absolute)
{
// Make absolute
$tempDir = $absoluteDirToHere . $userdir;
}
else
{
// it's already absolute
$tempDir = $userdir;
}
// Does the directory exist?
if (is_dir($tempDir))
{
// Yeah. Is it writable?
$writable = $this->isDirWritable($tempDir);
}
}
}
$this->tempDir = $tempDir;
if (!$writable)
{
// No writable directory found!!!
$this->setError(AKText::_('FTP_TEMPDIR_NOT_WRITABLE'));
}
else
{
AKFactory::set('kickstart.ftp.tempdir', $tempDir);
$this->tempDir = $tempDir;
}
}
}
/**
* Called after unserialisation, tries to reconnect to FTP
*/
function __wakeup()
{
if ($this->useFTP)
{
$this->connect();
}
}
function __destruct()
{
if (!$this->useFTP)
{
@ftp_close($this->handle);
}
}
/**
* Tries to connect to the FTP server
*
* @return bool
*/
public function connect()
{
if (!$this->useFTP)
{
return false;
}
// Connect to server, using SSL if so required
if ($this->useSSL)
{
$this->handle = @ftp_ssl_connect($this->host, $this->port);
}
else
{
$this->handle = @ftp_connect($this->host, $this->port);
}
if ($this->handle === false)
{
$this->setError(AKText::_('WRONG_FTP_HOST'));
return false;
}
// Login
if (!@ftp_login($this->handle, $this->user, $this->pass))
{
$this->setError(AKText::_('WRONG_FTP_USER'));
@ftp_close($this->handle);
return false;
}
// Change to initial directory
if (!@ftp_chdir($this->handle, $this->dir))
{
$this->setError(AKText::_('WRONG_FTP_PATH1'));
@ftp_close($this->handle);
return false;
}
// Enable passive mode if the user requested it
if ($this->passive)
{
@ftp_pasv($this->handle, true);
}
else
{
@ftp_pasv($this->handle, false);
}
// Try to download ourselves
$testFilename = defined('KSSELFNAME') ? KSSELFNAME : basename(__FILE__);
$tempHandle = fopen('php://temp', 'r+');
if (@ftp_fget($this->handle, $tempHandle, $testFilename, FTP_ASCII, 0) === false)
{
$this->setError(AKText::_('WRONG_FTP_PATH2'));
@ftp_close($this->handle);
fclose($tempHandle);
return false;
}
fclose($tempHandle);
return true;
}
/**
* Post-process an extracted file, using FTP or direct file writes to move it
*
* @return bool
*/
public function process()
{
if (is_null($this->tempFilename))
{
// If an empty filename is passed, it means that we shouldn't do any post processing, i.e.
// the entity was a directory or symlink
return true;
}
$remotePath = dirname($this->filename);
$removePath = AKFactory::get('kickstart.setup.destdir', '');
$root = rtrim($removePath, '/\\');
if (!empty($removePath))
{
$removePath = ltrim($removePath, "/");
$remotePath = ltrim($remotePath, "/");
$left = substr($remotePath, 0, strlen($removePath));
if ($left == $removePath)
{
$remotePath = substr($remotePath, strlen($removePath));
}
}
$absoluteFSPath = dirname($this->filename);
$relativeFTPPath = trim($remotePath, '/');
$absoluteFTPPath = '/' . trim($this->dir, '/') . '/' . trim($remotePath, '/');
$onlyFilename = basename($this->filename);
$remoteName = $absoluteFTPPath . '/' . $onlyFilename;
// Does the directory exist?
if (!is_dir($root . '/' . $absoluteFSPath))
{
$ret = $this->createDirRecursive($absoluteFSPath, 0755);
if (($ret === false) && ($this->useFTP))
{
$ret = @ftp_chdir($this->handle, $absoluteFTPPath);
}
if ($ret === false)
{
$this->setError(AKText::sprintf('FTP_COULDNT_UPLOAD', $this->filename));
return false;
}
}
if ($this->useFTP)
{
$ret = @ftp_chdir($this->handle, $absoluteFTPPath);
}
// Try copying directly
$ret = @copy($this->tempFilename, $root . '/' . $this->filename);
if ($ret === false)
{
$this->fixPermissions($this->filename);
$this->unlink($this->filename);
$ret = @copy($this->tempFilename, $root . '/' . $this->filename);
}
if ($this->useFTP && ($ret === false))
{
$ret = @ftp_put($this->handle, $remoteName, $this->tempFilename, FTP_BINARY);
if ($ret === false)
{
// If we couldn't create the file, attempt to fix the permissions in the PHP level and retry!
$this->fixPermissions($this->filename);
$this->unlink($this->filename);
$fp = @fopen($this->tempFilename, 'rb');
if ($fp !== false)
{
$ret = @ftp_fput($this->handle, $remoteName, $fp, FTP_BINARY);
@fclose($fp);
}
else
{
$ret = false;
}
}
}
@unlink($this->tempFilename);
if ($ret === false)
{
$this->setError(AKText::sprintf('FTP_COULDNT_UPLOAD', $this->filename));
return false;
}
$restorePerms = AKFactory::get('kickstart.setup.restoreperms', false);
$perms = $restorePerms ? $this->perms : 0644;
$ret = @chmod($root . '/' . $this->filename, $perms);
if ($this->useFTP && ($ret === false))
{
@ftp_chmod($this->_handle, $perms, $remoteName);
}
return true;
}
/**
* Create a temporary filename
*
* @param string $filename The original filename
* @param int $perms The file permissions
*
* @return string
*/
public function processFilename($filename, $perms = 0755)
{
// Catch some error conditions...
if ($this->getError())
{
return false;
}
// If a null filename is passed, it means that we shouldn't do any post processing, i.e.
// the entity was a directory or symlink
if (is_null($filename))
{
$this->filename = null;
$this->tempFilename = null;
return null;
}
// Strip absolute filesystem path to website's root
$removePath = AKFactory::get('kickstart.setup.destdir', '');
if (!empty($removePath))
{
$left = substr($filename, 0, strlen($removePath));
if ($left == $removePath)
{
$filename = substr($filename, strlen($removePath));
}
}
// Trim slash on the left
$filename = ltrim($filename, '/');
$this->filename = $filename;
$this->tempFilename = tempnam($this->tempDir, 'kickstart-');
$this->perms = $perms;
if (empty($this->tempFilename))
{
// Oops! Let's try something different
$this->tempFilename = $this->tempDir . '/kickstart-' . time() . '.dat';
}
return $this->tempFilename;
}
/**
* Is the directory writeable?
*
* @param string $dir The directory ti check
*
* @return bool
*/
private function isDirWritable($dir)
{
$fp = @fopen($dir . '/kickstart.dat', 'wb');
if ($fp === false)
{
return false;
}
@fclose($fp);
unlink($dir . '/kickstart.dat');
return true;
}
/**
* Create a directory, recursively
*
* @param string $dirName The directory to create
* @param int $perms The permissions to give to the directory
*
* @return bool
*/
public function createDirRecursive($dirName, $perms)
{
// Strip absolute filesystem path to website's root
$removePath = AKFactory::get('kickstart.setup.destdir', '');
if (!empty($removePath))
{
// UNIXize the paths
$removePath = str_replace('\\', '/', $removePath);
$dirName = str_replace('\\', '/', $dirName);
// Make sure they both end in a slash
$removePath = rtrim($removePath, '/\\') . '/';
$dirName = rtrim($dirName, '/\\') . '/';
// Process the path removal
$left = substr($dirName, 0, strlen($removePath));
if ($left == $removePath)
{
$dirName = substr($dirName, strlen($removePath));
}
}
// 'cause the substr() above may return FALSE.
if (empty($dirName))
{
$dirName = '';
}
$check = '/' . trim($this->dir, '/') . '/' . trim($dirName, '/');
$checkFS = $removePath . trim($dirName, '/');
if ($this->is_dir($check))
{
return true;
}
$alldirs = explode('/', $dirName);
$previousDir = '/' . trim($this->dir);
$previousDirFS = rtrim($removePath, '/\\');
foreach ($alldirs as $curdir)
{
$check = $previousDir . '/' . $curdir;
$checkFS = $previousDirFS . '/' . $curdir;
if (!is_dir($checkFS) && !$this->is_dir($check))
{
// Proactively try to delete a file by the same name
if (!@unlink($checkFS) && $this->useFTP)
{
@ftp_delete($this->handle, $check);
}
$createdDir = @mkdir($checkFS, 0755);
if (!$createdDir && $this->useFTP)
{
$createdDir = @ftp_mkdir($this->handle, $check);
}
if ($createdDir === false)
{
// If we couldn't create the directory, attempt to fix the permissions in the PHP level and retry!
$this->fixPermissions($checkFS);
$createdDir = @mkdir($checkFS, 0755);
if (!$createdDir && $this->useFTP)
{
$createdDir = @ftp_mkdir($this->handle, $check);
}
if ($createdDir === false)
{
$this->setError(AKText::sprintf('FTP_CANT_CREATE_DIR', $check));
return false;
}
}
if (!@chmod($checkFS, $perms) && $this->useFTP)
{
@ftp_chmod($this->handle, $perms, $check);
}
}
$previousDir = $check;
$previousDirFS = $checkFS;
}
return true;
}
/**
* Closes the FTP connection
*/
public function close()
{
if (!$this->useFTP)
{
@ftp_close($this->handle);
}
}
/**
* Tries to fix directory/file permissions in the PHP level, so that
* the FTP operation doesn't fail.
*
* @param $path string The full path to a directory or file
*/
private function fixPermissions($path)
{
// Turn off error reporting
if (!defined('KSDEBUG'))
{
$oldErrorReporting = @error_reporting(E_NONE);
}
// Get UNIX style paths
$relPath = str_replace('\\', '/', $path);
$basePath = rtrim(str_replace('\\', '/', KSROOTDIR), '/');
$basePath = rtrim($basePath, '/');
if (!empty($basePath))
{
$basePath .= '/';
}
// Remove the leading relative root
if (substr($relPath, 0, strlen($basePath)) == $basePath)
{
$relPath = substr($relPath, strlen($basePath));
}
$dirArray = explode('/', $relPath);
$pathBuilt = rtrim($basePath, '/');
foreach ($dirArray as $dir)
{
if (empty($dir))
{
continue;
}
$oldPath = $pathBuilt;
$pathBuilt .= '/' . $dir;
if (is_dir($oldPath . $dir))
{
@chmod($oldPath . $dir, 0777);
}
else
{
if (@chmod($oldPath . $dir, 0777) === false)
{
@unlink($oldPath . $dir);
}
}
}
// Restore error reporting
if (!defined('KSDEBUG'))
{
@error_reporting($oldErrorReporting);
}
}
public function chmod($file, $perms)
{
if (AKFactory::get('kickstart.setup.dryrun', '0'))
{
return true;
}
$ret = @chmod($file, $perms);
if (!$ret && $this->useFTP)
{
// Strip absolute filesystem path to website's root
$removePath = AKFactory::get('kickstart.setup.destdir', '');
if (!empty($removePath))
{
$left = substr($file, 0, strlen($removePath));
if ($left == $removePath)
{
$file = substr($file, strlen($removePath));
}
}
// Trim slash on the left
$file = ltrim($file, '/');
$ret = @ftp_chmod($this->handle, $perms, $file);
}
return $ret;
}
private function is_dir($dir)
{
if ($this->useFTP)
{
return @ftp_chdir($this->handle, $dir);
}
return false;
}
public function unlink($file)
{
$ret = @unlink($file);
if (!$ret && $this->useFTP)
{
$removePath = AKFactory::get('kickstart.setup.destdir', '');
if (!empty($removePath))
{
$left = substr($file, 0, strlen($removePath));
if ($left == $removePath)
{
$file = substr($file, strlen($removePath));
}
}
$check = '/' . trim($this->dir, '/') . '/' . trim($file, '/');
$ret = @ftp_delete($this->handle, $check);
}
return $ret;
}
public function rmdir($directory)
{
$ret = @rmdir($directory);
if (!$ret && $this->useFTP)
{
$removePath = AKFactory::get('kickstart.setup.destdir', '');
if (!empty($removePath))
{
$left = substr($directory, 0, strlen($removePath));
if ($left == $removePath)
{
$directory = substr($directory, strlen($removePath));
}
}
$check = '/' . trim($this->dir, '/') . '/' . trim($directory, '/');
$ret = @ftp_rmdir($this->handle, $check);
}
return $ret;
}
public function rename($from, $to)
{
$ret = @rename($from, $to);
if (!$ret && $this->useFTP)
{
$originalFrom = $from;
$originalTo = $to;
$removePath = AKFactory::get('kickstart.setup.destdir', '');
if (!empty($removePath))
{
$left = substr($from, 0, strlen($removePath));
if ($left == $removePath)
{
$from = substr($from, strlen($removePath));
}
}
$from = '/' . trim($this->dir, '/') . '/' . trim($from, '/');
if (!empty($removePath))
{
$left = substr($to, 0, strlen($removePath));
if ($left == $removePath)
{
$to = substr($to, strlen($removePath));
}
}
$to = '/' . trim($this->dir, '/') . '/' . trim($to, '/');
$ret = @ftp_rename($this->handle, $from, $to);
}
return $ret;
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* JPA archive extraction class
*/
class AKUnarchiverJPA extends AKAbstractUnarchiver
{
protected $archiveHeaderData = array();
protected function readArchiveHeader()
{
debugMsg('Preparing to read archive header');
// Initialize header data array
$this->archiveHeaderData = new stdClass();
// Open the first part
debugMsg('Opening the first part');
$this->nextFile();
// Fail for unreadable files
if( $this->fp === false ) {
debugMsg('Could not open the first part');
return false;
}
// Read the signature
$sig = fread( $this->fp, 3 );
if ($sig != 'JPA')
{
// Not a JPA file
debugMsg('Invalid archive signature');
$this->setError( AKText::_('ERR_NOT_A_JPA_FILE') );
return false;
}
// Read and parse header length
$header_length_array = unpack( 'v', fread( $this->fp, 2 ) );
$header_length = $header_length_array[1];
// Read and parse the known portion of header data (14 bytes)
$bin_data = fread($this->fp, 14);
$header_data = unpack('Cmajor/Cminor/Vcount/Vuncsize/Vcsize', $bin_data);
// Load any remaining header data (forward compatibility)
$rest_length = $header_length - 19;
if( $rest_length > 0 )
$junk = fread($this->fp, $rest_length);
else
$junk = '';
// Temporary array with all the data we read
$temp = array(
'signature' => $sig,
'length' => $header_length,
'major' => $header_data['major'],
'minor' => $header_data['minor'],
'filecount' => $header_data['count'],
'uncompressedsize' => $header_data['uncsize'],
'compressedsize' => $header_data['csize'],
'unknowndata' => $junk
);
// Array-to-object conversion
foreach($temp as $key => $value)
{
$this->archiveHeaderData->{$key} = $value;
}
debugMsg('Header data:');
debugMsg('Length : '.$header_length);
debugMsg('Major : '.$header_data['major']);
debugMsg('Minor : '.$header_data['minor']);
debugMsg('File count : '.$header_data['count']);
debugMsg('Uncompressed size : '.$header_data['uncsize']);
debugMsg('Compressed size : '.$header_data['csize']);
$this->currentPartOffset = @ftell($this->fp);
$this->dataReadLength = 0;
return true;
}
/**
* Concrete classes must use this method to read the file header
* @return bool True if reading the file was successful, false if an error occured or we reached end of archive
*/
protected function readFileHeader()
{
// If the current part is over, proceed to the next part please
if( $this->isEOF(true) ) {
debugMsg('Archive part EOF; moving to next file');
$this->nextFile();
}
debugMsg('Reading file signature');
// Get and decode Entity Description Block
$signature = fread($this->fp, 3);
$this->fileHeader = new stdClass();
$this->fileHeader->timestamp = 0;
// Check signature
if( $signature != 'JPF' )
{
if($this->isEOF(true))
{
// This file is finished; make sure it's the last one
$this->nextFile();
if(!$this->isEOF(false))
{
debugMsg('Invalid file signature before end of archive encountered');
$this->setError(AKText::sprintf('INVALID_FILE_HEADER', $this->currentPartNumber, $this->currentPartOffset));
return false;
}
// We're just finished
return false;
}
else
{
$screwed = true;
if(AKFactory::get('kickstart.setup.ignoreerrors', false)) {
debugMsg('Invalid file block signature; launching heuristic file block signature scanner');
$screwed = !$this->heuristicFileHeaderLocator();
if(!$screwed) {
$signature = 'JPF';
} else {
debugMsg('Heuristics failed. Brace yourself for the imminent crash.');
}
}
if($screwed) {
debugMsg('Invalid file block signature');
// This is not a file block! The archive is corrupt.
$this->setError(AKText::sprintf('INVALID_FILE_HEADER', $this->currentPartNumber, $this->currentPartOffset));
return false;
}
}
}
// This a JPA Entity Block. Process the header.
$isBannedFile = false;
// Read length of EDB and of the Entity Path Data
$length_array = unpack('vblocksize/vpathsize', fread($this->fp, 4));
// Read the path data
if($length_array['pathsize'] > 0) {
$file = fread( $this->fp, $length_array['pathsize'] );
} else {
$file = '';
}
// Handle file renaming
$isRenamed = false;
if(is_array($this->renameFiles) && (count($this->renameFiles) > 0) )
{
if(array_key_exists($file, $this->renameFiles))
{
$file = $this->renameFiles[$file];
$isRenamed = true;
}
}
// Handle directory renaming
$isDirRenamed = false;
if(is_array($this->renameDirs) && (count($this->renameDirs) > 0)) {
if(array_key_exists(dirname($file), $this->renameDirs)) {
$file = rtrim($this->renameDirs[dirname($file)],'/').'/'.basename($file);
$isRenamed = true;
$isDirRenamed = true;
}
}
// Read and parse the known data portion
$bin_data = fread( $this->fp, 14 );
$header_data = unpack('Ctype/Ccompression/Vcompsize/Vuncompsize/Vperms', $bin_data);
// Read any unknown data
$restBytes = $length_array['blocksize'] - (21 + $length_array['pathsize']);
if( $restBytes > 0 )
{
// Start reading the extra fields
while($restBytes >= 4)
{
$extra_header_data = fread($this->fp, 4);
$extra_header = unpack('vsignature/vlength', $extra_header_data);
$restBytes -= 4;
$extra_header['length'] -= 4;
switch($extra_header['signature'])
{
case 256:
// File modified timestamp
if($extra_header['length'] > 0)
{
$bindata = fread($this->fp, $extra_header['length']);
$restBytes -= $extra_header['length'];
$timestamps = unpack('Vmodified', substr($bindata,0,4));
$filectime = $timestamps['modified'];
$this->fileHeader->timestamp = $filectime;
}
break;
default:
// Unknown field
if($extra_header['length']>0) {
$junk = fread($this->fp, $extra_header['length']);
$restBytes -= $extra_header['length'];
}
break;
}
}
if($restBytes > 0) $junk = fread($this->fp, $restBytes);
}
$compressionType = $header_data['compression'];
// Populate the return array
$this->fileHeader->file = $file;
$this->fileHeader->compressed = $header_data['compsize'];
$this->fileHeader->uncompressed = $header_data['uncompsize'];
switch($header_data['type'])
{
case 0:
$this->fileHeader->type = 'dir';
break;
case 1:
$this->fileHeader->type = 'file';
break;
case 2:
$this->fileHeader->type = 'link';
break;
}
switch( $compressionType )
{
case 0:
$this->fileHeader->compression = 'none';
break;
case 1:
$this->fileHeader->compression = 'gzip';
break;
case 2:
$this->fileHeader->compression = 'bzip2';
break;
}
$this->fileHeader->permissions = $header_data['perms'];
// Find hard-coded banned files
if( (basename($this->fileHeader->file) == ".") || (basename($this->fileHeader->file) == "..") )
{
$isBannedFile = true;
}
// Also try to find banned files passed in class configuration
if((count($this->skipFiles) > 0) && (!$isRenamed) )
{
if(in_array($this->fileHeader->file, $this->skipFiles))
{
$isBannedFile = true;
}
}
// If we have a banned file, let's skip it
if($isBannedFile)
{
debugMsg('Skipping file '.$this->fileHeader->file);
// Advance the file pointer, skipping exactly the size of the compressed data
$seekleft = $this->fileHeader->compressed;
while($seekleft > 0)
{
// Ensure that we can seek past archive part boundaries
$curSize = @filesize($this->archiveList[$this->currentPartNumber]);
$curPos = @ftell($this->fp);
$canSeek = $curSize - $curPos;
if($canSeek > $seekleft) $canSeek = $seekleft;
@fseek( $this->fp, $canSeek, SEEK_CUR );
$seekleft -= $canSeek;
if($seekleft) $this->nextFile();
}
$this->currentPartOffset = @ftell($this->fp);
$this->runState = AK_STATE_DONE;
return true;
}
// Last chance to prepend a path to the filename
if(!empty($this->addPath) && !$isDirRenamed)
{
$this->fileHeader->file = $this->addPath.$this->fileHeader->file;
}
// Get the translated path name
$restorePerms = AKFactory::get('kickstart.setup.restoreperms', false);
if($this->fileHeader->type == 'file')
{
// Regular file; ask the postproc engine to process its filename
if($restorePerms)
{
$this->fileHeader->realFile = $this->postProcEngine->processFilename( $this->fileHeader->file, $this->fileHeader->permissions );
}
else
{
$this->fileHeader->realFile = $this->postProcEngine->processFilename( $this->fileHeader->file );
}
}
elseif($this->fileHeader->type == 'dir')
{
$dir = $this->fileHeader->file;
// Directory; just create it
if($restorePerms)
{
$this->postProcEngine->createDirRecursive( $this->fileHeader->file, $this->fileHeader->permissions );
}
else
{
$this->postProcEngine->createDirRecursive( $this->fileHeader->file, 0755 );
}
$this->postProcEngine->processFilename(null);
}
else
{
// Symlink; do not post-process
$this->postProcEngine->processFilename(null);
}
$this->createDirectory();
// Header is read
$this->runState = AK_STATE_HEADER;
$this->dataReadLength = 0;
return true;
}
/**
* Concrete classes must use this method to process file data. It must set $runState to AK_STATE_DATAREAD when
* it's finished processing the file data.
* @return bool True if processing the file data was successful, false if an error occured
*/
protected function processFileData()
{
switch( $this->fileHeader->type )
{
case 'dir':
return $this->processTypeDir();
break;
case 'link':
return $this->processTypeLink();
break;
case 'file':
switch($this->fileHeader->compression)
{
case 'none':
return $this->processTypeFileUncompressed();
break;
case 'gzip':
case 'bzip2':
return $this->processTypeFileCompressedSimple();
break;
}
break;
default:
debugMsg('Unknown file type '.$this->fileHeader->type);
break;
}
}
private function processTypeFileUncompressed()
{
// Uncompressed files are being processed in small chunks, to avoid timeouts
if( ($this->dataReadLength == 0) && !AKFactory::get('kickstart.setup.dryrun','0') )
{
// Before processing file data, ensure permissions are adequate
$this->setCorrectPermissions( $this->fileHeader->file );
}
// Open the output file
if( !AKFactory::get('kickstart.setup.dryrun','0') )
{
$ignore = AKFactory::get('kickstart.setup.ignoreerrors', false) || $this->isIgnoredDirectory($this->fileHeader->file);
if ($this->dataReadLength == 0) {
$outfp = @fopen( $this->fileHeader->realFile, 'wb' );
} else {
$outfp = @fopen( $this->fileHeader->realFile, 'ab' );
}
// Can we write to the file?
if( ($outfp === false) && (!$ignore) ) {
// An error occured
debugMsg('Could not write to output file');
$this->setError( AKText::sprintf('COULDNT_WRITE_FILE', $this->fileHeader->realFile) );
return false;
}
}
// Does the file have any data, at all?
if( $this->fileHeader->compressed == 0 )
{
// No file data!
if( !AKFactory::get('kickstart.setup.dryrun','0') && is_resource($outfp) ) @fclose($outfp);
$this->runState = AK_STATE_DATAREAD;
return true;
}
// Reference to the global timer
$timer = AKFactory::getTimer();
$toReadBytes = 0;
$leftBytes = $this->fileHeader->compressed - $this->dataReadLength;
// Loop while there's data to read and enough time to do it
while( ($leftBytes > 0) && ($timer->getTimeLeft() > 0) )
{
$toReadBytes = ($leftBytes > $this->chunkSize) ? $this->chunkSize : $leftBytes;
$data = $this->fread( $this->fp, $toReadBytes );
$reallyReadBytes = akstringlen($data);
$leftBytes -= $reallyReadBytes;
$this->dataReadLength += $reallyReadBytes;
if($reallyReadBytes < $toReadBytes)
{
// We read less than requested! Why? Did we hit local EOF?
if( $this->isEOF(true) && !$this->isEOF(false) )
{
// Yeap. Let's go to the next file
$this->nextFile();
}
else
{
// Nope. The archive is corrupt
debugMsg('Not enough data in file. The archive is truncated or corrupt.');
$this->setError( AKText::_('ERR_CORRUPT_ARCHIVE') );
return false;
}
}
if( !AKFactory::get('kickstart.setup.dryrun','0') )
if(is_resource($outfp)) @fwrite( $outfp, $data );
}
// Close the file pointer
if( !AKFactory::get('kickstart.setup.dryrun','0') )
if(is_resource($outfp)) @fclose($outfp);
// Was this a pre-timeout bail out?
if( $leftBytes > 0 )
{
$this->runState = AK_STATE_DATA;
}
else
{
// Oh! We just finished!
$this->runState = AK_STATE_DATAREAD;
$this->dataReadLength = 0;
}
return true;
}
private function processTypeFileCompressedSimple()
{
if( !AKFactory::get('kickstart.setup.dryrun','0') )
{
// Before processing file data, ensure permissions are adequate
$this->setCorrectPermissions( $this->fileHeader->file );
// Open the output file
$outfp = @fopen( $this->fileHeader->realFile, 'wb' );
// Can we write to the file?
$ignore = AKFactory::get('kickstart.setup.ignoreerrors', false) || $this->isIgnoredDirectory($this->fileHeader->file);
if( ($outfp === false) && (!$ignore) ) {
// An error occured
debugMsg('Could not write to output file');
$this->setError( AKText::sprintf('COULDNT_WRITE_FILE', $this->fileHeader->realFile) );
return false;
}
}
// Does the file have any data, at all?
if( $this->fileHeader->compressed == 0 )
{
// No file data!
if( !AKFactory::get('kickstart.setup.dryrun','0') )
if(is_resource($outfp)) @fclose($outfp);
$this->runState = AK_STATE_DATAREAD;
return true;
}
// Simple compressed files are processed as a whole; we can't do chunk processing
$zipData = $this->fread( $this->fp, $this->fileHeader->compressed );
while( akstringlen($zipData) < $this->fileHeader->compressed )
{
// End of local file before reading all data, but have more archive parts?
if($this->isEOF(true) && !$this->isEOF(false))
{
// Yeap. Read from the next file
$this->nextFile();
$bytes_left = $this->fileHeader->compressed - akstringlen($zipData);
$zipData .= $this->fread( $this->fp, $bytes_left );
}
else
{
debugMsg('End of local file before reading all data with no more parts left. The archive is corrupt or truncated.');
$this->setError( AKText::_('ERR_CORRUPT_ARCHIVE') );
return false;
}
}
if($this->fileHeader->compression == 'gzip')
{
$unzipData = gzinflate( $zipData );
}
elseif($this->fileHeader->compression == 'bzip2')
{
$unzipData = bzdecompress( $zipData );
}
unset($zipData);
// Write to the file.
if( !AKFactory::get('kickstart.setup.dryrun','0') && is_resource($outfp) )
{
@fwrite( $outfp, $unzipData, $this->fileHeader->uncompressed );
@fclose( $outfp );
}
unset($unzipData);
$this->runState = AK_STATE_DATAREAD;
return true;
}
/**
* Process the file data of a link entry
* @return bool
*/
private function processTypeLink()
{
$readBytes = 0;
$toReadBytes = 0;
$leftBytes = $this->fileHeader->compressed;
$data = '';
while( $leftBytes > 0)
{
$toReadBytes = ($leftBytes > $this->chunkSize) ? $this->chunkSize : $leftBytes;
$mydata = $this->fread( $this->fp, $toReadBytes );
$reallyReadBytes = akstringlen($mydata);
$data .= $mydata;
$leftBytes -= $reallyReadBytes;
if($reallyReadBytes < $toReadBytes)
{
// We read less than requested! Why? Did we hit local EOF?
if( $this->isEOF(true) && !$this->isEOF(false) )
{
// Yeap. Let's go to the next file
$this->nextFile();
}
else
{
debugMsg('End of local file before reading all data with no more parts left. The archive is corrupt or truncated.');
// Nope. The archive is corrupt
$this->setError( AKText::_('ERR_CORRUPT_ARCHIVE') );
return false;
}
}
}
// Try to remove an existing file or directory by the same name
if(file_exists($this->fileHeader->realFile)) { @unlink($this->fileHeader->realFile); @rmdir($this->fileHeader->realFile); }
// Remove any trailing slash
if(substr($this->fileHeader->realFile, -1) == '/') $this->fileHeader->realFile = substr($this->fileHeader->realFile, 0, -1);
// Create the symlink - only possible within PHP context. There's no support built in the FTP protocol, so no postproc use is possible here :(
if( !AKFactory::get('kickstart.setup.dryrun','0') )
@symlink($data, $this->fileHeader->realFile);
$this->runState = AK_STATE_DATAREAD;
return true; // No matter if the link was created!
}
/**
* Process the file data of a directory entry
* @return bool
*/
private function processTypeDir()
{
// Directory entries in the JPA do not have file data, therefore we're done processing the entry
$this->runState = AK_STATE_DATAREAD;
return true;
}
/**
* Creates the directory this file points to
*/
protected function createDirectory()
{
if( AKFactory::get('kickstart.setup.dryrun','0') ) return true;
// Do we need to create a directory?
if(empty($this->fileHeader->realFile)) $this->fileHeader->realFile = $this->fileHeader->file;
$lastSlash = strrpos($this->fileHeader->realFile, '/');
$dirName = substr( $this->fileHeader->realFile, 0, $lastSlash);
$perms = $this->flagRestorePermissions ? $this->fileHeader->permissions : 0755;
$ignore = AKFactory::get('kickstart.setup.ignoreerrors', false) || $this->isIgnoredDirectory($dirName);
if( ($this->postProcEngine->createDirRecursive($dirName, $perms) == false) && (!$ignore) ) {
$this->setError( AKText::sprintf('COULDNT_CREATE_DIR', $dirName) );
return false;
}
else
{
return true;
}
}
protected function heuristicFileHeaderLocator()
{
$ret = false;
$fullEOF = false;
while(!$ret && !$fullEOF) {
$this->currentPartOffset = @ftell($this->fp);
if($this->isEOF(true)) {
$this->nextFile();
}
if($this->isEOF(false)) {
$fullEOF = true;
continue;
}
// Read 512Kb
$chunk = fread($this->fp, 524288);
$size_read = mb_strlen($chunk,'8bit');
//$pos = strpos($chunk, 'JPF');
$pos = mb_strpos($chunk, 'JPF', 0, '8bit');
if($pos !== false) {
// We found it!
$this->currentPartOffset += $pos + 3;
@fseek($this->fp, $this->currentPartOffset, SEEK_SET);
$ret = true;
} else {
// Not yet found :(
$this->currentPartOffset = @ftell($this->fp);
}
}
return $ret;
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* ZIP archive extraction class
*
* Since the file data portion of ZIP and JPA are similarly structured (it's empty for dirs,
* linked node name for symlinks, dumped binary data for no compressions and dumped gzipped
* binary data for gzip compression) we just have to subclass AKUnarchiverJPA and change the
* header reading bits. Reusable code ;)
*/
class AKUnarchiverZIP extends AKUnarchiverJPA
{
var $expectDataDescriptor = false;
protected function readArchiveHeader()
{
debugMsg('Preparing to read archive header');
// Initialize header data array
$this->archiveHeaderData = new stdClass();
// Open the first part
debugMsg('Opening the first part');
$this->nextFile();
// Fail for unreadable files
if( $this->fp === false ) {
debugMsg('The first part is not readable');
return false;
}
// Read a possible multipart signature
$sigBinary = fread( $this->fp, 4 );
$headerData = unpack('Vsig', $sigBinary);
// Roll back if it's not a multipart archive
if( $headerData['sig'] == 0x04034b50 ) {
debugMsg('The archive is not multipart');
fseek($this->fp, -4, SEEK_CUR);
} else {
debugMsg('The archive is multipart');
}
$multiPartSigs = array(
0x08074b50, // Multi-part ZIP
0x30304b50, // Multi-part ZIP (alternate)
0x04034b50 // Single file
);
if( !in_array($headerData['sig'], $multiPartSigs) )
{
debugMsg('Invalid header signature '.dechex($headerData['sig']));
$this->setError(AKText::_('ERR_CORRUPT_ARCHIVE'));
return false;
}
$this->currentPartOffset = @ftell($this->fp);
debugMsg('Current part offset after reading header: '.$this->currentPartOffset);
$this->dataReadLength = 0;
return true;
}
/**
* Concrete classes must use this method to read the file header
* @return bool True if reading the file was successful, false if an error occured or we reached end of archive
*/
protected function readFileHeader()
{
// If the current part is over, proceed to the next part please
if( $this->isEOF(true) ) {
debugMsg('Opening next archive part');
$this->nextFile();
}
if($this->expectDataDescriptor)
{
// The last file had bit 3 of the general purpose bit flag set. This means that we have a
// 12 byte data descriptor we need to skip. To make things worse, there might also be a 4
// byte optional data descriptor header (0x08074b50).
$junk = @fread($this->fp, 4);
$junk = unpack('Vsig', $junk);
if($junk['sig'] == 0x08074b50) {
// Yes, there was a signature
$junk = @fread($this->fp, 12);
debugMsg('Data descriptor (w/ header) skipped at '.(ftell($this->fp)-12));
} else {
// No, there was no signature, just read another 8 bytes
$junk = @fread($this->fp, 8);
debugMsg('Data descriptor (w/out header) skipped at '.(ftell($this->fp)-8));
}
// And check for EOF, too
if( $this->isEOF(true) ) {
debugMsg('EOF before reading header');
$this->nextFile();
}
}
// Get and decode Local File Header
$headerBinary = fread($this->fp, 30);
$headerData = unpack('Vsig/C2ver/vbitflag/vcompmethod/vlastmodtime/vlastmoddate/Vcrc/Vcompsize/Vuncomp/vfnamelen/veflen', $headerBinary);
// Check signature
if(!( $headerData['sig'] == 0x04034b50 ))
{
debugMsg('Not a file signature at '.(ftell($this->fp)-4));
// The signature is not the one used for files. Is this a central directory record (i.e. we're done)?
if($headerData['sig'] == 0x02014b50)
{
debugMsg('EOCD signature at '.(ftell($this->fp)-4));
// End of ZIP file detected. We'll just skip to the end of file...
while( $this->nextFile() ) {};
@fseek($this->fp, 0, SEEK_END); // Go to EOF
return false;
}
else
{
debugMsg( 'Invalid signature ' . dechex($headerData['sig']) . ' at '.ftell($this->fp) );
$this->setError(AKText::_('ERR_CORRUPT_ARCHIVE'));
return false;
}
}
// If bit 3 of the bitflag is set, expectDataDescriptor is true
$this->expectDataDescriptor = ($headerData['bitflag'] & 4) == 4;
$this->fileHeader = new stdClass();
$this->fileHeader->timestamp = 0;
// Read the last modified data and time
$lastmodtime = $headerData['lastmodtime'];
$lastmoddate = $headerData['lastmoddate'];
if($lastmoddate && $lastmodtime)
{
// ----- Extract time
$v_hour = ($lastmodtime & 0xF800) >> 11;
$v_minute = ($lastmodtime & 0x07E0) >> 5;
$v_seconde = ($lastmodtime & 0x001F)*2;
// ----- Extract date
$v_year = (($lastmoddate & 0xFE00) >> 9) + 1980;
$v_month = ($lastmoddate & 0x01E0) >> 5;
$v_day = $lastmoddate & 0x001F;
// ----- Get UNIX date format
$this->fileHeader->timestamp = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
}
$isBannedFile = false;
$this->fileHeader->compressed = $headerData['compsize'];
$this->fileHeader->uncompressed = $headerData['uncomp'];
$nameFieldLength = $headerData['fnamelen'];
$extraFieldLength = $headerData['eflen'];
// Read filename field
$this->fileHeader->file = fread( $this->fp, $nameFieldLength );
// Handle file renaming
$isRenamed = false;
if(is_array($this->renameFiles) && (count($this->renameFiles) > 0) )
{
if(array_key_exists($this->fileHeader->file, $this->renameFiles))
{
$this->fileHeader->file = $this->renameFiles[$this->fileHeader->file];
$isRenamed = true;
}
}
// Handle directory renaming
$isDirRenamed = false;
if(is_array($this->renameDirs) && (count($this->renameDirs) > 0)) {
if(array_key_exists(dirname($this->fileHeader->file), $this->renameDirs)) {
$file = rtrim($this->renameDirs[dirname($this->fileHeader->file)],'/').'/'.basename($this->fileHeader->file);
$isRenamed = true;
$isDirRenamed = true;
}
}
// Read extra field if present
if($extraFieldLength > 0) {
$extrafield = fread( $this->fp, $extraFieldLength );
}
debugMsg( '*'.ftell($this->fp).' IS START OF '.$this->fileHeader->file. ' ('.$this->fileHeader->compressed.' bytes)' );
// Decide filetype -- Check for directories
$this->fileHeader->type = 'file';
if( strrpos($this->fileHeader->file, '/') == strlen($this->fileHeader->file) - 1 ) $this->fileHeader->type = 'dir';
// Decide filetype -- Check for symbolic links
if( ($headerData['ver1'] == 10) && ($headerData['ver2'] == 3) )$this->fileHeader->type = 'link';
switch( $headerData['compmethod'] )
{
case 0:
$this->fileHeader->compression = 'none';
break;
case 8:
$this->fileHeader->compression = 'gzip';
break;
}
// Find hard-coded banned files
if( (basename($this->fileHeader->file) == ".") || (basename($this->fileHeader->file) == "..") )
{
$isBannedFile = true;
}
// Also try to find banned files passed in class configuration
if((count($this->skipFiles) > 0) && (!$isRenamed))
{
if(in_array($this->fileHeader->file, $this->skipFiles))
{
$isBannedFile = true;
}
}
// If we have a banned file, let's skip it
if($isBannedFile)
{
// Advance the file pointer, skipping exactly the size of the compressed data
$seekleft = $this->fileHeader->compressed;
while($seekleft > 0)
{
// Ensure that we can seek past archive part boundaries
$curSize = @filesize($this->archiveList[$this->currentPartNumber]);
$curPos = @ftell($this->fp);
$canSeek = $curSize - $curPos;
if($canSeek > $seekleft) $canSeek = $seekleft;
@fseek( $this->fp, $canSeek, SEEK_CUR );
$seekleft -= $canSeek;
if($seekleft) $this->nextFile();
}
$this->currentPartOffset = @ftell($this->fp);
$this->runState = AK_STATE_DONE;
return true;
}
// Last chance to prepend a path to the filename
if(!empty($this->addPath) && !$isDirRenamed)
{
$this->fileHeader->file = $this->addPath.$this->fileHeader->file;
}
// Get the translated path name
if($this->fileHeader->type == 'file')
{
$this->fileHeader->realFile = $this->postProcEngine->processFilename( $this->fileHeader->file );
}
elseif($this->fileHeader->type == 'dir')
{
$this->fileHeader->timestamp = 0;
$dir = $this->fileHeader->file;
$this->postProcEngine->createDirRecursive( $this->fileHeader->file, 0755 );
$this->postProcEngine->processFilename(null);
}
else
{
// Symlink; do not post-process
$this->fileHeader->timestamp = 0;
$this->postProcEngine->processFilename(null);
}
$this->createDirectory();
// Header is read
$this->runState = AK_STATE_HEADER;
return true;
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* JPS archive extraction class
*/
class AKUnarchiverJPS extends AKUnarchiverJPA
{
protected $archiveHeaderData = array();
protected $password = '';
public function __construct()
{
parent::__construct();
$this->password = AKFactory::get('kickstart.jps.password','');
}
protected function readArchiveHeader()
{
// Initialize header data array
$this->archiveHeaderData = new stdClass();
// Open the first part
$this->nextFile();
// Fail for unreadable files
if( $this->fp === false ) return false;
// Read the signature
$sig = fread( $this->fp, 3 );
if ($sig != 'JPS')
{
// Not a JPA file
$this->setError( AKText::_('ERR_NOT_A_JPS_FILE') );
return false;
}
// Read and parse the known portion of header data (5 bytes)
$bin_data = fread($this->fp, 5);
$header_data = unpack('Cmajor/Cminor/cspanned/vextra', $bin_data);
// Load any remaining header data (forward compatibility)
$rest_length = $header_data['extra'];
if( $rest_length > 0 )
$junk = fread($this->fp, $rest_length);
else
$junk = '';
// Temporary array with all the data we read
$temp = array(
'signature' => $sig,
'major' => $header_data['major'],
'minor' => $header_data['minor'],
'spanned' => $header_data['spanned']
);
// Array-to-object conversion
foreach($temp as $key => $value)
{
$this->archiveHeaderData->{$key} = $value;
}
$this->currentPartOffset = @ftell($this->fp);
$this->dataReadLength = 0;
return true;
}
/**
* Concrete classes must use this method to read the file header
* @return bool True if reading the file was successful, false if an error occured or we reached end of archive
*/
protected function readFileHeader()
{
// If the current part is over, proceed to the next part please
if( $this->isEOF(true) ) {
$this->nextFile();
}
// Get and decode Entity Description Block
$signature = fread($this->fp, 3);
// Check for end-of-archive siganture
if($signature == 'JPE')
{
$this->setState('postrun');
return true;
}
$this->fileHeader = new stdClass();
$this->fileHeader->timestamp = 0;
// Check signature
if( $signature != 'JPF' )
{
if($this->isEOF(true))
{
// This file is finished; make sure it's the last one
$this->nextFile();
if(!$this->isEOF(false))
{
$this->setError(AKText::sprintf('INVALID_FILE_HEADER', $this->currentPartNumber, $this->currentPartOffset));
return false;
}
// We're just finished
return false;
}
else
{
fseek($this->fp, -6, SEEK_CUR);
$signature = fread($this->fp, 3);
if($signature == 'JPE')
{
return false;
}
$this->setError(AKText::sprintf('INVALID_FILE_HEADER', $this->currentPartNumber, $this->currentPartOffset));
return false;
}
}
// This a JPA Entity Block. Process the header.
$isBannedFile = false;
// Read and decrypt the header
$edbhData = fread($this->fp, 4);
$edbh = unpack('vencsize/vdecsize', $edbhData);
$bin_data = fread($this->fp, $edbh['encsize']);
// Decrypt and truncate
$bin_data = AKEncryptionAES::AESDecryptCBC($bin_data, $this->password, 128);
$bin_data = substr($bin_data,0,$edbh['decsize']);
// Read length of EDB and of the Entity Path Data
$length_array = unpack('vpathsize', substr($bin_data,0,2) );
// Read the path data
$file = substr($bin_data,2,$length_array['pathsize']);
// Handle file renaming
$isRenamed = false;
if(is_array($this->renameFiles) && (count($this->renameFiles) > 0) )
{
if(array_key_exists($file, $this->renameFiles))
{
$file = $this->renameFiles[$file];
$isRenamed = true;
}
}
// Handle directory renaming
$isDirRenamed = false;
if(is_array($this->renameDirs) && (count($this->renameDirs) > 0)) {
if(array_key_exists(dirname($file), $this->renameDirs)) {
$file = rtrim($this->renameDirs[dirname($file)],'/').'/'.basename($file);
$isRenamed = true;
$isDirRenamed = true;
}
}
// Read and parse the known data portion
$bin_data = substr($bin_data, 2 + $length_array['pathsize']);
$header_data = unpack('Ctype/Ccompression/Vuncompsize/Vperms/Vfilectime', $bin_data);
$this->fileHeader->timestamp = $header_data['filectime'];
$compressionType = $header_data['compression'];
// Populate the return array
$this->fileHeader->file = $file;
$this->fileHeader->uncompressed = $header_data['uncompsize'];
switch($header_data['type'])
{
case 0:
$this->fileHeader->type = 'dir';
break;
case 1:
$this->fileHeader->type = 'file';
break;
case 2:
$this->fileHeader->type = 'link';
break;
}
switch( $compressionType )
{
case 0:
$this->fileHeader->compression = 'none';
break;
case 1:
$this->fileHeader->compression = 'gzip';
break;
case 2:
$this->fileHeader->compression = 'bzip2';
break;
}
$this->fileHeader->permissions = $header_data['perms'];
// Find hard-coded banned files
if( (basename($this->fileHeader->file) == ".") || (basename($this->fileHeader->file) == "..") )
{
$isBannedFile = true;
}
// Also try to find banned files passed in class configuration
if((count($this->skipFiles) > 0) && (!$isRenamed) )
{
if(in_array($this->fileHeader->file, $this->skipFiles))
{
$isBannedFile = true;
}
}
// If we have a banned file, let's skip it
if($isBannedFile)
{
$done = false;
while(!$done)
{
// Read the Data Chunk Block header
$binMiniHead = fread($this->fp, 8);
if( in_array( substr($binMiniHead,0,3), array('JPF','JPE') ) )
{
// Not a Data Chunk Block header, I am done skipping the file
@fseek($this->fp,-8,SEEK_CUR); // Roll back the file pointer
$done = true; // Mark as done
continue; // Exit loop
}
else
{
// Skip forward by the amount of compressed data
$miniHead = unpack('Vencsize/Vdecsize', $binMiniHead);
@fseek($this->fp, $miniHead['encsize'], SEEK_CUR);
}
}
$this->currentPartOffset = @ftell($this->fp);
$this->runState = AK_STATE_DONE;
return true;
}
// Last chance to prepend a path to the filename
if(!empty($this->addPath) && !$isDirRenamed)
{
$this->fileHeader->file = $this->addPath.$this->fileHeader->file;
}
// Get the translated path name
$restorePerms = AKFactory::get('kickstart.setup.restoreperms', false);
if($this->fileHeader->type == 'file')
{
// Regular file; ask the postproc engine to process its filename
if($restorePerms)
{
$this->fileHeader->realFile = $this->postProcEngine->processFilename( $this->fileHeader->file, $this->fileHeader->permissions );
}
else
{
$this->fileHeader->realFile = $this->postProcEngine->processFilename( $this->fileHeader->file );
}
}
elseif($this->fileHeader->type == 'dir')
{
$dir = $this->fileHeader->file;
$this->fileHeader->realFile = $dir;
// Directory; just create it
if($restorePerms)
{
$this->postProcEngine->createDirRecursive( $this->fileHeader->file, $this->fileHeader->permissions );
}
else
{
$this->postProcEngine->createDirRecursive( $this->fileHeader->file, 0755 );
}
$this->postProcEngine->processFilename(null);
}
else
{
// Symlink; do not post-process
$this->postProcEngine->processFilename(null);
}
$this->createDirectory();
// Header is read
$this->runState = AK_STATE_HEADER;
$this->dataReadLength = 0;
return true;
}
/**
* Concrete classes must use this method to process file data. It must set $runState to AK_STATE_DATAREAD when
* it's finished processing the file data.
* @return bool True if processing the file data was successful, false if an error occured
*/
protected function processFileData()
{
switch( $this->fileHeader->type )
{
case 'dir':
return $this->processTypeDir();
break;
case 'link':
return $this->processTypeLink();
break;
case 'file':
switch($this->fileHeader->compression)
{
case 'none':
return $this->processTypeFileUncompressed();
break;
case 'gzip':
case 'bzip2':
return $this->processTypeFileCompressedSimple();
break;
}
break;
}
}
private function processTypeFileUncompressed()
{
// Uncompressed files are being processed in small chunks, to avoid timeouts
if( ($this->dataReadLength == 0) && !AKFactory::get('kickstart.setup.dryrun','0') )
{
// Before processing file data, ensure permissions are adequate
$this->setCorrectPermissions( $this->fileHeader->file );
}
// Open the output file
if( !AKFactory::get('kickstart.setup.dryrun','0') )
{
$ignore = AKFactory::get('kickstart.setup.ignoreerrors', false) || $this->isIgnoredDirectory($this->fileHeader->file);
if ($this->dataReadLength == 0) {
$outfp = @fopen( $this->fileHeader->realFile, 'wb' );
} else {
$outfp = @fopen( $this->fileHeader->realFile, 'ab' );
}
// Can we write to the file?
if( ($outfp === false) && (!$ignore) ) {
// An error occured
$this->setError( AKText::sprintf('COULDNT_WRITE_FILE', $this->fileHeader->realFile) );
return false;
}
}
// Does the file have any data, at all?
if( $this->fileHeader->uncompressed == 0 )
{
// No file data!
if( !AKFactory::get('kickstart.setup.dryrun','0') && is_resource($outfp) ) @fclose($outfp);
$this->runState = AK_STATE_DATAREAD;
return true;
}
else
{
$this->setError('An uncompressed file was detected; this is not supported by this archive extraction utility');
return false;
}
return true;
}
private function processTypeFileCompressedSimple()
{
$timer = AKFactory::getTimer();
// Files are being processed in small chunks, to avoid timeouts
if( ($this->dataReadLength == 0) && !AKFactory::get('kickstart.setup.dryrun','0') )
{
// Before processing file data, ensure permissions are adequate
$this->setCorrectPermissions( $this->fileHeader->file );
}
// Open the output file
if( !AKFactory::get('kickstart.setup.dryrun','0') )
{
// Open the output file
$outfp = @fopen( $this->fileHeader->realFile, 'wb' );
// Can we write to the file?
$ignore = AKFactory::get('kickstart.setup.ignoreerrors', false) || $this->isIgnoredDirectory($this->fileHeader->file);
if( ($outfp === false) && (!$ignore) ) {
// An error occured
$this->setError( AKText::sprintf('COULDNT_WRITE_FILE', $this->fileHeader->realFile) );
return false;
}
}
// Does the file have any data, at all?
if( $this->fileHeader->uncompressed == 0 )
{
// No file data!
if( !AKFactory::get('kickstart.setup.dryrun','0') )
if(is_resource($outfp)) @fclose($outfp);
$this->runState = AK_STATE_DATAREAD;
return true;
}
$leftBytes = $this->fileHeader->uncompressed - $this->dataReadLength;
// Loop while there's data to write and enough time to do it
while( ($leftBytes > 0) && ($timer->getTimeLeft() > 0) )
{
// Read the mini header
$binMiniHeader = fread($this->fp, 8);
$reallyReadBytes = akstringlen($binMiniHeader);
if($reallyReadBytes < 8)
{
// We read less than requested! Why? Did we hit local EOF?
if( $this->isEOF(true) && !$this->isEOF(false) )
{
// Yeap. Let's go to the next file
$this->nextFile();
// Retry reading the header
$binMiniHeader = fread($this->fp, 8);
$reallyReadBytes = akstringlen($binMiniHeader);
// Still not enough data? If so, the archive is corrupt or missing parts.
if($reallyReadBytes < 8) {
$this->setError( AKText::_('ERR_CORRUPT_ARCHIVE') );
return false;
}
}
else
{
// Nope. The archive is corrupt
$this->setError( AKText::_('ERR_CORRUPT_ARCHIVE') );
return false;
}
}
// Read the encrypted data
$miniHeader = unpack('Vencsize/Vdecsize', $binMiniHeader);
$toReadBytes = $miniHeader['encsize'];
$data = $this->fread( $this->fp, $toReadBytes );
$reallyReadBytes = akstringlen($data);
if($reallyReadBytes < $toReadBytes)
{
// We read less than requested! Why? Did we hit local EOF?
if( $this->isEOF(true) && !$this->isEOF(false) )
{
// Yeap. Let's go to the next file
$this->nextFile();
// Read the rest of the data
$toReadBytes -= $reallyReadBytes;
$restData = $this->fread( $this->fp, $toReadBytes );
$reallyReadBytes = akstringlen($restData);
if($reallyReadBytes < $toReadBytes) {
$this->setError( AKText::_('ERR_CORRUPT_ARCHIVE') );
return false;
}
if(akstringlen($data) == 0) {
$data = $restData;
} else {
$data .= $restData;
}
}
else
{
// Nope. The archive is corrupt
$this->setError( AKText::_('ERR_CORRUPT_ARCHIVE') );
return false;
}
}
// Decrypt the data
$data = AKEncryptionAES::AESDecryptCBC($data, $this->password, 128);
// Is the length of the decrypted data less than expected?
$data_length = akstringlen($data);
if($data_length < $miniHeader['decsize']) {
$this->setError(AKText::_('ERR_INVALID_JPS_PASSWORD'));
return false;
}
// Trim the data
$data = substr($data,0,$miniHeader['decsize']);
// Decompress
$data = gzinflate($data);
$unc_len = akstringlen($data);
// Write the decrypted data
if( !AKFactory::get('kickstart.setup.dryrun','0') )
if(is_resource($outfp)) @fwrite( $outfp, $data, akstringlen($data) );
// Update the read length
$this->dataReadLength += $unc_len;
$leftBytes = $this->fileHeader->uncompressed - $this->dataReadLength;
}
// Close the file pointer
if( !AKFactory::get('kickstart.setup.dryrun','0') )
if(is_resource($outfp)) @fclose($outfp);
// Was this a pre-timeout bail out?
if( $leftBytes > 0 )
{
$this->runState = AK_STATE_DATA;
}
else
{
// Oh! We just finished!
$this->runState = AK_STATE_DATAREAD;
$this->dataReadLength = 0;
}
return true;
}
/**
* Process the file data of a link entry
* @return bool
*/
private function processTypeLink()
{
// Does the file have any data, at all?
if( $this->fileHeader->uncompressed == 0 )
{
// No file data!
$this->runState = AK_STATE_DATAREAD;
return true;
}
// Read the mini header
$binMiniHeader = fread($this->fp, 8);
$reallyReadBytes = akstringlen($binMiniHeader);
if($reallyReadBytes < 8)
{
// We read less than requested! Why? Did we hit local EOF?
if( $this->isEOF(true) && !$this->isEOF(false) )
{
// Yeap. Let's go to the next file
$this->nextFile();
// Retry reading the header
$binMiniHeader = fread($this->fp, 8);
$reallyReadBytes = akstringlen($binMiniHeader);
// Still not enough data? If so, the archive is corrupt or missing parts.
if($reallyReadBytes < 8) {
$this->setError( AKText::_('ERR_CORRUPT_ARCHIVE') );
return false;
}
}
else
{
// Nope. The archive is corrupt
$this->setError( AKText::_('ERR_CORRUPT_ARCHIVE') );
return false;
}
}
// Read the encrypted data
$miniHeader = unpack('Vencsize/Vdecsize', $binMiniHeader);
$toReadBytes = $miniHeader['encsize'];
$data = $this->fread( $this->fp, $toReadBytes );
$reallyReadBytes = akstringlen($data);
if($reallyReadBytes < $toReadBytes)
{
// We read less than requested! Why? Did we hit local EOF?
if( $this->isEOF(true) && !$this->isEOF(false) )
{
// Yeap. Let's go to the next file
$this->nextFile();
// Read the rest of the data
$toReadBytes -= $reallyReadBytes;
$restData = $this->fread( $this->fp, $toReadBytes );
$reallyReadBytes = akstringlen($data);
if($reallyReadBytes < $toReadBytes) {
$this->setError( AKText::_('ERR_CORRUPT_ARCHIVE') );
return false;
}
$data .= $restData;
}
else
{
// Nope. The archive is corrupt
$this->setError( AKText::_('ERR_CORRUPT_ARCHIVE') );
return false;
}
}
// Decrypt the data
$data = AKEncryptionAES::AESDecryptCBC($data, $this->password, 128);
// Is the length of the decrypted data less than expected?
$data_length = akstringlen($data);
if($data_length < $miniHeader['decsize']) {
$this->setError(AKText::_('ERR_INVALID_JPS_PASSWORD'));
return false;
}
// Trim the data
$data = substr($data,0,$miniHeader['decsize']);
// Try to remove an existing file or directory by the same name
if(file_exists($this->fileHeader->file)) { @unlink($this->fileHeader->file); @rmdir($this->fileHeader->file); }
// Remove any trailing slash
if(substr($this->fileHeader->file, -1) == '/') $this->fileHeader->file = substr($this->fileHeader->file, 0, -1);
// Create the symlink - only possible within PHP context. There's no support built in the FTP protocol, so no postproc use is possible here :(
if( !AKFactory::get('kickstart.setup.dryrun','0') )
{
@symlink($data, $this->fileHeader->file);
}
$this->runState = AK_STATE_DATAREAD;
return true; // No matter if the link was created!
}
/**
* Process the file data of a directory entry
* @return bool
*/
private function processTypeDir()
{
// Directory entries in the JPA do not have file data, therefore we're done processing the entry
$this->runState = AK_STATE_DATAREAD;
return true;
}
/**
* Creates the directory this file points to
*/
protected function createDirectory()
{
if( AKFactory::get('kickstart.setup.dryrun','0') ) return true;
// Do we need to create a directory?
$lastSlash = strrpos($this->fileHeader->realFile, '/');
$dirName = substr( $this->fileHeader->realFile, 0, $lastSlash);
$perms = $this->flagRestorePermissions ? $retArray['permissions'] : 0755;
$ignore = AKFactory::get('kickstart.setup.ignoreerrors', false) || $this->isIgnoredDirectory($dirName);
if( ($this->postProcEngine->createDirRecursive($dirName, $perms) == false) && (!$ignore) ) {
$this->setError( AKText::sprintf('COULDNT_CREATE_DIR', $dirName) );
return false;
}
else
{
return true;
}
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* Timer class
*/
class AKCoreTimer extends AKAbstractObject
{
/** @var int Maximum execution time allowance per step */
private $max_exec_time = null;
/** @var int Timestamp of execution start */
private $start_time = null;
/**
* Public constructor, creates the timer object and calculates the execution time limits
* @return AECoreTimer
*/
public function __construct()
{
parent::__construct();
// Initialize start time
$this->start_time = $this->microtime_float();
// Get configured max time per step and bias
$config_max_exec_time = AKFactory::get('kickstart.tuning.max_exec_time', 14);
$bias = AKFactory::get('kickstart.tuning.run_time_bias', 75)/100;
// Get PHP's maximum execution time (our upper limit)
if(@function_exists('ini_get'))
{
$php_max_exec_time = @ini_get("maximum_execution_time");
if ( (!is_numeric($php_max_exec_time)) || ($php_max_exec_time == 0) ) {
// If we have no time limit, set a hard limit of about 10 seconds
// (safe for Apache and IIS timeouts, verbose enough for users)
$php_max_exec_time = 14;
}
}
else
{
// If ini_get is not available, use a rough default
$php_max_exec_time = 14;
}
// Apply an arbitrary correction to counter CMS load time
$php_max_exec_time--;
// Apply bias
$php_max_exec_time = $php_max_exec_time * $bias;
$config_max_exec_time = $config_max_exec_time * $bias;
// Use the most appropriate time limit value
if( $config_max_exec_time > $php_max_exec_time )
{
$this->max_exec_time = $php_max_exec_time;
}
else
{
$this->max_exec_time = $config_max_exec_time;
}
}
/**
* Wake-up function to reset internal timer when we get unserialized
*/
public function __wakeup()
{
// Re-initialize start time on wake-up
$this->start_time = $this->microtime_float();
}
/**
* Gets the number of seconds left, before we hit the "must break" threshold
* @return float
*/
public function getTimeLeft()
{
return $this->max_exec_time - $this->getRunningTime();
}
/**
* Gets the time elapsed since object creation/unserialization, effectively how
* long Akeeba Engine has been processing data
* @return float
*/
public function getRunningTime()
{
return $this->microtime_float() - $this->start_time;
}
/**
* Returns the current timestampt in decimal seconds
*/
private function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
/**
* Enforce the minimum execution time
*/
public function enforce_min_exec_time()
{
// Try to get a sane value for PHP's maximum_execution_time INI parameter
if(@function_exists('ini_get'))
{
$php_max_exec = @ini_get("maximum_execution_time");
}
else
{
$php_max_exec = 10;
}
if ( ($php_max_exec == "") || ($php_max_exec == 0) ) {
$php_max_exec = 10;
}
// Decrease $php_max_exec time by 500 msec we need (approx.) to tear down
// the application, as well as another 500msec added for rounding
// error purposes. Also make sure this is never gonna be less than 0.
$php_max_exec = max($php_max_exec * 1000 - 1000, 0);
// Get the "minimum execution time per step" Akeeba Backup configuration variable
$minexectime = AKFactory::get('kickstart.tuning.min_exec_time',0);
if(!is_numeric($minexectime)) $minexectime = 0;
// Make sure we are not over PHP's time limit!
if($minexectime > $php_max_exec) $minexectime = $php_max_exec;
// Get current running time
$elapsed_time = $this->getRunningTime() * 1000;
// Only run a sleep delay if we haven't reached the minexectime execution time
if( ($minexectime > $elapsed_time) && ($elapsed_time > 0) )
{
$sleep_msec = $minexectime - $elapsed_time;
if(function_exists('usleep'))
{
usleep(1000 * $sleep_msec);
}
elseif(function_exists('time_nanosleep'))
{
$sleep_sec = floor($sleep_msec / 1000);
$sleep_nsec = 1000000 * ($sleep_msec - ($sleep_sec * 1000));
time_nanosleep($sleep_sec, $sleep_nsec);
}
elseif(function_exists('time_sleep_until'))
{
$until_timestamp = time() + $sleep_msec / 1000;
time_sleep_until($until_timestamp);
}
elseif(function_exists('sleep'))
{
$sleep_sec = ceil($sleep_msec/1000);
sleep( $sleep_sec );
}
}
elseif( $elapsed_time > 0 )
{
// No sleep required, even if user configured us to be able to do so.
}
}
/**
* Reset the timer. It should only be used in CLI mode!
*/
public function resetTime()
{
$this->start_time = $this->microtime_float();
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* A filesystem scanner which uses opendir()
*/
class AKUtilsLister extends AKAbstractObject
{
public function &getFiles($folder, $pattern = '*')
{
// Initialize variables
$arr = array();
$false = false;
if(!is_dir($folder)) return $false;
$handle = @opendir($folder);
// If directory is not accessible, just return FALSE
if ($handle === FALSE) {
$this->setWarning( 'Unreadable directory '.$folder);
return $false;
}
while (($file = @readdir($handle)) !== false)
{
if( !fnmatch($pattern, $file) ) continue;
if (($file != '.') && ($file != '..'))
{
$ds = ($folder == '') || ($folder == '/') || (@substr($folder, -1) == '/') || (@substr($folder, -1) == DIRECTORY_SEPARATOR) ? '' : DIRECTORY_SEPARATOR;
$dir = $folder . $ds . $file;
$isDir = is_dir($dir);
if (!$isDir) {
$arr[] = $dir;
}
}
}
@closedir($handle);
return $arr;
}
public function &getFolders($folder, $pattern = '*')
{
// Initialize variables
$arr = array();
$false = false;
if(!is_dir($folder)) return $false;
$handle = @opendir($folder);
// If directory is not accessible, just return FALSE
if ($handle === FALSE) {
$this->setWarning( 'Unreadable directory '.$folder);
return $false;
}
while (($file = @readdir($handle)) !== false)
{
if( !fnmatch($pattern, $file) ) continue;
if (($file != '.') && ($file != '..'))
{
$ds = ($folder == '') || ($folder == '/') || (@substr($folder, -1) == '/') || (@substr($folder, -1) == DIRECTORY_SEPARATOR) ? '' : DIRECTORY_SEPARATOR;
$dir = $folder . $ds . $file;
$isDir = is_dir($dir);
if ($isDir) {
$arr[] = $dir;
}
}
}
@closedir($handle);
return $arr;
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* A simple INI-based i18n engine
*/
class AKText extends AKAbstractObject
{
/**
* The default (en_GB) translation used when no other translation is available
* @var array
*/
private $default_translation = array(
'AUTOMODEON' => 'Auto-mode enabled',
'ERR_NOT_A_JPA_FILE' => 'The file is not a JPA archive',
'ERR_CORRUPT_ARCHIVE' => 'The archive file is corrupt, truncated or archive parts are missing',
'ERR_INVALID_LOGIN' => 'Invalid login',
'COULDNT_CREATE_DIR' => 'Could not create %s folder',
'COULDNT_WRITE_FILE' => 'Could not open %s for writing.',
'WRONG_FTP_HOST' => 'Wrong FTP host or port',
'WRONG_FTP_USER' => 'Wrong FTP username or password',
'WRONG_FTP_PATH1' => 'Wrong FTP initial directory - the directory doesn\'t exist',
'FTP_CANT_CREATE_DIR' => 'Could not create directory %s',
'FTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory',
'SFTP_TEMPDIR_NOT_WRITABLE' => 'Could not find or create a writable temporary directory',
'FTP_COULDNT_UPLOAD' => 'Could not upload %s',
'THINGS_HEADER' => 'Things you should know about Akeeba Kickstart',
'THINGS_01' => 'Kickstart is not an installer. It is an archive extraction tool. The actual installer was put inside the archive file at backup time.',
'THINGS_02' => 'Kickstart is not the only way to extract the backup archive. You can use Akeeba eXtract Wizard and upload the extracted files using FTP instead.',
'THINGS_03' => 'Kickstart is bound by your server\'s configuration. As such, it may not work at all.',
'THINGS_04' => 'You should download and upload your archive files using FTP in Binary transfer mode. Any other method could lead to a corrupt backup archive and restoration failure.',
'THINGS_05' => 'Post-restoration site load errors are usually caused by .htaccess or php.ini directives. You should understand that blank pages, 404 and 500 errors can usually be worked around by editing the aforementioned files. It is not our job to mess with your configuration files, because this could be dangerous for your site.',
'THINGS_06' => 'Kickstart overwrites files without a warning. If you are not sure that you are OK with that do not continue.',
'THINGS_07' => 'Trying to restore to the temporary URL of a cPanel host (e.g. http://1.2.3.4/~username) will lead to restoration failure and your site will appear to be not working. This is normal and it\'s just how your server and CMS software work.',
'THINGS_08' => 'You are supposed to read the documentation before using this software. Most issues can be avoided, or easily worked around, by understanding how this software works.',
'THINGS_09' => 'This text does not imply that there is a problem detected. It is standard text displayed every time you launch Kickstart.',
'CLOSE_LIGHTBOX' => 'Click here or press ESC to close this message',
'SELECT_ARCHIVE' => 'Select a backup archive',
'ARCHIVE_FILE' => 'Archive file:',
'SELECT_EXTRACTION' => 'Select an extraction method',
'WRITE_TO_FILES' => 'Write to files:',
'WRITE_HYBRID' => 'Hybrid (use FTP only if needed)',
'WRITE_DIRECTLY' => 'Directly',
'WRITE_FTP' => 'Use FTP for all files',
'WRITE_SFTP' => 'Use SFTP for all files',
'FTP_HOST' => '(S)FTP host name:',
'FTP_PORT' => '(S)FTP port:',
'FTP_FTPS' => 'Use FTP over SSL (FTPS)',
'FTP_PASSIVE' => 'Use FTP Passive Mode',
'FTP_USER' => '(S)FTP user name:',
'FTP_PASS' => '(S)FTP password:',
'FTP_DIR' => '(S)FTP directory:',
'FTP_TEMPDIR' => 'Temporary directory:',
'FTP_CONNECTION_OK' => 'FTP Connection Established',
'SFTP_CONNECTION_OK' => 'SFTP Connection Established',
'FTP_CONNECTION_FAILURE' => 'The FTP Connection Failed',
'SFTP_CONNECTION_FAILURE' => 'The SFTP Connection Failed',
'FTP_TEMPDIR_WRITABLE' => 'The temporary directory is writable.',
'FTP_TEMPDIR_UNWRITABLE' => 'The temporary directory is not writable. Please check the permissions.',
'FTPBROWSER_ERROR_HOSTNAME' => "Invalid FTP host or port",
'FTPBROWSER_ERROR_USERPASS' => "Invalid FTP username or password",
'FTPBROWSER_ERROR_NOACCESS' => "Directory doesn't exist or you don't have enough permissions to access it",
'FTPBROWSER_ERROR_UNSUPPORTED' => "Sorry, your FTP server doesn't support our FTP directory browser.",
'FTPBROWSER_LBL_GOPARENT' => "<up one level>",
'FTPBROWSER_LBL_INSTRUCTIONS' => 'Click on a directory to navigate into it. Click on OK to select that directory, Cancel to abort the procedure.',
'FTPBROWSER_LBL_ERROR' => 'An error occurred',
'SFTP_NO_SSH2' => 'Your web server does not have the SSH2 PHP module, therefore can not connect to SFTP servers.',
'SFTP_NO_FTP_SUPPORT' => 'Your SSH server does not allow SFTP connections',
'SFTP_WRONG_USER' => 'Wrong SFTP username or password',
'SFTP_WRONG_STARTING_DIR' => 'You must supply a valid absolute path',
'SFTPBROWSER_ERROR_NOACCESS' => "Directory doesn't exist or you don't have enough permissions to access it",
'SFTP_COULDNT_UPLOAD' => 'Could not upload %s',
'SFTP_CANT_CREATE_DIR' => 'Could not create directory %s',
'UI-ROOT' => '<root>',
'CONFIG_UI_FTPBROWSER_TITLE' => 'FTP Directory Browser',
'FTP_BROWSE' => 'Browse',
'BTN_CHECK' => 'Check',
'BTN_RESET' => 'Reset',
'BTN_TESTFTPCON' => 'Test FTP connection',
'BTN_TESTSFTPCON' => 'Test SFTP connection',
'BTN_GOTOSTART' => 'Start over',
'FINE_TUNE' => 'Fine tune',
'MIN_EXEC_TIME' => 'Minimum execution time:',
'MAX_EXEC_TIME' => 'Maximum execution time:',
'SECONDS_PER_STEP' => 'seconds per step',
'EXTRACT_FILES' => 'Extract files',
'BTN_START' => 'Start',
'EXTRACTING' => 'Extracting',
'DO_NOT_CLOSE_EXTRACT' => 'Do not close this window while the extraction is in progress',
'RESTACLEANUP' => 'Restoration and Clean Up',
'BTN_RUNINSTALLER' => 'Run the Installer',
'BTN_CLEANUP' => 'Clean Up',
'BTN_SITEFE' => 'Visit your site\'s front-end',
'BTN_SITEBE' => 'Visit your site\'s back-end',
'WARNINGS' => 'Extraction Warnings',
'ERROR_OCCURED' => 'An error occured',
'STEALTH_MODE' => 'Stealth mode',
'STEALTH_URL' => 'HTML file to show to web visitors',
'ERR_NOT_A_JPS_FILE' => 'The file is not a JPA archive',
'ERR_INVALID_JPS_PASSWORD' => 'The password you gave is wrong or the archive is corrupt',
'JPS_PASSWORD' => 'Archive Password (for JPS files)',
'INVALID_FILE_HEADER' => 'Invalid header in archive file, part %s, offset %s',
'NEEDSOMEHELPKS' => 'Want some help to use this tool? Read this first:',
'QUICKSTART' => 'Quick Start Guide',
'CANTGETITTOWORK' => 'Can\'t get it to work? Click me!',
'NOARCHIVESCLICKHERE' => 'No archives detected. Click here for troubleshooting instructions.',
'POSTRESTORATIONTROUBLESHOOTING' => 'Something not working after the restoration? Click here for troubleshooting instructions.',
'UPDATE_HEADER' => 'An updated version of Akeeba Kickstart (<span id="update-version">unknown</span>) is available!',
'UPDATE_NOTICE' => 'You are advised to always use the latest version of Akeeba Kickstart available. Older versions may be subject to bugs and will not be supported.',
'UPDATE_DLNOW' => 'Download now',
'UPDATE_MOREINFO' => 'More information',
'IGNORE_MOST_ERRORS' => 'Ignore most errors',
'WRONG_FTP_PATH2' => 'Wrong FTP initial directory - the directory doesn\'t correspond to your site\'s web root',
'ARCHIVE_DIRECTORY' => 'Archive directory:',
'RELOAD_ARCHIVES' => 'Reload',
'CONFIG_UI_SFTPBROWSER_TITLE' => 'SFTP Directory Browser',
'ERR_COULD_NOT_OPEN_ARCHIVE_PART' => 'Could not open archive part file %s for reading. Check that the file exists, is readable by the web server and is not in a directory made out of reach by chroot, open_basedir restrictions or any other restriction put in place by your host.',
);
/**
* The array holding the translation keys
* @var array
*/
private $strings;
/**
* The currently detected language (ISO code)
* @var string
*/
private $language;
/*
* Initializes the translation engine
* @return AKText
*/
public function __construct()
{
// Start with the default translation
$this->strings = $this->default_translation;
// Try loading the translation file in English, if it exists
$this->loadTranslation('en-GB');
// Try loading the translation file in the browser's preferred language, if it exists
$this->getBrowserLanguage();
if(!is_null($this->language))
{
$this->loadTranslation();
}
}
/**
* Singleton pattern for Language
* @return AKText The global AKText instance
*/
public static function &getInstance()
{
static $instance;
if(!is_object($instance))
{
$instance = new AKText();
}
return $instance;
}
public static function _($string)
{
$text = self::getInstance();
$key = strtoupper($string);
$key = substr($key, 0, 1) == '_' ? substr($key, 1) : $key;
if (isset ($text->strings[$key]))
{
$string = $text->strings[$key];
}
else
{
if (defined($string))
{
$string = constant($string);
}
}
return $string;
}
public static function sprintf($key)
{
$text = self::getInstance();
$args = func_get_args();
if (count($args) > 0) {
$args[0] = $text->_($args[0]);
return @call_user_func_array('sprintf', $args);
}
return '';
}
public function dumpLanguage()
{
$out = '';
foreach($this->strings as $key => $value)
{
$out .= "$key=$value\n";
}
return $out;
}
public function asJavascript()
{
$out = '';
foreach($this->strings as $key => $value)
{
$key = addcslashes($key, '\\\'"');
$value = addcslashes($value, '\\\'"');
if(!empty($out)) $out .= ",\n";
$out .= "'$key':\t'$value'";
}
return $out;
}
public function resetTranslation()
{
$this->strings = $this->default_translation;
}
public function getBrowserLanguage()
{
// Detection code from Full Operating system language detection, by Harald Hope
// Retrieved from http://techpatterns.com/downloads/php_language_detection.php
$user_languages = array();
//check to see if language is set
if ( isset( $_SERVER["HTTP_ACCEPT_LANGUAGE"] ) )
{
$languages = strtolower( $_SERVER["HTTP_ACCEPT_LANGUAGE"] );
// $languages = ' fr-ch;q=0.3, da, en-us;q=0.8, en;q=0.5, fr;q=0.3';
// need to remove spaces from strings to avoid error
$languages = str_replace( ' ', '', $languages );
$languages = explode( ",", $languages );
foreach ( $languages as $language_list )
{
// pull out the language, place languages into array of full and primary
// string structure:
$temp_array = array();
// slice out the part before ; on first step, the part before - on second, place into array
$temp_array[0] = substr( $language_list, 0, strcspn( $language_list, ';' ) );//full language
$temp_array[1] = substr( $language_list, 0, 2 );// cut out primary language
if( (strlen($temp_array[0]) == 5) && ( (substr($temp_array[0],2,1) == '-') || (substr($temp_array[0],2,1) == '_') ) )
{
$langLocation = strtoupper(substr($temp_array[0],3,2));
$temp_array[0] = $temp_array[1].'-'.$langLocation;
}
//place this array into main $user_languages language array
$user_languages[] = $temp_array;
}
}
else// if no languages found
{
$user_languages[0] = array( '','' ); //return blank array.
}
$this->language = null;
$basename=basename(__FILE__, '.php') . '.ini';
// Try to match main language part of the filename, irrespective of the location, e.g. de_DE will do if de_CH doesn't exist.
if (class_exists('AKUtilsLister'))
{
$fs = new AKUtilsLister();
$iniFiles = $fs->getFiles(KSROOTDIR, '*.'.$basename );
if(empty($iniFiles) && ($basename != 'kickstart.ini')) {
$basename = 'kickstart.ini';
$iniFiles = $fs->getFiles(KSROOTDIR, '*.'.$basename );
}
}
else
{
$iniFiles = null;
}
if (is_array($iniFiles)) {
foreach($user_languages as $languageStruct)
{
if(is_null($this->language))
{
// Get files matching the main lang part
$iniFiles = $fs->getFiles(KSROOTDIR, $languageStruct[1].'-??.'.$basename );
if (count($iniFiles) > 0) {
$filename = $iniFiles[0];
$filename = substr($filename, strlen(KSROOTDIR)+1);
$this->language = substr($filename, 0, 5);
} else {
$this->language = null;
}
}
}
}
if(is_null($this->language)) {
// Try to find a full language match
foreach($user_languages as $languageStruct)
{
if (@file_exists($languageStruct[0].'.'.$basename) && is_null($this->language)) {
$this->language = $languageStruct[0];
} else {
}
}
} else {
// Do we have an exact match?
foreach($user_languages as $languageStruct)
{
if(substr($this->language,0,strlen($languageStruct[1])) == $languageStruct[1]) {
if(file_exists($languageStruct[0].'.'.$basename)) {
$this->language = $languageStruct[0];
}
}
}
}
// Now, scan for full language based on the partial match
}
private function loadTranslation( $lang = null )
{
if (defined('KSLANGDIR'))
{
$dirname = KSLANGDIR;
}
else
{
$dirname = KSROOTDIR;
}
$basename = basename(__FILE__, '.php') . '.ini';
if( empty($lang) ) $lang = $this->language;
$translationFilename = $dirname.DIRECTORY_SEPARATOR.$lang.'.'.$basename;
if(!@file_exists($translationFilename) && ($basename != 'kickstart.ini')) {
$basename = 'kickstart.ini';
$translationFilename = $dirname.DIRECTORY_SEPARATOR.$lang.'.'.$basename;
}
if(!@file_exists($translationFilename)) return;
$temp = self::parse_ini_file($translationFilename, false);
if(!is_array($this->strings)) $this->strings = array();
if(empty($temp)) {
$this->strings = array_merge($this->default_translation, $this->strings);
} else {
$this->strings = array_merge($this->strings, $temp);
}
}
public function addDefaultLanguageStrings($stringList = array())
{
if(!is_array($stringList)) return;
if(empty($stringList)) return;
$this->strings = array_merge($stringList, $this->strings);
}
/**
* A PHP based INI file parser.
*
* Thanks to asohn ~at~ aircanopy ~dot~ net for posting this handy function on
* the parse_ini_file page on http://gr.php.net/parse_ini_file
*
* @param string $file Filename to process
* @param bool $process_sections True to also process INI sections
* @return array An associative array of sections, keys and values
* @access private
*/
public static function parse_ini_file($file, $process_sections = false, $raw_data = false)
{
$process_sections = ($process_sections !== true) ? false : true;
if(!$raw_data)
{
$ini = @file($file);
}
else
{
$ini = $file;
}
if (count($ini) == 0) {return array();}
$sections = array();
$values = array();
$result = array();
$globals = array();
$i = 0;
if(!empty($ini)) foreach ($ini as $line) {
$line = trim($line);
$line = str_replace("\t", " ", $line);
// Comments
if (!preg_match('/^[a-zA-Z0-9[]/', $line)) {continue;}
// Sections
if ($line{0} == '[') {
$tmp = explode(']', $line);
$sections[] = trim(substr($tmp[0], 1));
$i++;
continue;
}
// Key-value pair
list($key, $value) = explode('=', $line, 2);
$key = trim($key);
$value = trim($value);
if (strstr($value, ";")) {
$tmp = explode(';', $value);
if (count($tmp) == 2) {
if ((($value{0} != '"') && ($value{0} != "'")) ||
preg_match('/^".*"\s*;/', $value) || preg_match('/^".*;[^"]*$/', $value) ||
preg_match("/^'.*'\s*;/", $value) || preg_match("/^'.*;[^']*$/", $value) ){
$value = $tmp[0];
}
} else {
if ($value{0} == '"') {
$value = preg_replace('/^"(.*)".*/', '$1', $value);
} elseif ($value{0} == "'") {
$value = preg_replace("/^'(.*)'.*/", '$1', $value);
} else {
$value = $tmp[0];
}
}
}
$value = trim($value);
$value = trim($value, "'\"");
if ($i == 0) {
if (substr($line, -1, 2) == '[]') {
$globals[$key][] = $value;
} else {
$globals[$key] = $value;
}
} else {
if (substr($line, -1, 2) == '[]') {
$values[$i-1][$key][] = $value;
} else {
$values[$i-1][$key] = $value;
}
}
}
for($j = 0; $j < $i; $j++) {
if ($process_sections === true) {
$result[$sections[$j]] = $values[$j];
} else {
$result[] = $values[$j];
}
}
return $result + $globals;
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* The Akeeba Kickstart Factory class
* This class is reponssible for instanciating all Akeeba Kicsktart classes
*/
class AKFactory {
/** @var array A list of instanciated objects */
private $objectlist = array();
/** @var array Simple hash data storage */
private $varlist = array();
/** Private constructor makes sure we can't directly instanciate the class */
private function __construct() {}
/**
* Gets a single, internally used instance of the Factory
* @param string $serialized_data [optional] Serialized data to spawn the instance from
* @return AKFactory A reference to the unique Factory object instance
*/
protected static function &getInstance( $serialized_data = null ) {
static $myInstance;
if(!is_object($myInstance) || !is_null($serialized_data))
if(!is_null($serialized_data))
{
$myInstance = unserialize($serialized_data);
}
else
{
$myInstance = new self();
}
return $myInstance;
}
/**
* Internal function which instanciates a class named $class_name.
* The autoloader
* @param object $class_name
* @return
*/
protected static function &getClassInstance($class_name) {
$self = self::getInstance();
if(!isset($self->objectlist[$class_name]))
{
$self->objectlist[$class_name] = new $class_name;
}
return $self->objectlist[$class_name];
}
// ========================================================================
// Public factory interface
// ========================================================================
/**
* Gets a serialized snapshot of the Factory for safekeeping (hibernate)
* @return string The serialized snapshot of the Factory
*/
public static function serialize() {
$engine = self::getUnarchiver();
$engine->shutdown();
$serialized = serialize(self::getInstance());
if(function_exists('base64_encode') && function_exists('base64_decode'))
{
$serialized = base64_encode($serialized);
}
return $serialized;
}
/**
* Regenerates the full Factory state from a serialized snapshot (resume)
* @param string $serialized_data The serialized snapshot to resume from
*/
public static function unserialize($serialized_data) {
if(function_exists('base64_encode') && function_exists('base64_decode'))
{
$serialized_data = base64_decode($serialized_data);
}
self::getInstance($serialized_data);
}
/**
* Reset the internal factory state, freeing all previously created objects
*/
public static function nuke()
{
$self = self::getInstance();
foreach($self->objectlist as $key => $object)
{
$self->objectlist[$key] = null;
}
$self->objectlist = array();
}
// ========================================================================
// Public hash data storage interface
// ========================================================================
public static function set($key, $value)
{
$self = self::getInstance();
$self->varlist[$key] = $value;
}
public static function get($key, $default = null)
{
$self = self::getInstance();
if( array_key_exists($key, $self->varlist) )
{
return $self->varlist[$key];
}
else
{
return $default;
}
}
// ========================================================================
// Akeeba Kickstart classes
// ========================================================================
/**
* Gets the post processing engine
* @param string $proc_engine
*/
public static function &getPostProc($proc_engine = null)
{
static $class_name;
if( empty($class_name) )
{
if(empty($proc_engine))
{
$proc_engine = self::get('kickstart.procengine','direct');
}
$class_name = 'AKPostproc'.ucfirst($proc_engine);
}
return self::getClassInstance($class_name);
}
/**
* Gets the unarchiver engine
*/
public static function &getUnarchiver( $configOverride = null )
{
static $class_name;
if(!empty($configOverride))
{
if($configOverride['reset']) {
$class_name = null;
}
}
if( empty($class_name) )
{
$filetype = self::get('kickstart.setup.filetype', null);
if(empty($filetype))
{
$filename = self::get('kickstart.setup.sourcefile', null);
$basename = basename($filename);
$baseextension = strtoupper(substr($basename,-3));
switch($baseextension)
{
case 'JPA':
$filetype = 'JPA';
break;
case 'JPS':
$filetype = 'JPS';
break;
case 'ZIP':
$filetype = 'ZIP';
break;
default:
die('Invalid archive type or extension in file '.$filename);
break;
}
}
$class_name = 'AKUnarchiver'.ucfirst($filetype);
}
$destdir = self::get('kickstart.setup.destdir', null);
if(empty($destdir))
{
$destdir = KSROOTDIR;
}
$object = self::getClassInstance($class_name);
if( $object->getState() == 'init')
{
$sourcePath = self::get('kickstart.setup.sourcepath', '');
$sourceFile = self::get('kickstart.setup.sourcefile', '');
if (!empty($sourcePath))
{
$sourceFile = rtrim($sourcePath, '/\\') . '/' . $sourceFile;
}
// Initialize the object
$config = array(
'filename' => $sourceFile,
'restore_permissions' => self::get('kickstart.setup.restoreperms', 0),
'post_proc' => self::get('kickstart.procengine', 'direct'),
'add_path' => self::get('kickstart.setup.targetpath', $destdir),
'rename_files' => array('.htaccess' => 'htaccess.bak', 'php.ini' => 'php.ini.bak', 'web.config' => 'web.config.bak', '.user.ini' => '.user.ini.bak'),
'skip_files' => array(basename(__FILE__), 'kickstart.php', 'abiautomation.ini', 'htaccess.bak', 'php.ini.bak', 'cacert.pem'),
'ignoredirectories' => array('tmp', 'log', 'logs'),
);
if(!defined('KICKSTART'))
{
// In restore.php mode we have to exclude some more files
$config['skip_files'][] = 'administrator/components/com_akeeba/restore.php';
$config['skip_files'][] = 'administrator/components/com_akeeba/restoration.php';
}
if(!empty($configOverride))
{
$config = array_merge($config, $configOverride);
}
$object->setup($config);
}
return $object;
}
/**
* Get the a reference to the Akeeba Engine's timer
* @return AKCoreTimer
*/
public static function &getTimer()
{
return self::getClassInstance('AKCoreTimer');
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* AES implementation in PHP (c) Chris Veness 2005-2013.
* Right to use and adapt is granted for under a simple creative commons attribution
* licence. No warranty of any form is offered.
*
* Modified for Akeeba Backup by Nicholas K. Dionysopoulos
*/
class AKEncryptionAES
{
// Sbox is pre-computed multiplicative inverse in GF(2^8) used in SubBytes and KeyExpansion [�5.1.1]
protected static $Sbox =
array(0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,
0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,
0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,
0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75,
0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84,
0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf,
0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8,
0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2,
0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73,
0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb,
0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79,
0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08,
0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a,
0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e,
0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf,
0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16);
// Rcon is Round Constant used for the Key Expansion [1st col is 2^(r-1) in GF(2^8)] [�5.2]
protected static $Rcon = array(
array(0x00, 0x00, 0x00, 0x00),
array(0x01, 0x00, 0x00, 0x00),
array(0x02, 0x00, 0x00, 0x00),
array(0x04, 0x00, 0x00, 0x00),
array(0x08, 0x00, 0x00, 0x00),
array(0x10, 0x00, 0x00, 0x00),
array(0x20, 0x00, 0x00, 0x00),
array(0x40, 0x00, 0x00, 0x00),
array(0x80, 0x00, 0x00, 0x00),
array(0x1b, 0x00, 0x00, 0x00),
array(0x36, 0x00, 0x00, 0x00) );
protected static $passwords = array();
/**
* AES Cipher function: encrypt 'input' with Rijndael algorithm
*
* @param input message as byte-array (16 bytes)
* @param w key schedule as 2D byte-array (Nr+1 x Nb bytes) -
* generated from the cipher key by KeyExpansion()
* @return ciphertext as byte-array (16 bytes)
*/
protected static function Cipher($input, $w) { // main Cipher function [�5.1]
$Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)
$Nr = count($w)/$Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys
$state = array(); // initialise 4xNb byte-array 'state' with input [�3.4]
for ($i=0; $i<4*$Nb; $i++) $state[$i%4][floor($i/4)] = $input[$i];
$state = self::AddRoundKey($state, $w, 0, $Nb);
for ($round=1; $round<$Nr; $round++) { // apply Nr rounds
$state = self::SubBytes($state, $Nb);
$state = self::ShiftRows($state, $Nb);
$state = self::MixColumns($state, $Nb);
$state = self::AddRoundKey($state, $w, $round, $Nb);
}
$state = self::SubBytes($state, $Nb);
$state = self::ShiftRows($state, $Nb);
$state = self::AddRoundKey($state, $w, $Nr, $Nb);
$output = array(4*$Nb); // convert state to 1-d array before returning [�3.4]
for ($i=0; $i<4*$Nb; $i++) $output[$i] = $state[$i%4][floor($i/4)];
return $output;
}
protected static function AddRoundKey($state, $w, $rnd, $Nb) { // xor Round Key into state S [�5.1.4]
for ($r=0; $r<4; $r++) {
for ($c=0; $c<$Nb; $c++) $state[$r][$c] ^= $w[$rnd*4+$c][$r];
}
return $state;
}
protected static function SubBytes($s, $Nb) { // apply SBox to state S [�5.1.1]
for ($r=0; $r<4; $r++) {
for ($c=0; $c<$Nb; $c++) $s[$r][$c] = self::$Sbox[$s[$r][$c]];
}
return $s;
}
protected static function ShiftRows($s, $Nb) { // shift row r of state S left by r bytes [�5.1.2]
$t = array(4);
for ($r=1; $r<4; $r++) {
for ($c=0; $c<4; $c++) $t[$c] = $s[$r][($c+$r)%$Nb]; // shift into temp copy
for ($c=0; $c<4; $c++) $s[$r][$c] = $t[$c]; // and copy back
} // note that this will work for Nb=4,5,6, but not 7,8 (always 4 for AES):
return $s; // see fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.311.pdf
}
protected static function MixColumns($s, $Nb) { // combine bytes of each col of state S [�5.1.3]
for ($c=0; $c<4; $c++) {
$a = array(4); // 'a' is a copy of the current column from 's'
$b = array(4); // 'b' is a�{02} in GF(2^8)
for ($i=0; $i<4; $i++) {
$a[$i] = $s[$i][$c];
$b[$i] = $s[$i][$c]&0x80 ? $s[$i][$c]<<1 ^ 0x011b : $s[$i][$c]<<1;
}
// a[n] ^ b[n] is a�{03} in GF(2^8)
$s[0][$c] = $b[0] ^ $a[1] ^ $b[1] ^ $a[2] ^ $a[3]; // 2*a0 + 3*a1 + a2 + a3
$s[1][$c] = $a[0] ^ $b[1] ^ $a[2] ^ $b[2] ^ $a[3]; // a0 * 2*a1 + 3*a2 + a3
$s[2][$c] = $a[0] ^ $a[1] ^ $b[2] ^ $a[3] ^ $b[3]; // a0 + a1 + 2*a2 + 3*a3
$s[3][$c] = $a[0] ^ $b[0] ^ $a[1] ^ $a[2] ^ $b[3]; // 3*a0 + a1 + a2 + 2*a3
}
return $s;
}
/**
* Key expansion for Rijndael Cipher(): performs key expansion on cipher key
* to generate a key schedule
*
* @param key cipher key byte-array (16 bytes)
* @return key schedule as 2D byte-array (Nr+1 x Nb bytes)
*/
protected static function KeyExpansion($key) { // generate Key Schedule from Cipher Key [�5.2]
$Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)
$Nk = count($key)/4; // key length (in words): 4/6/8 for 128/192/256-bit keys
$Nr = $Nk + 6; // no of rounds: 10/12/14 for 128/192/256-bit keys
$w = array();
$temp = array();
for ($i=0; $i<$Nk; $i++) {
$r = array($key[4*$i], $key[4*$i+1], $key[4*$i+2], $key[4*$i+3]);
$w[$i] = $r;
}
for ($i=$Nk; $i<($Nb*($Nr+1)); $i++) {
$w[$i] = array();
for ($t=0; $t<4; $t++) $temp[$t] = $w[$i-1][$t];
if ($i % $Nk == 0) {
$temp = self::SubWord(self::RotWord($temp));
for ($t=0; $t<4; $t++) $temp[$t] ^= self::$Rcon[$i/$Nk][$t];
} else if ($Nk > 6 && $i%$Nk == 4) {
$temp = self::SubWord($temp);
}
for ($t=0; $t<4; $t++) $w[$i][$t] = $w[$i-$Nk][$t] ^ $temp[$t];
}
return $w;
}
protected static function SubWord($w) { // apply SBox to 4-byte word w
for ($i=0; $i<4; $i++) $w[$i] = self::$Sbox[$w[$i]];
return $w;
}
protected static function RotWord($w) { // rotate 4-byte word w left by one byte
$tmp = $w[0];
for ($i=0; $i<3; $i++) $w[$i] = $w[$i+1];
$w[3] = $tmp;
return $w;
}
/*
* Unsigned right shift function, since PHP has neither >>> operator nor unsigned ints
*
* @param a number to be shifted (32-bit integer)
* @param b number of bits to shift a to the right (0..31)
* @return a right-shifted and zero-filled by b bits
*/
protected static function urs($a, $b) {
$a &= 0xffffffff; $b &= 0x1f; // (bounds check)
if ($a&0x80000000 && $b>0) { // if left-most bit set
$a = ($a>>1) & 0x7fffffff; // right-shift one bit & clear left-most bit
$a = $a >> ($b-1); // remaining right-shifts
} else { // otherwise
$a = ($a>>$b); // use normal right-shift
}
return $a;
}
/**
* Encrypt a text using AES encryption in Counter mode of operation
* - see http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
*
* Unicode multi-byte character safe
*
* @param plaintext source text to be encrypted
* @param password the password to use to generate a key
* @param nBits number of bits to be used in the key (128, 192, or 256)
* @return encrypted text
*/
public static function AESEncryptCtr($plaintext, $password, $nBits) {
$blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES
if (!($nBits==128 || $nBits==192 || $nBits==256)) return ''; // standard allows 128/192/256 bit keys
// note PHP (5) gives us plaintext and password in UTF8 encoding!
// use AES itself to encrypt password to get cipher key (using plain password as source for
// key expansion) - gives us well encrypted key
$nBytes = $nBits/8; // no bytes in key
$pwBytes = array();
for ($i=0; $i<$nBytes; $i++) $pwBytes[$i] = ord(substr($password,$i,1)) & 0xff;
$key = self::Cipher($pwBytes, self::KeyExpansion($pwBytes));
$key = array_merge($key, array_slice($key, 0, $nBytes-16)); // expand key to 16/24/32 bytes long
// initialise counter block (NIST SP800-38A �B.2): millisecond time-stamp for nonce in
// 1st 8 bytes, block counter in 2nd 8 bytes
$counterBlock = array();
$nonce = floor(microtime(true)*1000); // timestamp: milliseconds since 1-Jan-1970
$nonceSec = floor($nonce/1000);
$nonceMs = $nonce%1000;
// encode nonce with seconds in 1st 4 bytes, and (repeated) ms part filling 2nd 4 bytes
for ($i=0; $i<4; $i++) $counterBlock[$i] = self::urs($nonceSec, $i*8) & 0xff;
for ($i=0; $i<4; $i++) $counterBlock[$i+4] = $nonceMs & 0xff;
// and convert it to a string to go on the front of the ciphertext
$ctrTxt = '';
for ($i=0; $i<8; $i++) $ctrTxt .= chr($counterBlock[$i]);
// generate key schedule - an expansion of the key into distinct Key Rounds for each round
$keySchedule = self::KeyExpansion($key);
$blockCount = ceil(strlen($plaintext)/$blockSize);
$ciphertxt = array(); // ciphertext as array of strings
for ($b=0; $b<$blockCount; $b++) {
// set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)
// done in two stages for 32-bit ops: using two words allows us to go past 2^32 blocks (68GB)
for ($c=0; $c<4; $c++) $counterBlock[15-$c] = self::urs($b, $c*8) & 0xff;
for ($c=0; $c<4; $c++) $counterBlock[15-$c-4] = self::urs($b/0x100000000, $c*8);
$cipherCntr = self::Cipher($counterBlock, $keySchedule); // -- encrypt counter block --
// block size is reduced on final block
$blockLength = $b<$blockCount-1 ? $blockSize : (strlen($plaintext)-1)%$blockSize+1;
$cipherByte = array();
for ($i=0; $i<$blockLength; $i++) { // -- xor plaintext with ciphered counter byte-by-byte --
$cipherByte[$i] = $cipherCntr[$i] ^ ord(substr($plaintext, $b*$blockSize+$i, 1));
$cipherByte[$i] = chr($cipherByte[$i]);
}
$ciphertxt[$b] = implode('', $cipherByte); // escape troublesome characters in ciphertext
}
// implode is more efficient than repeated string concatenation
$ciphertext = $ctrTxt . implode('', $ciphertxt);
$ciphertext = base64_encode($ciphertext);
return $ciphertext;
}
/**
* Decrypt a text encrypted by AES in counter mode of operation
*
* @param ciphertext source text to be decrypted
* @param password the password to use to generate a key
* @param nBits number of bits to be used in the key (128, 192, or 256)
* @return decrypted text
*/
public static function AESDecryptCtr($ciphertext, $password, $nBits) {
$blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES
if (!($nBits==128 || $nBits==192 || $nBits==256)) return ''; // standard allows 128/192/256 bit keys
$ciphertext = base64_decode($ciphertext);
// use AES to encrypt password (mirroring encrypt routine)
$nBytes = $nBits/8; // no bytes in key
$pwBytes = array();
for ($i=0; $i<$nBytes; $i++) $pwBytes[$i] = ord(substr($password,$i,1)) & 0xff;
$key = self::Cipher($pwBytes, self::KeyExpansion($pwBytes));
$key = array_merge($key, array_slice($key, 0, $nBytes-16)); // expand key to 16/24/32 bytes long
// recover nonce from 1st element of ciphertext
$counterBlock = array();
$ctrTxt = substr($ciphertext, 0, 8);
for ($i=0; $i<8; $i++) $counterBlock[$i] = ord(substr($ctrTxt,$i,1));
// generate key schedule
$keySchedule = self::KeyExpansion($key);
// separate ciphertext into blocks (skipping past initial 8 bytes)
$nBlocks = ceil((strlen($ciphertext)-8) / $blockSize);
$ct = array();
for ($b=0; $b<$nBlocks; $b++) $ct[$b] = substr($ciphertext, 8+$b*$blockSize, 16);
$ciphertext = $ct; // ciphertext is now array of block-length strings
// plaintext will get generated block-by-block into array of block-length strings
$plaintxt = array();
for ($b=0; $b<$nBlocks; $b++) {
// set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)
for ($c=0; $c<4; $c++) $counterBlock[15-$c] = self::urs($b, $c*8) & 0xff;
for ($c=0; $c<4; $c++) $counterBlock[15-$c-4] = self::urs(($b+1)/0x100000000-1, $c*8) & 0xff;
$cipherCntr = self::Cipher($counterBlock, $keySchedule); // encrypt counter block
$plaintxtByte = array();
for ($i=0; $i<strlen($ciphertext[$b]); $i++) {
// -- xor plaintext with ciphered counter byte-by-byte --
$plaintxtByte[$i] = $cipherCntr[$i] ^ ord(substr($ciphertext[$b],$i,1));
$plaintxtByte[$i] = chr($plaintxtByte[$i]);
}
$plaintxt[$b] = implode('', $plaintxtByte);
}
// join array of blocks into single plaintext string
$plaintext = implode('',$plaintxt);
return $plaintext;
}
/**
* AES decryption in CBC mode. This is the standard mode (the CTR methods
* actually use Rijndael-128 in CTR mode, which - technically - isn't AES).
*
* Supports AES-128, AES-192 and AES-256. It supposes that the last 4 bytes
* contained a little-endian unsigned long integer representing the unpadded
* data length.
*
* @since 3.0.1
* @author Nicholas K. Dionysopoulos
*
* @param string $ciphertext The data to encrypt
* @param string $password Encryption password
* @param int $nBits Encryption key size. Can be 128, 192 or 256
* @return string The plaintext
*/
public static function AESDecryptCBC($ciphertext, $password, $nBits = 128)
{
if (!($nBits==128 || $nBits==192 || $nBits==256)) return false; // standard allows 128/192/256 bit keys
if(!function_exists('mcrypt_module_open')) return false;
// Try to fetch cached key/iv or create them if they do not exist
$lookupKey = $password.'-'.$nBits;
if(array_key_exists($lookupKey, self::$passwords))
{
$key = self::$passwords[$lookupKey]['key'];
$iv = self::$passwords[$lookupKey]['iv'];
}
else
{
// use AES itself to encrypt password to get cipher key (using plain password as source for
// key expansion) - gives us well encrypted key
$nBytes = $nBits/8; // no bytes in key
$pwBytes = array();
for ($i=0; $i<$nBytes; $i++) $pwBytes[$i] = ord(substr($password,$i,1)) & 0xff;
$key = self::Cipher($pwBytes, self::KeyExpansion($pwBytes));
$key = array_merge($key, array_slice($key, 0, $nBytes-16)); // expand key to 16/24/32 bytes long
$newKey = '';
foreach($key as $int) { $newKey .= chr($int); }
$key = $newKey;
// Create an Initialization Vector (IV) based on the password, using the same technique as for the key
$nBytes = 16; // AES uses a 128 -bit (16 byte) block size, hence the IV size is always 16 bytes
$pwBytes = array();
for ($i=0; $i<$nBytes; $i++) $pwBytes[$i] = ord(substr($password,$i,1)) & 0xff;
$iv = self::Cipher($pwBytes, self::KeyExpansion($pwBytes));
$newIV = '';
foreach($iv as $int) { $newIV .= chr($int); }
$iv = $newIV;
self::$passwords[$lookupKey]['key'] = $key;
self::$passwords[$lookupKey]['iv'] = $iv;
}
// Read the data size
$data_size = unpack('V', substr($ciphertext,-4) );
// Decrypt
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($td, $key, $iv);
$plaintext = mdecrypt_generic($td, substr($ciphertext,0,-4));
mcrypt_generic_deinit($td);
// Trim padding, if necessary
if(strlen($plaintext) > $data_size)
{
$plaintext = substr($plaintext, 0, $data_size);
}
return $plaintext;
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* The Master Setup will read the configuration parameters from restoration.php or
* the JSON-encoded "configuration" input variable and return the status.
*
* @return bool True if the master configuration was applied to the Factory object
*/
function masterSetup()
{
// ------------------------------------------------------------
// 1. Import basic setup parameters
// ------------------------------------------------------------
$ini_data = null;
// In restore.php mode, require restoration.php or fail
if (!defined('KICKSTART'))
{
// This is the standalone mode, used by Akeeba Backup Professional. It looks for a restoration.php
// file to perform its magic. If the file is not there, we will abort.
$setupFile = 'restoration.php';
if (!file_exists($setupFile))
{
AKFactory::set('kickstart.enabled', false);
return false;
}
// Load restoration.php. It creates a global variable named $restoration_setup
require_once $setupFile;
$ini_data = $restoration_setup;
if (empty($ini_data))
{
// No parameters fetched. Darn, how am I supposed to work like that?!
AKFactory::set('kickstart.enabled', false);
return false;
}
AKFactory::set('kickstart.enabled', true);
}
else
{
// Maybe we have $restoration_setup defined in the head of kickstart.php
global $restoration_setup;
if (!empty($restoration_setup) && !is_array($restoration_setup))
{
$ini_data = AKText::parse_ini_file($restoration_setup, false, true);
}
elseif (is_array($restoration_setup))
{
$ini_data = $restoration_setup;
}
}
// Import any data from $restoration_setup
if (!empty($ini_data))
{
foreach ($ini_data as $key => $value)
{
AKFactory::set($key, $value);
}
AKFactory::set('kickstart.enabled', true);
}
// Reinitialize $ini_data
$ini_data = null;
// ------------------------------------------------------------
// 2. Explode JSON parameters into $_REQUEST scope
// ------------------------------------------------------------
// Detect a JSON string in the request variable and store it.
$json = getQueryParam('json', null);
// Remove everything from the request, post and get arrays
if (!empty($_REQUEST))
{
foreach ($_REQUEST as $key => $value)
{
unset($_REQUEST[$key]);
}
}
if (!empty($_POST))
{
foreach ($_POST as $key => $value)
{
unset($_POST[$key]);
}
}
if (!empty($_GET))
{
foreach ($_GET as $key => $value)
{
unset($_GET[$key]);
}
}
// Decrypt a possibly encrypted JSON string
$password = AKFactory::get('kickstart.security.password', null);
if (!empty($json))
{
if (!empty($password))
{
$json = AKEncryptionAES::AESDecryptCtr($json, $password, 128);
if (empty($json))
{
die('###{"status":false,"message":"Invalid login"}###');
}
}
// Get the raw data
$raw = json_decode($json, true);
if (!empty($password) && (empty($raw)))
{
die('###{"status":false,"message":"Invalid login"}###');
}
// Pass all JSON data to the request array
if (!empty($raw))
{
foreach ($raw as $key => $value)
{
$_REQUEST[$key] = $value;
}
}
}
elseif (!empty($password))
{
die('###{"status":false,"message":"Invalid login"}###');
}
// ------------------------------------------------------------
// 3. Try the "factory" variable
// ------------------------------------------------------------
// A "factory" variable will override all other settings.
$serialized = getQueryParam('factory', null);
if (!is_null($serialized))
{
// Get the serialized factory
AKFactory::unserialize($serialized);
AKFactory::set('kickstart.enabled', true);
return true;
}
// ------------------------------------------------------------
// 4. Try the configuration variable for Kickstart
// ------------------------------------------------------------
if (defined('KICKSTART'))
{
$configuration = getQueryParam('configuration');
if (!is_null($configuration))
{
// Let's decode the configuration from JSON to array
$ini_data = json_decode($configuration, true);
}
else
{
// Neither exists. Enable Kickstart's interface anyway.
$ini_data = array('kickstart.enabled' => true);
}
// Import any INI data we might have from other sources
if (!empty($ini_data))
{
foreach ($ini_data as $key => $value)
{
AKFactory::set($key, $value);
}
AKFactory::set('kickstart.enabled', true);
return true;
}
}
}
/**
* Akeeba Restore
* A JSON-powered JPA, JPS and ZIP archive extraction library
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / Akeeba Ltd.
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
// Mini-controller for restore.php
if(!defined('KICKSTART'))
{
// The observer class, used to report number of files and bytes processed
class RestorationObserver extends AKAbstractPartObserver
{
public $compressedTotal = 0;
public $uncompressedTotal = 0;
public $filesProcessed = 0;
public function update($object, $message)
{
if(!is_object($message)) return;
if( !array_key_exists('type', get_object_vars($message)) ) return;
if( $message->type == 'startfile' )
{
$this->filesProcessed++;
$this->compressedTotal += $message->content->compressed;
$this->uncompressedTotal += $message->content->uncompressed;
}
}
public function __toString()
{
return __CLASS__;
}
}
// Import configuration
masterSetup();
$retArray = array(
'status' => true,
'message' => null
);
$enabled = AKFactory::get('kickstart.enabled', false);
if($enabled)
{
$task = getQueryParam('task');
switch($task)
{
case 'ping':
// ping task - realy does nothing!
$timer = AKFactory::getTimer();
$timer->enforce_min_exec_time();
break;
case 'startRestore':
AKFactory::nuke(); // Reset the factory
// Let the control flow to the next step (the rest of the code is common!!)
case 'stepRestore':
$engine = AKFactory::getUnarchiver(); // Get the engine
$observer = new RestorationObserver(); // Create a new observer
$engine->attach($observer); // Attach the observer
$engine->tick();
$ret = $engine->getStatusArray();
if( $ret['Error'] != '' )
{
$retArray['status'] = false;
$retArray['done'] = true;
$retArray['message'] = $ret['Error'];
}
elseif( !$ret['HasRun'] )
{
$retArray['files'] = $observer->filesProcessed;
$retArray['bytesIn'] = $observer->compressedTotal;
$retArray['bytesOut'] = $observer->uncompressedTotal;
$retArray['status'] = true;
$retArray['done'] = true;
}
else
{
$retArray['files'] = $observer->filesProcessed;
$retArray['bytesIn'] = $observer->compressedTotal;
$retArray['bytesOut'] = $observer->uncompressedTotal;
$retArray['status'] = true;
$retArray['done'] = false;
$retArray['factory'] = AKFactory::serialize();
}
break;
case 'finalizeRestore':
$root = AKFactory::get('kickstart.setup.destdir');
// Remove the installation directory
recursive_remove_directory( $root.'/installation' );
$postproc = AKFactory::getPostProc();
// Rename htaccess.bak to .htaccess
if(file_exists($root.'/htaccess.bak'))
{
if( file_exists($root.'/.htaccess') )
{
$postproc->unlink($root.'/.htaccess');
}
$postproc->rename( $root.'/htaccess.bak', $root.'/.htaccess' );
}
// Rename htaccess.bak to .htaccess
if(file_exists($root.'/web.config.bak'))
{
if( file_exists($root.'/web.config') )
{
$postproc->unlink($root.'/web.config');
}
$postproc->rename( $root.'/web.config.bak', $root.'/web.config' );
}
// Remove restoration.php
$basepath = KSROOTDIR;
$basepath = rtrim( str_replace('\\','/',$basepath), '/' );
if(!empty($basepath)) $basepath .= '/';
$postproc->unlink( $basepath.'restoration.php' );
// Import a custom finalisation file
if (file_exists(dirname(__FILE__) . '/restore_finalisation.php'))
{
include_once dirname(__FILE__) . '/restore_finalisation.php';
}
// Run a custom finalisation script
if (function_exists('finalizeRestore'))
{
finalizeRestore($root, $basepath);
}
break;
default:
// Invalid task!
$enabled = false;
break;
}
}
// Maybe we weren't authorized or the task was invalid?
if(!$enabled)
{
// Maybe the user failed to enter any information
$retArray['status'] = false;
$retArray['message'] = AKText::_('ERR_INVALID_LOGIN');
}
// JSON encode the message
$json = json_encode($retArray);
// Do I have to encrypt?
$password = AKFactory::get('kickstart.security.password', null);
if(!empty($password))
{
$json = AKEncryptionAES::AESEncryptCtr($json, $password, 128);
}
// Return the message
echo "###$json###";
}
// ------------ lixlpixel recursive PHP functions -------------
// recursive_remove_directory( directory to delete, empty )
// expects path to directory and optional TRUE / FALSE to empty
// of course PHP has to have the rights to delete the directory
// you specify and all files and folders inside the directory
// ------------------------------------------------------------
function recursive_remove_directory($directory)
{
// if the path has a slash at the end we remove it here
if(substr($directory,-1) == '/')
{
$directory = substr($directory,0,-1);
}
// if the path is not valid or is not a directory ...
if(!file_exists($directory) || !is_dir($directory))
{
// ... we return false and exit the function
return FALSE;
// ... if the path is not readable
}elseif(!is_readable($directory))
{
// ... we return false and exit the function
return FALSE;
// ... else if the path is readable
}else{
// we open the directory
$handle = opendir($directory);
$postproc = AKFactory::getPostProc();
// and scan through the items inside
while (FALSE !== ($item = readdir($handle)))
{
// if the filepointer is not the current directory
// or the parent directory
if($item != '.' && $item != '..')
{
// we build the new path to delete
$path = $directory.'/'.$item;
// if the new path is a directory
if(is_dir($path))
{
// we call this function with the new path
recursive_remove_directory($path);
// if the new path is a file
}else{
// we remove the file
$postproc->unlink($path);
}
}
}
// close the directory
closedir($handle);
// try to delete the now empty directory
if(!$postproc->rmdir($directory))
{
// return false if not possible
return FALSE;
}
// return success
return TRUE;
}
}
/**
* Akeeba Kickstart
* A JSON-powered archive extraction tool
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / AkeebaBackup.com
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
class AKKickstartUtils
{
/**
* Guess the best path containing backup archives. The default strategy is check in the current directory first,
* then attempt to find an Akeeba Backup for Joomla!, Akeeba Solo or Akeeba Backup for WordPress default backup
* output directory under the current root. The first one containing backup archives wins.
*
* @return string The path to get archives from
*/
public static function getBestArchivePath()
{
$basePath = self::getPath();
$basePathSlash = (empty($basePath) ? '.' : rtrim($basePath, '/\\')) . '/';
$paths = array(
$basePath,
$basePathSlash . 'administrator/components/com_akeeba/backup',
$basePathSlash . 'backups',
$basePathSlash . 'wp-content/plugins/akeebabackupwp/app/backups',
);
foreach ($paths as $path)
{
$archives = self::findArchives($path);
if (!empty($archives))
{
return $path;
}
}
return $basePath;
}
/**
* Gets the directory the file is in
*
* @return string
*/
public static function getPath()
{
$path = KSROOTDIR;
$path = rtrim(str_replace('\\', '/', $path), '/');
if (!empty($path))
{
$path .= '/';
}
return $path;
}
/**
* Scans the current directory for archive files (JPA, JPS and ZIP format)
*
* @param string $path The path to look for archives. null for automatic path
*
* @return array
*/
public static function findArchives($path)
{
$ret = array();
if (empty($path))
{
$path = self::getPath();
}
if (empty($path))
{
$path = '.';
}
$dh = @opendir($path);
if ($dh === false)
{
return $ret;
}
while (false !== $file = @readdir($dh))
{
$dotpos = strrpos($file, '.');
if ($dotpos === false)
{
continue;
}
if ($dotpos == strlen($file))
{
continue;
}
$extension = strtolower(substr($file, $dotpos + 1));
if (in_array($extension, array('jpa', 'zip', 'jps')))
{
$ret[] = $file;
}
}
closedir($dh);
if (!empty($ret))
{
return $ret;
}
// On some hosts using opendir doesn't work. Let's try Dir instead
$d = dir($path);
while (false != ($file = $d->read()))
{
$dotpos = strrpos($file, '.');
if ($dotpos === false)
{
continue;
}
if ($dotpos == strlen($file))
{
continue;
}
$extension = strtolower(substr($file, $dotpos + 1));
if (in_array($extension, array('jpa', 'zip', 'jps')))
{
$ret[] = $file;
}
}
return $ret;
}
/**
* Scans the current directory for archive files and returns them as <OPTION> tags
*
* @param string $path The path to look for archives. null for automatic path
*
* @return string
*/
public static function getArchivesAsOptions($path = null)
{
$ret = '';
$archives = self::findArchives($path);
if (empty($archives))
{
return $ret;
}
foreach ($archives as $file)
{
//$file = htmlentities($file);
$ret .= '<option value="' . $file . '">' . $file . '</option>' . "\n";
}
return $ret;
}
}
/**
* Akeeba Kickstart
* A JSON-powered archive extraction tool
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / AkeebaBackup.com
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
class ExtractionObserver extends AKAbstractPartObserver
{
public $compressedTotal = 0;
public $uncompressedTotal = 0;
public $filesProcessed = 0;
public $totalSize = null;
public $fileList = null;
public $lastFile = '';
public function update($object, $message)
{
if(!is_object($message)) return;
if( !array_key_exists('type', get_object_vars($message)) ) return;
if( $message->type == 'startfile' )
{
$this->lastFile = $message->content->file;
$this->filesProcessed++;
$this->compressedTotal += $message->content->compressed;
$this->uncompressedTotal += $message->content->uncompressed;
}
elseif( $message->type == 'totalsize' )
{
$this->totalSize = $message->content->totalsize;
$this->fileList = $message->content->filelist;
}
}
public function __toString()
{
return __CLASS__;
}
}
/**
* Akeeba Kickstart
* A JSON-powered archive extraction tool
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / AkeebaBackup.com
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
function callExtraFeature($method = null, array $params = array())
{
static $extraFeatureObjects = null;
if(!is_array($extraFeatureObjects)) {
$extraFeatureObjects = array();
$allClasses = get_declared_classes();
foreach($allClasses as $class) {
if(substr($class, 0, 9) == 'AKFeature') {
$extraFeatureObjects[] = new $class;
}
}
}
if(is_null($method)) {
return;
}
if(empty($extraFeatureObjects)) {
return;
}
$result = null;
foreach($extraFeatureObjects as $o) {
if(!method_exists($o, $method)) {
continue;
}
$result = call_user_func(array($o, $method), $params);
}
return $result;
}
/**
* Akeeba Kickstart
* A JSON-powered archive extraction tool
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / AkeebaBackup.com
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
function TranslateWinPath($p_path)
{
$is_unc = false;
if (KSWINDOWS)
{
// Is this a UNC path?
$is_unc = (substr($p_path, 0, 2) == '\\\\') || (substr($p_path, 0, 2) == '//');
// Change potential windows directory separator
if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0, 1) == '\\'))
{
$p_path = strtr($p_path, '\\', '/');
}
}
// Remove multiple slashes
$p_path = str_replace('///', '/', $p_path);
$p_path = str_replace('//', '/', $p_path);
// Fix UNC paths
if ($is_unc)
{
$p_path = '//' . ltrim($p_path, '/');
}
return $p_path;
}
/**
* FTP Functions
*/
function getListing($directory, $host, $port, $username, $password, $passive, $ssl)
{
$directory = resolvePath($directory);
$dir = $directory;
// Parse directory to parts
$parsed_dir = trim($dir,'/');
$parts = empty($parsed_dir) ? array() : explode('/', $parsed_dir);
// Find the path to the parent directory
if(!empty($parts)) {
$copy_of_parts = $parts;
array_pop($copy_of_parts);
if(!empty($copy_of_parts)) {
$parent_directory = '/' . implode('/', $copy_of_parts);
} else {
$parent_directory = '/';
}
} else {
$parent_directory = '';
}
// Connect to the server
if($ssl) {
$con = @ftp_ssl_connect($host, $port);
} else {
$con = @ftp_connect($host, $port);
}
if($con === false) {
return array(
'error' => 'FTPBROWSER_ERROR_HOSTNAME'
);
}
// Login
$result = @ftp_login($con, $username, $password);
if($result === false) {
return array(
'error' => 'FTPBROWSER_ERROR_USERPASS'
);
}
// Set the passive mode -- don't care if it fails, though!
@ftp_pasv($con, $passive);
// Try to chdir to the specified directory
if(!empty($dir)) {
$result = @ftp_chdir($con, $dir);
if($result === false) {
return array(
'error' => 'FTPBROWSER_ERROR_NOACCESS'
);
}
}
// Get a raw directory listing (hoping it's a UNIX server!)
$list = @ftp_rawlist($con,'.');
ftp_close($con);
if($list === false) {
return array(
'error' => 'FTPBROWSER_ERROR_UNSUPPORTED'
);
}
// Parse the raw listing into an array
$folders = parse_rawlist($list);
return array(
'error' => '',
'list' => $folders,
'breadcrumbs' => $parts,
'directory' => $directory,
'parent' => $parent_directory
);
}
function parse_rawlist($list)
{
$folders = array();
foreach($list as $v)
{
$info = array();
$vinfo = preg_split("/[\s]+/", $v, 9);
if ($vinfo[0] !== "total") {
$perms = $vinfo[0];
if(substr($perms,0,1) == 'd') {
$folders[] = $vinfo[8];
}
}
}
asort($folders);
return $folders;
}
function getSftpListing($directory, $host, $port, $username, $password)
{
$directory = resolvePath($directory);
$dir = $directory;
// Parse directory to parts
$parsed_dir = trim($dir,'/');
$parts = empty($parsed_dir) ? array() : explode('/', $parsed_dir);
// Find the path to the parent directory
if(!empty($parts)) {
$copy_of_parts = $parts;
array_pop($copy_of_parts);
if(!empty($copy_of_parts)) {
$parent_directory = '/' . implode('/', $copy_of_parts);
} else {
$parent_directory = '/';
}
} else {
$parent_directory = '';
}
// Initialise
$connection = null;
$sftphandle = null;
// Open a connection
if(!function_exists('ssh2_connect'))
{
return array(
'error' => AKText::_('SFTP_NO_SSH2')
);
}
$connection = ssh2_connect($host, $port);
if ($connection === false)
{
return array(
'error' => AKText::_('SFTP_WRONG_USER')
);
}
if(!ssh2_auth_password($connection, $username, $password))
{
return array(
'error' => AKText::_('SFTP_WRONG_USER')
);
}
$sftphandle = ssh2_sftp($connection);
if($sftphandle === false)
{
return array(
'error' => AKText::_('SFTP_NO_FTP_SUPPORT')
);
}
// Get a raw directory listing (hoping it's a UNIX server!)
$list = array();
$dir = ltrim($dir, '/');
$handle = opendir("ssh2.sftp://$sftphandle/$dir");
if (!is_resource($handle))
{
return array(
'error' => AKText::_('SFTPBROWSER_ERROR_NOACCESS')
);
}
while (($entry = readdir($handle)) !== false)
{
if (!is_dir("ssh2.sftp://$sftphandle/$dir/$entry"))
{
continue;
}
$list[] = $entry;
}
closedir($handle);
if (!empty($list))
{
asort($list);
}
return array(
'error' => '',
'list' => $list,
'breadcrumbs' => $parts,
'directory' => $directory,
'parent' => $parent_directory
);
}
/**
* Simple function to resolve relative paths.
* Note that it is unable to resolve pathnames any higher than the present working directory.
* I.E. It doesn't know about any directory names that you don't tell it about; hence: ../../foo becomes foo.
*
* @param $filename
*
* @return string
*/
function resolvePath($filename)
{
$filename = str_replace('//', '/', $filename);
$parts = explode('/', $filename);
$out = array();
foreach ($parts as $part){
if ($part == '.') continue;
if ($part == '..') {
array_pop($out);
continue;
}
$out[] = $part;
}
return implode('/', $out);
}
function createStealthURL()
{
$filename = AKFactory::get('kickstart.stealth.url', '');
// We need an HTML file!
if(empty($filename)) return;
// Make sure it ends in .html or .htm
$filename = basename($filename);
if( (strtolower(substr($filename,-5)) != '.html') && (strtolower(substr($filename,-4)) != '.htm') ) return;
$filename_quoted = str_replace('.','\\.',$filename);
$rewrite_base = trim(dirname(AKFactory::get('kickstart.stealth.url', '')),'/');
// Get the IP
$userIP = $_SERVER['REMOTE_ADDR'];
$userIP = str_replace('.', '\.', $userIP);
// Get the .htaccess contents
$stealthHtaccess = <<<ENDHTACCESS
RewriteEngine On
RewriteBase /$rewrite_base
RewriteCond %{REMOTE_HOST} !$userIP
RewriteCond %{REQUEST_URI} !$filename_quoted
RewriteCond %{REQUEST_URI} !(\.png|\.jpg|\.gif|\.jpeg|\.bmp|\.swf|\.css|\.js)$
RewriteRule (.*) $filename [R=307,L]
ENDHTACCESS;
// Write the new .htaccess, removing the old one first
$postproc = AKFactory::getpostProc();
$postproc->unlink('.htaccess');
$tempfile = $postproc->processFilename('.htaccess');
@file_put_contents($tempfile, $stealthHtaccess);
$postproc->process();
}
/**
* Akeeba Kickstart
* A JSON-powered archive extraction tool
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / AkeebaBackup.com
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
function echoCSS() {
echo <<<CSS
html {
background: #e9e9e9;
font-size: 62.5%;
}
body {
font-size: 14px;
font-size: 1.4rem;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
text-rendering: optimizelegibility;
background: transparent;
color:#555;
width:90%;
max-width:980px;
margin: 0 auto;
}
#page-container {
position:relative;
margin:5% 0;
background: #f9f9f9;
border: 1px solid #777;
border: 1px solid rgba(0,0,0,.2);
-webkit-box-shadow: 0px 0px 10px rgba(0,0,0,.1);
-moz-box-shadow: 0px 0px 10px rgba(0,0,0,.1);
box-shadow: 0px 0px 10px rgba(0,0,0,.1);
}
#header {
color: #555;
text-shadow: 0 1px #fff;
background: #f2f5f6;
background: -moz-linear-gradient(top, #f2f5f6 0%, #e3eaed 37%, #c8d7dc 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f2f5f6), color-stop(37%,#e3eaed), color-stop(100%,#c8d7dc));
background: -webkit-linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
background: -o-linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
background: -ms-linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
background: linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
-moz-background-clip: padding;
-webkit-background-clip: padding-box;
background-clip: padding-box;
margin-bottom: 0.7em;
border-bottom: 1px solid #ddd;
border-bottom: 1px solid rgba(0,0,0,.2);
padding:.25em;
font-size: 32px;
font-size: 3.2rem;
line-height: 1.2;
text-align: center;
}
#footer {
font-size: 8pt;
color: #233b53;
text-align: center;
border-top: 1px solid #ddd;
border-top: 1px solid rgba(0,0,0,.05);
padding: 1em 2em;
background: #deefff;
background: -moz-linear-gradient(top, #deefff 0%, #98bede 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#deefff), color-stop(100%,#98bede));
background: -webkit-linear-gradient(top, #deefff 0%,#98bede 100%);
background: -o-linear-gradient(top, #deefff 0%,#98bede 100%);
background: -ms-linear-gradient(top, #deefff 0%,#98bede 100%);
background: linear-gradient(top, #deefff 0%,#98bede 100%);
clear: both;
}
#error, .error {
display: none;
border: solid #cc0000;
border-width: 2px 0;
background: rgb(255,255,136);
background: -moz-linear-gradient(top, rgba(255,255,136,1) 0%, rgba(255,255,136,1) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,136,1)), color-stop(100%,rgba(255,255,136,1)));
background: -webkit-linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
background: -o-linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
background: -ms-linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
background: linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
color: #990000;
padding:2em 2em 1em;
margin-bottom: 1.15em;
text-align:center;
text-transform: uppercase;
}
#errorMessage, .errorMessage {
text-transform: none;
}
#error h3, .error h3 {
margin: 0;
padding: 0;
font-size: 12pt;
}
.clr {
clear: both;
}
.circle {
display: block;
float: left;
-moz-border-radius: 2em;
-webkit-border-radius: 2em;
border: 2px solid #e5e5e5;
font-weight: bold;
font-size: 18px;
font-size: 1.8rem;
line-height:1.5em;
color: #fff;
height: 1.5em;
width: 1.5em;
margin: 0.75em;
text-align: center;
background: rgb(35,83,138);
background: -moz-linear-gradient(top, rgba(35,83,138,1) 0%, rgba(167,207,223,1) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(35,83,138,1)), color-stop(100%,rgba(167,207,223,1)));
background: -webkit-linear-gradient(top, rgba(35,83,138,1) 0%,rgba(167,207,223,1) 100%);
background: -o-linear-gradient(top, rgba(35,83,138,1) 0%,rgba(167,207,223,1) 100%);
background: -ms-linear-gradient(top, rgba(35,83,138,1) 0%,rgba(167,207,223,1) 100%);
background: linear-gradient(top, rgba(35,83,138,1) 0%,rgba(167,207,223,1) 100%);
-webkit-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.8) inset, 0px -1px 2px rgba(255,255,255,.9) inset, 0px 0px 1px rgba(0,0,0,.7); 0 -1px 1px rgba(0,0,0,.4);
-moz-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.8) inset, 0px -1px 2px rgba(255,255,255,.9) inset, 0px 0px 1px rgba(0,0,0,.7); 0 -1px 1px rgba(0,0,0,.4);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.8) inset, 0px -1px 2px rgba(255,255,255,.9) inset, 0px 0px 1px rgba(0,0,0,.7); 0 -1px 1px rgba(0,0,0,.4);
}
.area-container {
margin: 1em 4em;
}
#page2a .area-container {
margin: 1em 0;
}
#runInstaller,
#runCleanup,
#gotoSite,
#gotoAdministrator,
#gotoPostRestorationRroubleshooting {
margin: 0 2em 1.3em;
}
h2 {
font-size: 24px;
font-size: 2.4rem;
font-weight: normal;
line-height: 1.3;
border: solid #ddd;
text-shadow: 0px 1px #fff;
border-top: 1px solid rgba(0,0,0,.05);
border-bottom: 1px solid rgba(0,0,0,.2);
border-left:none;
border-right:none;
padding: 0.5em 0;
background: #f2f5f6;
background: -moz-linear-gradient(top, #f2f5f6 0%, #e3eaed 37%, #c8d7dc 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f2f5f6), color-stop(37%,#e3eaed), color-stop(100%,#c8d7dc));
background: -webkit-linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
background: -o-linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
background: -ms-linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
background: linear-gradient(top, #f2f5f6 0%,#e3eaed 37%,#c8d7dc 100%);
}
#preextraction h2 {
margin-top:0;
border-top:0;
text-align:center;
}
input,
select,
textarea {
font-size : 100%;
margin : 0;
vertical-align : baseline;
*vertical-align: middle;
}
button,
input {
line-height : normal;
font-weight:normal;
*overflow: visible;
}
input,
select,
textarea {
background:#fff;
color:#777;
font-size: 16px;
font-size: 1.6rem;
border:1px solid #d5d5d5;
-webkit-border-radius: .25em;
-moz-border-radius: .25em;
border-radius: .25em;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
width:50%;
padding:0 0 0 .5em;
}
input[type="checkbox"] {
width:auto;
}
.field {
height:1.5em;
}
label {
display:inline-block;
width:30%;
font-size: 85%;
font-weight: normal;
text-transform: uppercase;
cursor : pointer;
color: #777;
margin:.5em 0;
}
input:focus, input:hover {
background-color: #fffbb3;
}
.button {
display: inline-block;
margin: 1em .25em;
text-transform: uppercase;
padding: 1em 2em;
background: #2cb12c;
color:#fff;
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.2), 0 1px rgba(0, 0, 0, 0.4);
-webkit-box-shadow: 0 1px 3px rgba(255, 255, 255, 0.5) inset, -1px 2px 2px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 1px 3px rgba(255, 255, 255, 0.5) inset, -1px 2px 2px rgba(0, 0, 0, 0.2);
box-shadow: 0 1px 3px rgba(255, 255, 255, 0.5) inset, -1px 2px 2px rgba(0, 0, 0, 0.2);
background: -moz-linear-gradient(top, #2cb12c 0%, #259625 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#2cb12c), color-stop(100%,#259625));
background: -webkit-linear-gradient(top, #2cb12c 0%,#259625 100%);
background: -o-linear-gradient(top, #2cb12c 0%,#259625 100%);
background: -ms-linear-gradient(top, #2cb12c 0%,#259625 100%);
background: linear-gradient(top, #2cb12c 0%,#259625 100%);
border: solid #ddd;
border: 1px solid rgba(0,0,0,.1);
cursor: pointer;
-webkit-border-radius: .25em;
-moz-border-radius: .25em;
border-radius: .25em;
-webkit-transition: 0.3s linear all;
-moz-transition: 0.3s linear all;
-ms-transition: 0.3s linear all;
-o-transition: 0.3s linear all;
transition: 0.3s linear all;
}
#checkFTPTempDir.button,
#resetFTPTempDir.button,
#testFTP.button,
#browseFTP,
#reloadArchives,
#notWorking.button {
padding: .5em 1em;
text-transform: none;
}
.button:hover {
background: #259625;
background: -moz-linear-gradient(top, #259625 0%, #2cb12c 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#259625), color-stop(100%,#2cb12c));
background: -webkit-linear-gradient(top, #259625 0%,#2cb12c 100%);
background: -o-linear-gradient(top, #259625 0%,#2cb12c 100%);
background: -ms-linear-gradient(top, #259625 0%,#2cb12c 100%);
background: linear-gradient(top, #259625 0%,#2cb12c 100%);
}
.button:active {
background: #3c3;
color: #444;
text-shadow: 0 1px #fff;
border: solid #ccc;
border: 1px solid rgba(0,0,0,.3);
-webkit-box-shadow: 0 1px 3px rgba(0,0,0, 0.5) inset;
-moz-box-shadow: 0 1px 3px rgba(0,0,0, 0.5) inset;
box-shadow: 0 1px 3px rgba(0,0,0, 0.5) inset;
}
#notWorking.button, .bluebutton {
text-decoration: none;
background: #7abcff;
background: -moz-linear-gradient(top, #7abcff 0%, #60abf8 44%, #4096ee 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7abcff), color-stop(44%,#60abf8), color-stop(100%,#4096ee));
background: -webkit-linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
background: -o-linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
background: -ms-linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
background: linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
}
#notWorking.button:hover, .bluebutton:hover {
background: #4096ee;
background: -moz-linear-gradient(top, #4096ee 0%, #60abf8 56%, #7abcff 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#4096ee), color-stop(56%,#60abf8), color-stop(100%,#7abcff));
background: -webkit-linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: -o-linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: -ms-linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
}
#notWorking.button:active, .bluebutton:active {
background: #7abcff;
}
.loprofile {
padding: 0.5em 1em;
font-size: 80%;
}
.black_overlay{
display: none;
position: absolute;
top: 0%;
left: 0%;
width: 100%;
height: 100%;
background-color: black;
z-index:1001;
-moz-opacity: 0.8;
opacity:.80;
filter: alpha(opacity=80);
}
.white_content {
display: none;
position: absolute;
padding: 0 0 1em;
background: #fff;
border: 1px solid #ddd;
border: 1px solid rgba(0,0,0,.3);
z-index:1002;
overflow: hidden;
}
.white_content a{
margin-left:4em;
}
ol {
margin:0 2em;
padding:0 2em 1em;
}
li {
margin : 0 0 .5em;
}
#genericerror {
background-color: #f0f000 !important;
border: 4px solid #fcc !important;
}
#genericerrorInner {
font-size: 110%;
color: #33000;
}
#warn-not-close, .warn-not-close {
padding: 0.2em 0.5em;
text-align: center;
background: #fcfc00;
font-size: smaller;
font-weight: bold;
}
#progressbar, .progressbar {
display: block;
width: 80%;
height: 32px;
border: 1px solid #ccc;
margin: 1em 10% 0.2em;
-moz-border-radius: .25em;
-webkit-border-radius: .25em;
border-radius: .25em;
}
#progressbar-inner, .progressbar-inner {
display: block;
width: 100%;
height: 100%;
background: #4096ee;
background: -moz-linear-gradient(left, #4096ee 0%, #60abf8 56%, #7abcff 100%);
background: -webkit-gradient(linear, left top, right top, color-stop(0%,#4096ee), color-stop(56%,#60abf8), color-stop(100%,#7abcff));
background: -webkit-linear-gradient(left, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: -o-linear-gradient(left, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: -ms-linear-gradient(left, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: linear-gradient(left, #4096ee 0%,#60abf8 56%,#7abcff 100%);
}
#currentFile {
font-family: Consolas, "Courier New", Courier, monospace;
font-size: 9pt;
height: 10pt;
overflow: hidden;
text-overflow: ellipsis;
background: #ccc;
margin: 0 10% 1em;
padding:.125em;
}
#extractionComplete {
}
#warningsContainer {
border-bottom: 2px solid brown;
border-left: 2px solid brown;
border-right: 2px solid brown;
padding: 5px 0;
background: #ffffcc;
-webkit-border-bottom-right-radius: 5px;
-webkit-border-bottom-left-radius: 5px;
-moz-border-radius-bottomleft: 5px;
-moz-border-radius-bottomright: 5px;
}
#warningsHeader h2 {
color: black;
text-shadow: 2px 2px 5px #999999;
border-top: 2px solid brown;
border-left: 2px solid brown;
border-right: 2px solid brown;
border-bottom: thin solid brown;
-webkit-border-top-right-radius: 5px;
-webkit-border-top-left-radius: 5px;
-moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px;
background: yellow;
font-size: large;
padding: 2px 5px;
margin: 0px;
}
#warnings {
height: 200px;
overflow-y: scroll;
}
#warnings div {
background: #eeeeee;
font-size: small;
padding: 2px 4px;
border-bottom: thin solid #333333;
}
#automode {
display: inline-block;
padding: 6pt 12pt;
background-color: #cc0000;
border: thick solid yellow;
color: white;
font-weight: bold;
font-size: 125%;
position: absolute;
float: right;
top: 1em;
right: 1em;
}
.helpme,
#warn-not-close {
background: rgb(255,255,136);
background: -moz-linear-gradient(top, rgba(255,255,136,1) 0%, rgba(255,255,136,1) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,136,1)), color-stop(100%,rgba(255,255,136,1)));
background: -webkit-linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
background: -o-linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
background: -ms-linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
background: linear-gradient(top, rgba(255,255,136,1) 0%,rgba(255,255,136,1) 100%);
padding: 0.75em 0.5em;
border: solid #febf01;
border-width: 1px 0;
text-align: center;
}
#update-notification {
margin: 1em;
padding: 0.5em;
background-color: #FF9;
color: #F33;
text-align: center;
border-radius: 20px;
border: medium solid red;
box-shadow: 5px 5px 5px black;
}
.update-notify {
font-size: 20pt;
font-weight: bold;
}
.update-links {
color: #333;
font-size: 14pt;
}
#update-dlnow {
text-decoration: none;
color: #333;
border: thin solid #333;
padding: 0.5em;
border-radius: 5px;
background-color: #f0f0f0;
text-shadow: 1px 1px 1px #999;
}
#update-dlnow:hover {
background-color: #fff;
}
#update-whatsnew {
font-size: 11pt;
color: blue;
text-decoration: underline;
}
.update-whyupdate {
color: #333;
font-size: 9pt;
}
/* FTP Browser */
.breadcrumb {background-color: #F5F5F5; border-radius: 4px; list-style: none outside none; margin: 0 0 18px; padding: 8px 15px;}
.breadcrumb > li {display: inline-block; text-shadow: 0 1px 0 #FFFFFF;}
#ak_crumbs span {padding: 1px 3px;}
#ak_crumbs a {cursor: pointer;}
#ftpBrowserFolderList a{cursor:pointer}
/* Bootstrap porting */
.table {margin-bottom: 18px;width: 100%;}
.table th, .table td {border-top: 1px solid #DDDDDD; line-height: 18px; padding: 8px; text-align: left; vertical-align: top;}
.table-striped tbody > tr:nth-child(2n+1) > td, .table-striped tbody > tr:nth-child(2n+1) > th { background-color: #F9F9F9;}
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
.ui-helper-clearfix:after { clear: both; }
.ui-helper-clearfix { zoom: 1; }
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active { text-decoration: none; }
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; }
button.ui-button-icons-only { width: 3.7em; }
/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4; }
.ui-button-text-only .ui-button-text { padding: 0; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }
/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
.ui-dialog { position: absolute; top: 0; left: 0; padding: .2em; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; display:none}
.ui-dialog .ui-dialog-titlebar-close span { display: none; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/* Component containers
----------------------------------*/
.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd; color: #222222; }
.ui-widget-content a { color: #222222; }
.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc ; color: #ffffff; font-weight: bold; }
.ui-widget-header a { color: #ffffff; }
/* Interaction states
----------------------------------*/
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited {text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover{
background: #4096ee;
background: -moz-linear-gradient(top, #4096ee 0%, #60abf8 56%, #7abcff 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#4096ee), color-stop(56%,#60abf8), color-stop(100%,#7abcff));
background: -webkit-linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: -o-linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: -ms-linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
background: linear-gradient(top, #4096ee 0%,#60abf8 56%,#7abcff 100%);
}
.ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #1d5987; text-decoration: none; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; text-decoration: none; }
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 ; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec ; color: #cd0a0a; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
.ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); } /* For IE8 - See #6059 */
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display:none}
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -khtml-border-top-left-radius: 5px; border-top-left-radius: 5px; }
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; -khtml-border-top-right-radius: 5px; border-top-right-radius: 5px; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; -khtml-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; -khtml-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
/* Overlays */
.ui-widget-overlay { background: #000000 ; opacity: .8;filter:Alpha(Opacity=80); }
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #000000 ; opacity: .8;filter:Alpha(Opacity=80); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }
.ui-button {
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
font-size: 1.4rem;
display: inline-block;
padding: .5em 1em;
margin: 1em .25em;
color:#fff;
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.2), 0 1px rgba(0, 0, 0, 0.4);
-webkit-box-shadow: 0 1px 3px rgba(255, 255, 255, 0.5) inset, -1px 2px 2px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 1px 3px rgba(255, 255, 255, 0.5) inset, -1px 2px 2px rgba(0, 0, 0, 0.2);
box-shadow: 0 1px 3px rgba(255, 255, 255, 0.5) inset, -1px 2px 2px rgba(0, 0, 0, 0.2);
text-decoration: none;
background: #7abcff;
background: -moz-linear-gradient(top, #7abcff 0%, #60abf8 44%, #4096ee 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7abcff), color-stop(44%,#60abf8), color-stop(100%,#4096ee));
background: -webkit-linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
background: -o-linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
background: -ms-linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
background: linear-gradient(top, #7abcff 0%,#60abf8 44%,#4096ee 100%);
border: solid #ddd;
border: 1px solid rgba(0,0,0,.1);
cursor: pointer;
-webkit-border-radius: .25em;
-moz-border-radius: .25em;
border-radius: .25em;
-webkit-transition: 0.3s linear all;
-moz-transition: 0.3s linear all;
-ms-transition: 0.3s linear all;
-o-transition: 0.3s linear all;
transition: 0.3s linear all;
}
CSS;
callExtraFeature('onExtraHeadCSS');
}
/**
* Akeeba Kickstart
* A JSON-powered archive extraction tool
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / AkeebaBackup.com
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
function echoHeadJavascript()
{
?>
<script type="text/javascript" language="javascript">
var akeeba_debug = <?php echo defined('KSDEBUG') ? 'true' : 'false' ?>;
var sftp_path = '<?php echo TranslateWinPath(defined('KSROOTDIR') ? KSROOTDIR : dirname(__FILE__)); ?>/';
var isJoomla = true;
/**
* Returns the version of Internet Explorer or a -1
* (indicating the use of another browser).
*
* @return integer MSIE version or -1
*/
function getInternetExplorerVersion()
{
var rv = -1; // Return value assumes failure.
if (navigator.appName == 'Microsoft Internet Explorer')
{
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
{
rv = parseFloat( RegExp.$1 );
}
}
return rv;
}
$(document).ready(function(){
// Hide 2nd Page
$('#page2').css('display','none');
// Translate the GUI
translateGUI();
// Hook interaction handlers
$(document).keyup( closeLightbox );
$('#kickstart\\.procengine').change( onChangeProcengine );
$('#kickstart\\.setup\\.sourcepath').change( onArchiveListReload );
$('#reloadArchives').click ( onArchiveListReload );
$('#checkFTPTempDir').click( oncheckFTPTempDirClick );
$('#resetFTPTempDir').click( onresetFTPTempDir );
$('#browseFTP').click( onbrowseFTP );
$('#testFTP').click( onTestFTPClick );
$('#gobutton').click( onStartExtraction );
$('#runInstaller').click( onRunInstallerClick );
$('#runCleanup').click( onRunCleanupClick );
$('#gotoSite').click(function(event){window.open('index.php','finalstepsite'); window.close();});
$('#gotoAdministrator').click(function(event){window.open('administrator/index.php','finalstepadmin'); window.close();});
$('#gotoStart').click( onGotoStartClick );
// Reset the progress bar
setProgressBar(0);
// Show warning
var msieVersion = getInternetExplorerVersion();
if((msieVersion != -1) && (msieVersion <= 8.99))
{
$('#ie7Warning').css('display','block');
}
if(!akeeba_debug) {
$('#preextraction').css('display','block');
$('#fade').css('display','block');
}
// Trigger change, so we avoid problems if the user refreshes the page
$('#kickstart\\.procengine').change();
});
var translation = {
<?php echoTranslationStrings(); ?>
}
var akeeba_ajax_url = '<?php echo defined('KSSELFNAME') ? KSSELFNAME : basename(__FILE__); ?>';
var akeeba_error_callback = onGenericError;
var akeeba_restoration_stat_inbytes = 0;
var akeeba_restoration_stat_outbytes = 0;
var akeeba_restoration_stat_files = 0;
var akeeba_restoration_stat_total = 0;
var akeeba_factory = null;
var akeeba_ftpbrowser_host = null;
var akeeba_ftpbrowser_port = 21;
var akeeba_ftpbrowser_username = null;
var akeeba_ftpbrowser_password = null;
var akeeba_ftpbrowser_passive = 1;
var akeeba_ftpbrowser_ssl = 0;
var akeeba_ftpbrowser_directory = '';
var akeeba_sftpbrowser_host = null;
var akeeba_sftpbrowser_port = 21;
var akeeba_sftpbrowser_username = null;
var akeeba_sftpbrowser_password = null;
var akeeba_sftpbrowser_pubkey = null;
var akeeba_sftpbrowser_privkey = null;
var akeeba_sftpbrowser_directory = '';
function translateGUI()
{
$('*').each(function(i,e){
transKey = $(e).text();
if(array_key_exists(transKey, translation))
{
$(e).text( translation[transKey] );
}
});
}
function trans(key)
{
if(array_key_exists(key, translation)) {
return translation[key];
} else {
return key;
}
}
function array_key_exists ( key, search ) {
if (!search || (search.constructor !== Array && search.constructor !== Object)){
return false;
}
return key in search;
}
function empty (mixed_var) {
var key;
if (mixed_var === "" ||
mixed_var === 0 ||
mixed_var === "0" ||
mixed_var === null ||
mixed_var === false ||
typeof mixed_var === 'undefined'
){
return true;
}
if (typeof mixed_var == 'object') {
for (key in mixed_var) {
return false;
}
return true;
}
return false;
}
function is_array (mixed_var) {
var key = '';
var getFuncName = function (fn) {
var name = (/\W*function\s+([\w\$]+)\s*\(/).exec(fn);
if (!name) {
return '(Anonymous)';
}
return name[1];
};
if (!mixed_var) {
return false;
}
// BEGIN REDUNDANT
this.php_js = this.php_js || {};
this.php_js.ini = this.php_js.ini || {};
// END REDUNDANT
if (typeof mixed_var === 'object') {
if (this.php_js.ini['phpjs.objectsAsArrays'] && // Strict checking for being a JavaScript array (only check this way if call ini_set('phpjs.objectsAsArrays', 0) to disallow objects as arrays)
(
(this.php_js.ini['phpjs.objectsAsArrays'].local_value.toLowerCase &&
this.php_js.ini['phpjs.objectsAsArrays'].local_value.toLowerCase() === 'off') ||
parseInt(this.php_js.ini['phpjs.objectsAsArrays'].local_value, 10) === 0)
) {
return mixed_var.hasOwnProperty('length') && // Not non-enumerable because of being on parent class
!mixed_var.propertyIsEnumerable('length') && // Since is own property, if not enumerable, it must be a built-in function
getFuncName(mixed_var.constructor) !== 'String'; // exclude String()
}
if (mixed_var.hasOwnProperty) {
for (key in mixed_var) {
// Checks whether the object has the specified property
// if not, we figure it's not an object in the sense of a php-associative-array.
if (false === mixed_var.hasOwnProperty(key)) {
return false;
}
}
}
// Read discussion at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_is_array/
return true;
}
return false;
}
function resolvePath(filename)
{
filename = filename.replace('\/\/g', '\/');
var parts = filename.split('/');
var out = [];
$.each(parts, function(i, part){
if (part == '.') return;
if (part == '..') {
out.pop();
return;
}
out.push(part);
});
return out.join('/');
}
/**
* Performs an AJAX request and returns the parsed JSON output.
* The global akeeba_ajax_url is used as the AJAX proxy URL.
* If there is no errorCallback, the global akeeba_error_callback is used.
* @param data An object with the query data, e.g. a serialized form
* @param successCallback A function accepting a single object parameter, called on success
* @param errorCallback A function accepting a single string parameter, called on failure
*/
function doAjax(data, successCallback, errorCallback)
{
var structure =
{
type: "POST",
url: akeeba_ajax_url,
cache: false,
data: data,
timeout: 600000,
success: function(msg) {
// Initialize
var junk = null;
var message = "";
// Get rid of junk before the data
var valid_pos = msg.indexOf('###');
if( valid_pos == -1 ) {
// Valid data not found in the response
msg = 'Invalid AJAX data received:<br/>' + msg;
if(errorCallback == null)
{
if(akeeba_error_callback != null)
{
akeeba_error_callback(msg);
}
}
else
{
errorCallback(msg);
}
return;
} else if( valid_pos != 0 ) {
// Data is prefixed with junk
junk = msg.substr(0, valid_pos);
message = msg.substr(valid_pos);
}
else
{
message = msg;
}
message = message.substr(3); // Remove triple hash in the beginning
// Get of rid of junk after the data
var valid_pos = message.lastIndexOf('###');
message = message.substr(0, valid_pos); // Remove triple hash in the end
try {
var data = eval('('+message+')');
} catch(err) {
var msg = err.message + "\n<br/>\n<pre>\n" + message + "\n</pre>";
if(errorCallback == null)
{
if(akeeba_error_callback != null)
{
akeeba_error_callback(msg);
}
}
else
{
errorCallback(msg);
}
return;
}
// Call the callback function
successCallback(data);
},
error: function(Request, textStatus, errorThrown) {
var message = '<strong>AJAX Loading Error</strong><br/>HTTP Status: '+Request.status+' ('+Request.statusText+')<br/>';
message = message + 'Internal status: '+textStatus+'<br/>';
message = message + 'XHR ReadyState: ' + Response.readyState + '<br/>';
message = message + 'Raw server response:<br/>'+Request.responseText;
if(errorCallback == null)
{
if(akeeba_error_callback != null)
{
akeeba_error_callback(message);
}
}
else
{
errorCallback(message);
}
}
};
$.ajax( structure );
}
function onChangeProcengine(event)
{
if( $('#kickstart\\.procengine').val() == 'direct' )
{
$('#ftp-options').hide('fast');
} else {
$('#ftp-options').show('fast');
}
if($('#kickstart\\.procengine').val() == 'sftp' )
{
$('#ftp-ssl-passive').hide('fast');
if($('#kickstart\\.ftp\\.dir').val() == ''){
$('#kickstart\\.ftp\\.dir').val(sftp_path);
}
$('#testFTP').html(trans('BTN_TESTSFTPCON'))
}
else
{
$('#ftp-ssl-passive').show('fast');
$('#testFTP').html(trans('BTN_TESTFTPCON'))
}
}
function closeLightbox(event)
{
var closeMe = false;
if( (event == null) || (event == undefined) ) {
closeMe = true;
} else if(event.keyCode == '27') {
closeMe = true;
}
if(closeMe)
{
document.getElementById('preextraction').style.display='none';
document.getElementById('genericerror').style.display='none';
document.getElementById('fade').style.display='none';
$(document).unbind('keyup', closeLightbox);
}
}
function onGenericError(msg)
{
$('#genericerrorInner').html(msg);
$('#genericerror').css('display','block');
$('#fade').css('display','block');
$(document).keyup(closeLightbox);
}
function setProgressBar(percent)
{
var newValue = 0;
if(percent <= 1) {
newValue = 100 * percent;
} else {
newValue = percent;
}
$('#progressbar-inner').css('width',percent+'%');
}
function oncheckFTPTempDirClick(event)
{
var data = {
'task' : 'checkTempdir',
'json': JSON.stringify({
'kickstart.ftp.tempdir': $('#kickstart\\.ftp\\.tempdir').val()
})
};
doAjax(data, function(ret){
var key = ret.status ? 'FTP_TEMPDIR_WRITABLE' : 'FTP_TEMPDIR_UNWRITABLE';
alert( trans(key) );
});
}
function onTestFTPClick(event)
{
var type = 'ftp';
if($('#kickstart\\.procengine').val() == 'sftp')
{
type = 'sftp';
}
var data = {
'task' : 'checkFTP',
'json': JSON.stringify({
'type' : type,
'kickstart.ftp.host': $('#kickstart\\.ftp\\.host').val(),
'kickstart.ftp.port': $('#kickstart\\.ftp\\.port').val(),
'kickstart.ftp.ssl': $('#kickstart\\.ftp\\.ssl').is(':checked'),
'kickstart.ftp.passive': $('#kickstart\\.ftp\\.passive').is(':checked'),
'kickstart.ftp.user': $('#kickstart\\.ftp\\.user').val(),
'kickstart.ftp.pass': $('#kickstart\\.ftp\\.pass').val(),
'kickstart.ftp.dir': $('#kickstart\\.ftp\\.dir').val(),
'kickstart.ftp.tempdir': $('#kickstart\\.ftp\\.tempdir').val()
})
};
doAjax(data, function(ret){
if(type == 'ftp'){
var key = ret.status ? 'FTP_CONNECTION_OK' : 'FTP_CONNECTION_FAILURE';
}
else{
var key = ret.status ? 'SFTP_CONNECTION_OK' : 'SFTP_CONNECTION_FAILURE';
}
alert( trans(key) + "\n\n" + (ret.status ? '' : ret.message) );
});
}
function onbrowseFTP ()
{
if($('#kickstart\\.procengine').val() != 'sftp')
{
akeeba_ftpbrowser_host = $('#kickstart\\.ftp\\.host').val();
akeeba_ftpbrowser_port = $('#kickstart\\.ftp\\.port').val();
akeeba_ftpbrowser_username = $('#kickstart\\.ftp\\.user').val();
akeeba_ftpbrowser_password = $('#kickstart\\.ftp\\.pass').val();
akeeba_ftpbrowser_passive = $('#kickstart\\.ftp\\.passive').is(':checked');
akeeba_ftpbrowser_ssl = $('#kickstart\\.ftp\\.ssl').is(':checked');
akeeba_ftpbrowser_directory = $('#kickstart\\.ftp\\.dir').val();
var akeeba_onbrowseFTP_callback = function(path) {
var charlist = ('/').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '$1');
var re = new RegExp('^[' + charlist + ']+', 'g');
path = '/' + (path+'').replace(re, '');
$('#kickstart\\.ftp\\.dir').val(path);
};
akeeba_ftpbrowser_hook( akeeba_onbrowseFTP_callback );
}
else
{
akeeba_sftpbrowser_host = $('#kickstart\\.ftp\\.host').val();
akeeba_sftpbrowser_port = $('#kickstart\\.ftp\\.port').val();
akeeba_sftpbrowser_username = $('#kickstart\\.ftp\\.user').val();
akeeba_sftpbrowser_password = $('#kickstart\\.ftp\\.pass').val();
akeeba_sftpbrowser_directory = $('#kickstart\\.ftp\\.dir').val();
var akeeba_postprocsftp_callback = function(path) {
var charlist = ('/').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '$1');
var re = new RegExp('^[' + charlist + ']+', 'g');
path = '/' + (path+'').replace(re, '');
$('#kickstart\\.ftp\\.dir').val(path);
};
akeeba_sftpbrowser_hook( akeeba_postprocsftp_callback );
}
}
akeeba_ftpbrowser_hook = function( callback )
{
var ftp_dialog_element = $("#ftpdialog");
var ftp_callback = function() {
callback(akeeba_ftpbrowser_directory);
ftp_dialog_element.dialog("close");
};
ftp_dialog_element.css('display','block');
ftp_dialog_element.removeClass('ui-state-error');
ftp_dialog_element.dialog({
autoOpen : false,
title : trans('CONFIG_UI_FTPBROWSER_TITLE'),
draggable : false,
height : 500,
width : 500,
modal : true,
resizable : false,
buttons : {
"OK": ftp_callback,
"Cancel": function() {
ftp_dialog_element.dialog("close");
}
}
});
$('#ftpBrowserErrorContainer').css('display','none');
$('#ftpBrowserFolderList').html('');
$('#ak_crumbs').html('');
ftp_dialog_element.dialog('open');
if(empty(akeeba_ftpbrowser_directory)) akeeba_ftpbrowser_directory = '';
var data = {
'task' : 'ftpbrowse',
'json': JSON.stringify({
'host' : akeeba_ftpbrowser_host,
'port' : akeeba_ftpbrowser_port,
'username' : akeeba_ftpbrowser_username,
'password' : akeeba_ftpbrowser_password,
'passive' : (akeeba_ftpbrowser_passive ? 1 : 0),
'ssl' : (akeeba_ftpbrowser_ssl ? 1 : 0),
'directory' : akeeba_ftpbrowser_directory
})
};
// Do AJAX call and Render results
doAjax(
data,
function(data) {
if(data.error != false) {
// An error occured
$('#ftpBrowserError').html(trans(data.error));
$('#ftpBrowserErrorContainer').css('display','block');
$('#ftpBrowserFolderList').css('display','none');
$('#ak_crumbs').css('display','none');
} else {
// Create the interface
$('#ftpBrowserErrorContainer').css('display','none');
// Display the crumbs
if(!empty(data.breadcrumbs)) {
$('#ak_crumbs').css('display','block');
$('#ak_crumbs').html('');
var relativePath = '/';
akeeba_ftpbrowser_addcrumb(trans('UI-ROOT'), '/', callback);
$.each(data.breadcrumbs, function(i, crumb) {
relativePath += '/'+crumb;
akeeba_ftpbrowser_addcrumb(crumb, relativePath, callback);
});
} else {
$('#ak_crumbs').hide();
}
// Display the list of directories
if(!empty(data.list)) {
$('#ftpBrowserFolderList').show();
$.each(data.list, function(i, item) {
akeeba_ftpbrowser_create_link(akeeba_ftpbrowser_directory+'/'+item, item, $('#ftpBrowserFolderList'), callback );
});
} else {
$('#ftpBrowserFolderList').css('display','none');
}
}
},
function(message) {
$('#ftpBrowserError').html(message);
$('#ftpBrowserErrorContainer').css('display','block');
$('#ftpBrowserFolderList').css('display','none');
$('#ak_crumbs').css('display','none');
}
);
};
/**
* Creates a directory link for the FTP browser UI
*/
function akeeba_ftpbrowser_create_link(path, label, container, callback)
{
var row = $(document.createElement('tr'));
var cell = $(document.createElement('td')).appendTo(row);
var myElement = $(document.createElement('a'))
.text(label)
.click(function(){
akeeba_ftpbrowser_directory = resolvePath(path);
akeeba_ftpbrowser_hook(callback);
})
.appendTo(cell);
row.appendTo($(container));
}
/**
* Adds a breadcrumb to the FTP browser
*/
function akeeba_ftpbrowser_addcrumb(crumb, relativePath, callback, last)
{
if(empty(last)) last = false;
var li = $(document.createElement('li'));
$(document.createElement('a'))
.html(crumb)
.click(function(e){
akeeba_ftpbrowser_directory = relativePath;
akeeba_ftpbrowser_hook(callback);
e.preventDefault();
})
.appendTo(li);
if(!last) {
$(document.createElement('span'))
.text('/')
.addClass('divider')
.appendTo(li);
}
li.appendTo('#ak_crumbs');
}
// FTP browser function
akeeba_sftpbrowser_hook = function( callback )
{
var sftp_dialog_element = $("#ftpdialog");
var sftp_callback = function() {
callback(akeeba_sftpbrowser_directory);
sftp_dialog_element.dialog("close");
};
sftp_dialog_element.css('display','block');
sftp_dialog_element.removeClass('ui-state-error');
sftp_dialog_element.dialog({
autoOpen : false,
'title' : trans('CONFIG_UI_SFTPBROWSER_TITLE'),
draggable : false,
height : 500,
width : 500,
modal : true,
resizable : false,
buttons : {
"OK": sftp_callback,
"Cancel": function() {
sftp_dialog_element.dialog("close");
}
}
});
$('#ftpBrowserErrorContainer').css('display','none');
$('#ftpBrowserFolderList').html('');
$('#ak_crumbs').html('');
sftp_dialog_element.dialog('open');
if(empty(akeeba_sftpbrowser_directory)) akeeba_sftpbrowser_directory = '';
var data = {
'task' : 'sftpbrowse',
'json': JSON.stringify({
'host' : akeeba_sftpbrowser_host,
'port' : akeeba_sftpbrowser_port,
'username' : akeeba_sftpbrowser_username,
'password' : akeeba_sftpbrowser_password,
'directory' : akeeba_sftpbrowser_directory
})
};
doAjax(
data,
function(data) {
if(data.error != false) {
// An error occured
$('#ftpBrowserError').html(data.error);
$('#ftpBrowserErrorContainer').css('display','block');
$('#ftpBrowserFolderList').css('display','none');
$('#ak_crumbs').css('display','none');
} else {
// Create the interface
$('#ftpBrowserErrorContainer').css('display','none');
// Display the crumbs
if(!empty(data.breadcrumbs)) {
$('#ak_crumbs').css('display','block');
$('#ak_crumbs').html('');
var relativePath = '/';
akeeba_sftpbrowser_addcrumb(trans('UI-ROOT'), '/', callback);
$.each(data.breadcrumbs, function(i, crumb) {
relativePath += '/'+crumb;
akeeba_sftpbrowser_addcrumb(crumb, relativePath, callback);
});
} else {
$('#ftpBrowserCrumbs').css('display','none');
}
// Display the list of directories
if(!empty(data.list)) {
$('#ftpBrowserFolderList').css('display','block');
$.each(data.list, function(i, item) {
akeeba_sftpbrowser_create_link(akeeba_sftpbrowser_directory+'/'+item, item, $('#ftpBrowserFolderList'), callback );
});
} else {
$('#ftpBrowserFolderList').css('display','none');
}
}
},
function(message) {
$('#ftpBrowserError').html(message);
$('#ftpBrowserErrorContainer').css('display','block');
$('#ftpBrowserFolderList').css('display','none');
$('#ftpBrowserCrumbs').css('display','none');
}
);
};
/**
* Creates a directory link for the SFTP browser UI
*/
function akeeba_sftpbrowser_create_link(path, label, container, callback)
{
var row = $(document.createElement('tr'));
var cell = $(document.createElement('td')).appendTo(row);
var myElement = $(document.createElement('a'))
.text(label)
.click(function(){
akeeba_sftpbrowser_directory = resolvePath(path);
akeeba_sftpbrowser_hook(callback);
})
.appendTo(cell);
row.appendTo($(container));
}
/**
* Adds a breadcrumb to the SFTP browser
*/
function akeeba_sftpbrowser_addcrumb(crumb, relativePath, callback, last)
{
if(empty(last)) last = false;
var li = $(document.createElement('li'));
$(document.createElement('a'))
.html(crumb)
.click(function(e){
akeeba_sftpbrowser_directory = relativePath;
akeeba_sftpbrowser_hook(callback);
e.preventDefault();
})
.appendTo(li);
if(!last) {
$(document.createElement('span'))
.text('/')
.addClass('divider')
.appendTo(li);
}
li.appendTo('#ak_crumbs');
}
function onStartExtraction()
{
$('#page1').hide('fast');
$('#page2').show('fast');
$('#currentFile').text( '' );
akeeba_error_callback = errorHandler;
var data = {
'task' : 'startExtracting',
'json': JSON.stringify({
'kickstart.setup.sourcepath': $('#kickstart\\.setup\\.sourcepath').val(),
'kickstart.setup.sourcefile': $('#kickstart\\.setup\\.sourcefile').val(),
'kickstart.jps.password': $('#kickstart\\.jps\\.password').val(),
'kickstart.tuning.min_exec_time': $('#kickstart\\.tuning\\.min_exec_time').val(),
'kickstart.tuning.max_exec_time': $('#kickstart\\.tuning\\.max_exec_time').val(),
'kickstart.stealth.enable': $('#kickstart\\.stealth\\.enable').is(':checked'),
'kickstart.stealth.url': $('#kickstart\\.stealth\\.url').val(),
'kickstart.tuning.run_time_bias': 75,
'kickstart.setup.restoreperms': 0,
'kickstart.setup.dryrun': 0,
'kickstart.setup.ignoreerrors': $('#kickstart\\.setup\\.ignoreerrors').is(':checked'),
'kickstart.enabled': 1,
'kickstart.security.password': '',
'kickstart.procengine': $('#kickstart\\.procengine').val(),
'kickstart.ftp.host': $('#kickstart\\.ftp\\.host').val(),
'kickstart.ftp.port': $('#kickstart\\.ftp\\.port').val(),
'kickstart.ftp.ssl': $('#kickstart\\.ftp\\.ssl').is(':checked'),
'kickstart.ftp.passive': $('#kickstart\\.ftp\\.passive').is(':checked'),
'kickstart.ftp.user': $('#kickstart\\.ftp\\.user').val(),
'kickstart.ftp.pass': $('#kickstart\\.ftp\\.pass').val(),
'kickstart.ftp.dir': $('#kickstart\\.ftp\\.dir').val(),
'kickstart.ftp.tempdir': $('#kickstart\\.ftp\\.tempdir').val()
})
};
doAjax(data, function(ret){
processRestorationStep(ret);
});
}
function processRestorationStep(data)
{
// Look for errors
if(!data.status)
{
errorHandler(data.message);
return;
}
// Propagate warnings to the GUI
if( !empty(data.Warnings) )
{
$.each(data.Warnings, function(i, item){
$('#warnings').append(
$(document.createElement('div'))
.html(item)
);
$('#warningsBox').show('fast');
});
}
// Parse total size, if exists
if(array_key_exists('totalsize', data))
{
if(is_array(data.filelist))
{
akeeba_restoration_stat_total = 0;
$.each(data.filelist,function(i, item)
{
akeeba_restoration_stat_total += item[1];
});
}
akeeba_restoration_stat_outbytes = 0;
akeeba_restoration_stat_inbytes = 0;
akeeba_restoration_stat_files = 0;
}
// Update GUI
akeeba_restoration_stat_inbytes += data.bytesIn;
akeeba_restoration_stat_outbytes += data.bytesOut;
akeeba_restoration_stat_files += data.files;
var percentage = 0;
if( akeeba_restoration_stat_total > 0 )
{
percentage = 100 * akeeba_restoration_stat_inbytes / akeeba_restoration_stat_total;
if(percentage < 0) {
percentage = 0;
} else if(percentage > 100) {
percentage = 100;
}
}
if(data.done) percentage = 100;
setProgressBar(percentage);
$('#currentFile').text( data.lastfile );
if(!empty(data.factory)) akeeba_factory = data.factory;
post = {
'task' : 'continueExtracting',
'json' : JSON.stringify({factory: akeeba_factory})
};
if(!data.done)
{
doAjax(post, function(ret){
processRestorationStep(ret);
});
}
else
{
$('#page2a').hide('fast');
$('#extractionComplete').show('fast');
$('#runInstaller').css('display','inline-block');
}
}
function onGotoStartClick(event)
{
$('#page2').hide('fast');
$('#error').hide('fast');
$('#page1').show('fast');
}
function onRunInstallerClick(event)
{
var windowReference = window.open('installation/index.php','installer');
if(!windowReference.opener) {
windowReference.opener = this.window;
}
$('#runCleanup').css('display','inline-block');
$('#runInstaller').hide('fast');
}
function onRunCleanupClick(event)
{
post = {
'task' : 'isJoomla',
// Passing the factory preserves the renamed files array
'json' : JSON.stringify({factory: akeeba_factory})
};
doAjax(post, function(ret){
isJoomla = ret;
onRealRunCleanupClick();
});
}
function onRealRunCleanupClick()
{
post = {
'task' : 'cleanUp',
// Passing the factory preserves the renamed files array
'json' : JSON.stringify({factory: akeeba_factory})
};
doAjax(post, function(ret){
$('#runCleanup').hide('fast');
$('#gotoSite').css('display','inline-block');
if (isJoomla)
{
$('#gotoAdministrator').css('display','inline-block');
}
else
{
$('#gotoAdministrator').css('display','none');
}
$('#gotoPostRestorationRroubleshooting').css('display','block');
});
}
function errorHandler(msg)
{
$('#errorMessage').html(msg);
$('#error').show('fast');
}
function onresetFTPTempDir(event)
{
$('#kickstart\\.ftp\\.tempdir').val('<?php echo addcslashes(AKKickstartUtils::getPath(),'\\\'"') ?>');
}
function onArchiveListReload()
{
post = {
'task' : 'listArchives',
'json' : JSON.stringify({path: $('#kickstart\\.setup\\.sourcepath').val()})
}
doAjax(post, function(ret){
$('#sourcefileContainer').html(ret);
});
}
/**
* Akeeba Kickstart Update Check
*/
var akeeba_update = {version: '0'};
var akeeba_version = '4.1.1';
function version_compare (v1, v2, operator) {
// BEGIN REDUNDANT
this.php_js = this.php_js || {};
this.php_js.ENV = this.php_js.ENV || {};
// END REDUNDANT
// Important: compare must be initialized at 0.
var i = 0,
x = 0,
compare = 0,
// vm maps textual PHP versions to negatives so they're less than 0.
// PHP currently defines these as CASE-SENSITIVE. It is important to
// leave these as negatives so that they can come before numerical versions
// and as if no letters were there to begin with.
// (1alpha is < 1 and < 1.1 but > 1dev1)
// If a non-numerical value can't be mapped to this table, it receives
// -7 as its value.
vm = {
'dev': -6,
'alpha': -5,
'a': -5,
'beta': -4,
'b': -4,
'RC': -3,
'rc': -3,
'#': -2,
'p': -1,
'pl': -1
},
// This function will be called to prepare each version argument.
// It replaces every _, -, and + with a dot.
// It surrounds any nonsequence of numbers/dots with dots.
// It replaces sequences of dots with a single dot.
// version_compare('4..0', '4.0') == 0
// Important: A string of 0 length needs to be converted into a value
// even less than an unexisting value in vm (-7), hence [-8].
// It's also important to not strip spaces because of this.
// version_compare('', ' ') == 1
prepVersion = function (v) {
v = ('' + v).replace(/[_\-+]/g, '.');
v = v.replace(/([^.\d]+)/g, '.$1.').replace(/\.{2,}/g, '.');
return (!v.length ? [-8] : v.split('.'));
},
// This converts a version component to a number.
// Empty component becomes 0.
// Non-numerical component becomes a negative number.
// Numerical component becomes itself as an integer.
numVersion = function (v) {
return !v ? 0 : (isNaN(v) ? vm[v] || -7 : parseInt(v, 10));
};
v1 = prepVersion(v1);
v2 = prepVersion(v2);
x = Math.max(v1.length, v2.length);
for (i = 0; i < x; i++) {
if (v1[i] == v2[i]) {
continue;
}
v1[i] = numVersion(v1[i]);
v2[i] = numVersion(v2[i]);
if (v1[i] < v2[i]) {
compare = -1;
break;
} else if (v1[i] > v2[i]) {
compare = 1;
break;
}
}
if (!operator) {
return compare;
}
// Important: operator is CASE-SENSITIVE.
// "No operator" seems to be treated as less than
// Any other values seem to make the function return null.
switch (operator) {
case '>':
case 'gt':
return (compare > 0);
case '>=':
case 'ge':
return (compare >= 0);
case '<=':
case 'le':
return (compare <= 0);
case '==':
case '=':
case 'eq':
return (compare === 0);
case '<>':
case '!=':
case 'ne':
return (compare !== 0);
case '':
case '<':
case 'lt':
return (compare < 0);
default:
return null;
}
}
function checkUpdates()
{
var structure =
{
type: "GET",
url: 'http://query.yahooapis.com/v1/public/yql',
data: {
<?php if(KICKSTARTPRO): ?>
q: 'SELECT * FROM xml WHERE url="http://nocdn.akeebabackup.com/updates/kickstart.xml"',
<?php else: ?>
q: 'SELECT * FROM xml WHERE url="http://nocdn.akeebabackup.com/updates/kickstartpro.xml"',
<?php endif; ?>
format: 'json',
callback: 'updatesCallback'
},
cache: true,
crossDomain: true,
jsonp: 'updatesCallback',
timeout: 15000
};
$.ajax( structure );
}
function updatesCallback(msg)
{
$.each(msg.query.results.updates.update, function(i, el){
var myUpdate = {
'version' : el.version,
'infourl' : el.infourl['content'],
'dlurl' : el.downloads.downloadurl.content
}
if(version_compare(myUpdate.version, akeeba_update.version, 'ge')) {
akeeba_update = myUpdate;
}
});
if(version_compare(akeeba_update.version, akeeba_version, 'gt')) {
notifyAboutUpdates();
}
}
function notifyAboutUpdates()
{
$('#update-version').text(akeeba_update.version);
$('#update-dlnow').attr('href', akeeba_update.dlurl);
$('#update-whatsnew').attr('href', akeeba_update.infourl);
$('#update-notification').show('slow');
}
<?php callExtraFeature('onExtraHeadJavascript'); ?>
</script>
<?php
}
/**
* Akeeba Kickstart
* A JSON-powered archive extraction tool
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / AkeebaBackup.com
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
function echoTranslationStrings()
{
callExtraFeature('onLoadTranslations');
$translation = AKText::getInstance();
echo $translation->asJavascript();
}
function echoPage()
{
$edition = KICKSTARTPRO ? 'Professional' : 'Core';
$bestArchivePath = AKKickstartUtils::getBestArchivePath();
$filelist = AKKickstartUtils::getArchivesAsOptions($bestArchivePath);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Akeeba Kickstart <?php echo $edition?> <?php echo VERSION?></title>
<style type="text/css" media="all" rel="stylesheet">
<?php echoCSS();?>
</style>
<?php if(@file_exists('jquery.min.js')):?>
<script type="text/javascript" src="jquery.min.js"></script>
<?php else: ?>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<?php endif; ?>
<?php if(@file_exists('json2.min.js')):?>
<script type="text/javascript" src="json2.min.js"></script>
<?php else: ?>
<script type="text/javascript" src="//yandex.st/json2/2011-10-19/json2.min.js"></script>
<?php endif; ?>
<?php if(@file_exists('jquery-ui.min.js')):?>
<script type="text/javascript" src="jquery-ui.min.js"></script>
<?php else: ?>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script>
<?php endif; ?>
<?php echoHeadJavascript(); ?>
</head>
<body>
<div id="automode" style="display:none;">
AUTOMODEON
</div>
<div id="fade" class="black_overlay"></div>
<div id="page-container">
<div id="preextraction" class="white_content">
<div id="ie7Warning" style="display:none;">
<h2>Deprecated Internet Explorer version</h2>
<p>
This script is not guaranteed to work properly on Internet Explorer 8
or earlier versions, or on Internet Explorer 9 and higher running
in compatibility mode.
</p>
<p>
Please use Internet Explorer 9 or later in native mode (the
"broken page" icon next to the address bar should not be
enabled). Alternatively, you may use the latest versions of Firefox,
Safari, Google Chrome or Opera.
</p>
</div>
<h2>THINGS_HEADER</h2>
<ol>
<li>THINGS_01</li>
<li>THINGS_02</li>
<li>THINGS_03</li>
<li>THINGS_04</li>
<li>THINGS_05</li>
<li>THINGS_06</li>
<li>THINGS_07</li>
<li>THINGS_08</li>
<li>THINGS_09</li>
</ol>
<a href="javascript:void(0)" onclick="closeLightbox();">CLOSE_LIGHTBOX</a>
</div>
<div id="genericerror" class="white_content">
<pre id="genericerrorInner"></pre>
</div>
<div id="header">
<div class="title">Akeeba Kickstart <?php echo $edition?> 4.1.1</div>
</div>
<div id="update-notification" style="display: none">
<p class="update-notify">UPDATE_HEADER</p>
<p class="update-whyupdate">UPDATE_NOTICE</p>
<p class="update-links">
<a href="#" id="update-dlnow">UPDATE_DLNOW</a>
<a href="#" id="update-whatsnew" target="_blank">UPDATE_MOREINFO</a>
</p>
</div>
<div id="page1">
<?php callExtraFeature('onPage1'); ?>
<div id="page1-content">
<div class="helpme">
<span>NEEDSOMEHELPKS</span> <a href="https://www.akeebabackup.com/documentation/quick-start-guide/using-kickstart.html" target="_blank">QUICKSTART</a>
</div>
<div class="step1">
<div class="circle">1</div>
<h2>SELECT_ARCHIVE</h2>
<div class="area-container">
<?php callExtraFeature('onPage1Step1'); ?>
<div class="clr"></div>
<label for="kickstart.setup.sourcepath">ARCHIVE_DIRECTORY</label>
<span class="field">
<input type="text" id="kickstart.setup.sourcepath" value="<?php echo htmlentities($bestArchivePath); ?>" />
<span class="button" id="reloadArchives" style="margin-top:0;margin-bottom:0">RELOAD_ARCHIVES</span>
</span>
<br/>
<label for="kickstart.setup.sourcefile">ARCHIVE_FILE</label>
<span class="field" id="sourcefileContainer">
<?php if(!empty($filelist)):?>
<select id="kickstart.setup.sourcefile">
<?php echo $filelist; ?>
</select>
<?php else:?>
<a href="https://www.akeebabackup.com/documentation/troubleshooter/ksnoarchives.html" target="_blank">NOARCHIVESCLICKHERE</a>
<?php endif;?>
</span>
<br />
<label for="kickstart.jps.password">JPS_PASSWORD</label>
<span class="field"><input type="password" id="kickstart.jps.password" value="" /></span>
</div>
</div>
<div class="clr"></div>
<div class="step2">
<div class="circle">2</div>
<h2>SELECT_EXTRACTION</h2>
<div class="area-container">
<label for="kickstart.procengine">WRITE_TO_FILES</label>
<span class="field">
<select id="kickstart.procengine">
<option value="hybrid">WRITE_HYBRID</option>
<option value="direct">WRITE_DIRECTLY</option>
<option value="ftp">WRITE_FTP</option>
<option value="sftp">WRITE_SFTP</option>
</select>
</span><br/>
<label for="kickstart.setup.ignoreerrors">IGNORE_MOST_ERRORS</label>
<span class="field"><input type="checkbox" id="kickstart.setup.ignoreerrors" /></span>
<div id="ftp-options">
<label for="kickstart.ftp.host">FTP_HOST</label>
<span class="field"><input type="text" id="kickstart.ftp.host" value="localhost" /></span><br />
<label for="kickstart.ftp.port">FTP_PORT</label>
<span class="field"><input type="text" id="kickstart.ftp.port" value="21" /></span><br />
<div id="ftp-ssl-passive">
<label for="kickstart.ftp.ssl">FTP_FTPS</label>
<span class="field"><input type="checkbox" id="kickstart.ftp.ssl" /></span><br />
<label for="kickstart.ftp.passive">FTP_PASSIVE</label>
<span class="field"><input type="checkbox" id="kickstart.ftp.passive" checked="checked" /></span><br />
</div>
<label for="kickstart.ftp.user">FTP_USER</label>
<span class="field"><input type="text" id="kickstart.ftp.user" value="" /></span><br />
<label for="kickstart.ftp.pass">FTP_PASS</label>
<span class="field"><input type="password" id="kickstart.ftp.pass" value="" /></span><br />
<label for="kickstart.ftp.dir">FTP_DIR</label>
<span class="field">
<input type="text" id="kickstart.ftp.dir" value="" />
<span class="button" id="browseFTP" style="margin-top:0;margin-bottom:0">FTP_BROWSE</span>
</span><br />
<label for="kickstart.ftp.tempdir">FTP_TEMPDIR</label>
<span class="field">
<input type="text" id="kickstart.ftp.tempdir" value="<?php echo htmlentities(AKKickstartUtils::getPath()) ?>" />
<span class="button" id="checkFTPTempDir">BTN_CHECK</span>
<span class="button" id="resetFTPTempDir">BTN_RESET</span>
</span><br />
<label></label>
<span class="button" id="testFTP">BTN_TESTFTPCON</span>
<a id="notWorking" class="button" href="https://www.akeebabackup.com/documentation/troubleshooter/kscantextract.html" target="_blank">CANTGETITTOWORK</a>
<br />
</div>
</div>
</div>
<div class="clr"></div>
<div class="step3">
<div class="circle">3</div>
<h2>FINE_TUNE</h2>
<div class="area-container">
<label for="kickstart.tuning.min_exec_time">MIN_EXEC_TIME</label>
<span class="field"><input type="text" id="kickstart.tuning.min_exec_time" value="1" /></span> <span>SECONDS_PER_STEP</span><br />
<label for="kickstart.tuning.max_exec_time">MAX_EXEC_TIME</label>
<span class="field"><input type="text" id="kickstart.tuning.max_exec_time" value="5" /></span> <span>SECONDS_PER_STEP</span><br />
<label for="kickstart.stealth.enable">STEALTH_MODE</label>
<span class="field"><input type="checkbox" id="kickstart.stealth.enable" /></span><br />
<label for="kickstart.stealth.url">STEALTH_URL</label>
<span class="field"><input type="text" id="kickstart.stealth.url" value="" /></span><br />
</div>
</div>
<div class="clr"></div>
<div class="step4">
<div class="circle">4</div>
<h2>EXTRACT_FILES</h2>
<div class="area-container">
<span></span>
<span id="gobutton" class="button">BTN_START</span>
</div>
</div>
<div class="clr"></div>
</div>
<div id="ftpdialog" style="display:none;">
<p class="instructions alert alert-info">FTPBROWSER_LBL_INSTRUCTIONS</p>
<div class="error alert alert-error" id="ftpBrowserErrorContainer">
<h3>FTPBROWSER_LBL_ERROR</h3>
<p id="ftpBrowserError"></p>
</div>
<ul id="ak_crumbs" class="breadcrumb"></ul>
<div class="row-fluid">
<div class="span12">
<table id="ftpBrowserFolderList" class="table table-striped">
</table>
</div>
</div>
</div>
</div>
<div id="page2">
<div id="page2a">
<div class="circle">5</div>
<h2>EXTRACTING</h2>
<div class="area-container">
<div id="warn-not-close">DO_NOT_CLOSE_EXTRACT</div>
<div id="progressbar">
<div id="progressbar-inner"> </div>
</div>
<div id="currentFile"></div>
</div>
</div>
<div id="extractionComplete" style="display: none">
<div class="circle">6</div>
<h2>RESTACLEANUP</h2>
<div id="runInstaller" class="button">BTN_RUNINSTALLER</div>
<div id="runCleanup" class="button" style="display:none">BTN_CLEANUP</div>
<div id="gotoSite" class="button" style="display:none">BTN_SITEFE</div>
<div id="gotoAdministrator" class="button" style="display:none">BTN_SITEBE</div>
<div id="gotoPostRestorationRroubleshooting" style="display:none">
<a href="https://www.akeebabackup.com/documentation/troubleshooter/post-restoration.html" target="_blank">POSTRESTORATIONTROUBLESHOOTING</a>
</div>
</div>
<div id="warningsBox" style="display: none;">
<div id="warningsHeader">
<h2>WARNINGS</h2>
</div>
<div id="warningsContainer">
<div id="warnings"></div>
</div>
</div>
<div id="error" style="display: none;">
<h3>ERROR_OCCURED</h3>
<p id="errorMessage"></p>
<div id="gotoStart" class="button">BTN_GOTOSTART</div>
<div>
<a href="https://www.akeebabackup.com/documentation/troubleshooter/kscantextract.html" target="_blank">CANTGETITTOWORK</a>
</div>
</div>
</div>
<div id="footer">
<div class="copyright">Copyright © 2008–2013 <a href="http://www.akeebabackup.com">Nicholas K.
Dionysopoulos / Akeeba Backup</a>. All legal rights reserved.<br />
This program is free software: you can redistribute it and/or modify it under the terms of
the <a href="http://www.gnu.org/gpl-3.htmlhttp://www.gnu.org/copyleft/gpl.html">GNU General
Public License</a> as published by the Free Software Foundation, either version 3 of the License,
or (at your option) any later version.<br />
Design credits: <a href="http://internet-inspired.com/">Internet Inspired</a>, slightly modified by AkeebaBackup.com
</div>
</div>
</div>
</body>
</html>
<?php
}
/**
* Akeeba Kickstart
* A JSON-powered archive extraction tool
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / AkeebaBackup.com
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
// Register additional feature classes
callExtraFeature();
$retArray = array(
'status' => true,
'message' => null
);
$task = getQueryParam('task', 'display');
$json = getQueryParam('json');
$ajax = true;
switch($task)
{
case 'checkTempdir':
$retArray['status'] = false;
if(!empty($json))
{
$data = json_decode($json, true);
$dir = @$data['kickstart.ftp.tempdir'];
if(!empty($dir))
{
$retArray['status'] = is_writable($dir);
}
}
break;
case 'checkFTP':
$retArray['status'] = false;
if(!empty($json))
{
$data = json_decode($json, true);
foreach($data as $key => $value)
{
AKFactory::set($key, $value);
}
if($data['type'] == 'ftp')
{
$ftp = new AKPostprocFTP();
}
else
{
$ftp = new AKPostprocSFTP();
}
$retArray['message'] = $ftp->getError();
$retArray['status'] = empty($retArray['message']);
}
break;
case 'ftpbrowse':
if(!empty($json))
{
$data = json_decode($json, true);
$retArray = getListing($data['directory'], $data['host'], $data['port'], $data['username'], $data['password'], $data['passive'], $data['ssl']);
}
break;
case 'sftpbrowse':
if(!empty($json))
{
$data = json_decode($json, true);
$retArray = getSftpListing($data['directory'], $data['host'], $data['port'], $data['username'], $data['password']);
}
break;
case 'startExtracting':
case 'continueExtracting':
// Look for configuration values
$retArray['status'] = false;
if(!empty($json))
{
if($task == 'startExtracting') AKFactory::nuke();
$oldJSON = $json;
$json = json_decode($json, true);
if(is_null($json)) {
$json = stripslashes($oldJSON);
$json = json_decode($json, true);
}
if(!empty($json)) foreach($json as $key => $value)
{
if( substr($key,0,9) == 'kickstart' ) {
AKFactory::set($key, $value);
}
}
// A "factory" variable will override all other settings.
if( array_key_exists('factory', $json) )
{
// Get the serialized factory
$serialized = $json['factory'];
AKFactory::unserialize($serialized);
AKFactory::set('kickstart.enabled', true);
}
// Make sure that the destination directory is always set (req'd by both FTP and Direct Writes modes)
$removePath = AKFactory::get('kickstart.setup.destdir','');
if(empty($removePath)) AKFactory::set('kickstart.setup.destdir', AKKickstartUtils::getPath());
if($task=='startExtracting')
{
// If the Stealth Mode is enabled, create the .htaccess file
if( AKFactory::get('kickstart.stealth.enable', false) )
{
createStealthURL();
}
}
$engine = AKFactory::getUnarchiver(); // Get the engine
$observer = new ExtractionObserver(); // Create a new observer
$engine->attach($observer); // Attach the observer
$engine->tick();
$ret = $engine->getStatusArray();
if( $ret['Error'] != '' )
{
$retArray['status'] = false;
$retArray['done'] = true;
$retArray['message'] = $ret['Error'];
}
elseif( !$ret['HasRun'] )
{
$retArray['files'] = $observer->filesProcessed;
$retArray['bytesIn'] = $observer->compressedTotal;
$retArray['bytesOut'] = $observer->uncompressedTotal;
$retArray['status'] = true;
$retArray['done'] = true;
}
else
{
$retArray['files'] = $observer->filesProcessed;
$retArray['bytesIn'] = $observer->compressedTotal;
$retArray['bytesOut'] = $observer->uncompressedTotal;
$retArray['status'] = true;
$retArray['done'] = false;
$retArray['factory'] = AKFactory::serialize();
}
if(!is_null($observer->totalSize))
{
$retArray['totalsize'] = $observer->totalSize;
$retArray['filelist'] = $observer->fileList;
}
$retArray['Warnings'] = $ret['Warnings'];
$retArray['lastfile'] = $observer->lastFile;
}
break;
case 'cleanUp':
if(!empty($json))
{
$json = json_decode($json, true);
if( array_key_exists('factory', $json) )
{
// Get the serialized factory
$serialized = $json['factory'];
AKFactory::unserialize($serialized);
AKFactory::set('kickstart.enabled', true);
}
}
$unarchiver = AKFactory::getUnarchiver(); // Get the engine
$engine = AKFactory::getPostProc();
// 1. Remove installation
recursive_remove_directory('installation');
// 2. Run the renames, backwards
$renames = $unarchiver->renameFiles;
if(!empty($renames)) foreach( $renames as $original => $renamed ) {
$engine->rename( $renamed, $original );
}
// 3. Delete the archive
foreach( $unarchiver->archiveList as $archive )
{
$engine->unlink( $archive );
}
// 4. Suicide
$engine->unlink( basename(__FILE__) );
// 5. Delete translations
$dh = opendir(AKKickstartUtils::getPath());
if($dh !== false)
{
$basename = basename(__FILE__, '.php');
while( false !== $file = @readdir($dh) )
{
if( strstr($file, $basename.'.ini') )
{
$engine->unlink($file);
}
}
}
// 6. Delete cacert.pem
$engine->unlink('cacert.pem');
// 7. Delete jquery.min.js and json2.min.js
$engine->unlink('jquery.min.js');
$engine->unlink('json2.min.js');
// 8. If OPcache is installed we need to reset it
if (function_exists('opcache_reset'))
{
opcache_reset();
}
break;
case 'display':
$ajax = false;
echoPage();
break;
case 'isJoomla':
$ajax = true;
if(!empty($json))
{
$json = json_decode($json, true);
if( array_key_exists('factory', $json) )
{
// Get the serialized factory
$serialized = $json['factory'];
AKFactory::unserialize($serialized);
AKFactory::set('kickstart.enabled', true);
}
}
$path = AKFactory::get('kickstart.setup.destdir','');
$path = rtrim($path, '/\\');
$isJoomla = @is_dir($path . '/administrator');
if ($isJoomla)
{
$isJoomla = @is_dir($path . '/libraries/joomla');
}
$retArray = $isJoomla;
break;
case 'listArchives':
$ajax = true;
$path = null;
if(!empty($json))
{
$json = json_decode($json, true);
if( array_key_exists('path', $json) )
{
$path = $json['path'];
}
}
if (empty($path) || !@is_dir($path))
{
$filelist = null;
}
else
{
$filelist = AKKickstartUtils::getArchivesAsOptions($path);
}
if (empty($filelist))
{
$retArray = '<a href="https://www.akeebabackup.com/documentation/troubleshooter/ksnoarchives.html" target="_blank">' .
AKText::_('NOARCHIVESCLICKHERE')
. '</a>';
}
else
{
$retArray = '<select id="kickstart.setup.sourcefile">' . $filelist . '</select>';
}
break;
default:
$ajax = true;
if(!empty($json)) {
$params = json_decode($json, true);
} else {
$params = array();
}
$retArray = callExtraFeature($task, $params);
break;
}
if($ajax)
{
// JSON encode the message
$json = json_encode($retArray);
// Do I have to encrypt?
$password = AKFactory::get('kickstart.security.password', null);
if(!empty($password))
{
$json = AKEncryptionAES::AESEncryptCtr($json, $password, 128);
}
// Return the message
echo "###$json###";
}
/**
* Akeeba Kickstart
* A JSON-powered archive extraction tool
*
* @copyright 2010-2014 Nicholas K. Dionysopoulos / AkeebaBackup.com
* @license GNU GPL v2 or - at your option - any later version
* @package akeebabackup
* @subpackage kickstart
*/
/**
* Akeeba Kickstart Import from URL add-on feature
*/
class AKFeatureURLImport
{
private $params = array();
private static $downloadPageURL = 'http://www.joomla.org/download.html';
private function getParam($key, $default = null)
{
if(array_key_exists($key, $this->params)) {
return $this->params[$key];
} else {
return $default;
}
}
/**
* Echoes extra CSS to the head of the page
*/
public function onExtraHeadCSS()
{
}
/**
* Echoes extra Javascript to the head of the page
*/
public function onExtraHeadJavascript()
{
?>
var akeeba_url_filename = null;
$(document).ready(function(){
$('#ak-url-showgui').click(function(e){
$('#ak-url-gui').show('fast');
$('#ak-url-progress').hide('fast');
$('#ak-url-complete').hide('fast');
$('#ak-url-error').hide('fast');
$('#page1-content').hide('fast');
});
$('#ak-url-hidegui').click(function(e){
$('#ak-url-gui').hide('fast');
$('#ak-url-progress').hide('fast');
$('#ak-url-complete').hide('fast');
$('#ak-url-error').hide('fast');
$('#page1-content').show('fast');
});
$('#ak-url-reload').click(function(e){
window.location.reload();
});
$('#ak-url-gotoStart').click(function(e){
$('#ak-url-gui').show('fast');
$('#ak-url-progress').hide('fast');
$('#ak-url-complete').hide('fast');
$('#ak-url-error').hide('fast');
});
});
function onAKURLImport()
{
akeeba_url_filename = $('#url\\.filename').val();
ak_urlimport_start();
}
function AKURLsetProgressBar(percent)
{
var newValue = 0;
if(percent <= 1) {
newValue = 100 * percent;
} else {
newValue = percent;
}
$('#ak-url-progressbar-inner').css('width',percent+'%');
}
function ak_urlimport_start()
{
akeeba_error_callback = AKURLerrorHandler;
$('#ak-url-gui').hide('fast');
$('#ak-url-progress').show('fast');
$('#ak-url-complete').hide('fast');
$('#ak-url-error').hide('fast');
AKURLsetProgressBar(0);
$('#ak-url-progresstext').html('');
var data = {
'task' : 'urlimport',
'json' : JSON.stringify({
'file' : akeeba_url_filename,
'frag' : "-1",
'totalSize' : "-1"
})
};
doAjax(data, function(ret){
ak_urlimport_step(ret);
});
}
function ak_urlimport_step(data)
{
// Look for errors
if(!data.status)
{
AKURLerrorHandler(data.error);
return;
}
var totalSize = 0;
var doneSize = 0;
var percent = 0;
var frag = -1;
// get running stats
if(array_key_exists('totalSize', data)) {
totalSize = data.totalSize;
}
if(array_key_exists('doneSize', data)) {
doneSize = data.doneSize;
}
if(array_key_exists('percent', data)) {
percent = data.percent;
}
if(array_key_exists('frag', data)) {
frag = data.frag;
}
// Update GUI
AKURLsetProgressBar(percent);
//$('#ak-url-progresstext').text( percent+'% ('+doneSize+' / '+totalSize+' bytes)' );
$('#ak-url-progresstext').text( percent+'% ('+doneSize+' bytes)' );
post = {
'task' : 'urlimport',
'json' : JSON.stringify({
'file' : akeeba_url_filename,
'frag' : frag,
'totalSize' : totalSize,
'doneSize' : doneSize
})
};
if(percent < 100) {
// More work to do
doAjax(post, function(ret){
ak_urlimport_step(ret);
});
} else {
// Done!
$('#ak-url-gui').hide('fast');
$('#ak-url-progress').hide('fast');
$('#ak-url-complete').show('fast');
$('#ak-url-error').hide('fast');
}
}
function onAKURLJoomla()
{
akeeba_error_callback = AKURLerrorHandler;
var data = {
'task' : 'getjurl'
};
doAjax(data, function(ret)
{
ak_urlimport_gotjurl(ret);
});
}
function onAKURLWordpress()
{
$('#url\\.filename').val('http://wordpress.org/latest.zip');
}
function ak_urlimport_gotjurl(data)
{
var url = '';
if(array_key_exists('url', data)) {
url = data.url;
}
$('#url\\.filename').val(url);
}
function AKURLerrorHandler(msg)
{
$('#ak-url-gui').hide('fast');
$('#ak-url-progress').hide('fast');
$('#ak-url-complete').hide('fast');
$('#ak-url-error').show('fast');
$('#ak-url-errorMessage').html(msg);
}
<?php
}
/**
* Echoes extra HTML on page 1 of Kickstart
*/
public function onPage1()
{
?>
<div id="ak-url-gui" style="display: none">
<div class="step1">
<div class="circle">1</div>
<h2>AKURL_TITLE_STEP1</h2>
<div class="area-container">
<label for="url.filename">AKURL_FILENAME</label>
<span class="field"><input type="text" style="width: 45%" id="url.filename" value="" /></span>
<a id="ak-url-joomla" class="button bluebutton loprofile" onclick="onAKURLJoomla()">AKURL_JOOMLA</a>
<a id="ak-url-wordpress" class="button bluebutton loprofile" onclick="onAKURLWordpress()">AKURL_WORDPRESS</a>
<div class="clr"></div>
<a id="ak-url-connect" class="button" onclick="onAKURLImport()">AKURL_IMPORT</a>
<a id="ak-url-hidegui" class="button bluebutton">AKURL_CANCEL</a>
</div>
</div>
<div class="clr"></div>
</div>
<div id="ak-url-progress" style="display: none">
<div class="circle">2</div>
<h2>AKURL_TITLE_STEP2</h2>
<div class="area-container">
<div id="ak-url-importing">
<div class="warn-not-close">AKURL_DO_NOT_CLOSE</div>
<div id="ak-url-progressbar" class="progressbar">
<div id="ak-url-progressbar-inner" class="progressbar-inner"> </div>
</div>
<div id="ak-url-progresstext"></div>
</div>
</div>
</div>
<div id="ak-url-complete" style="display: none">
<div class="circle">3</div>
<h2>AKURL_TITLE_STEP3</h2>
<div class="area-container">
<div id="ak-url-reload" class="button">AKURL_BTN_RELOAD</div>
</div>
</div>
<div id="ak-url-error" class="error" style="display: none;">
<h3>ERROR_OCCURED</h3>
<p id="ak-url-errorMessage" class="errorMessage"></p>
<div id="ak-url-gotoStart" class="button">BTN_GOTOSTART</div>
</div>
<?php
}
/**
* Outputs HTML to be shown before Step 1's archive selection pane
*/
public function onPage1Step1()
{
?>
<a id="ak-url-showgui" class="button bluebutton loprofile">AKURL_IMPORT</a>
<?php
}
public function urlimport($params)
{
$this->params = $params;
// Fetch data
$filename = $this->getParam('file');
$frag = $this->getParam('frag', -1);
$totalSize = $this->getParam('totalSize', -1);
$doneSize = $this->getParam('doneSize', -1);
debugMsg('Importing from URL');
debugMsg(' file : ' . $filename);
debugMsg(' frag : ' . $frag);
debugMsg(' totalSize : ' . $totalSize);
debugMsg(' doneSize : ' . $doneSize);
// Init retArray
$retArray = array(
"status" => true,
"error" => '',
"frag" => $frag,
"totalSize" => $totalSize,
"doneSize" => $doneSize,
"percent" => 0,
);
try {
AKFactory::set('kickstart.tuning.max_exec_time', '5');
AKFactory::set('kickstart.tuning.run_time_bias', '75');
$timer = new AKCoreTimer();
$start = $timer->getRunningTime(); // Mark the start of this download
$break = false; // Don't break the step
while( ($timer->getTimeLeft() > 0) && !$break )
{
// Figure out where on Earth to put that file
$local_file = KSROOTDIR . '/' . basename($filename);
debugMsg("- Importing from $filename");
// Do we have to initialize the file?
if($frag == -1)
{
debugMsg("-- First frag, killing local file");
// Currently downloaded size
$doneSize = 0;
// Delete and touch the output file
@unlink($local_file);
$fp = @fopen($local_file, 'wb');
if($fp !== false)
{
@fclose($fp);
}
// Init
$frag = 0;
}
// Calculate from and length
$length = 1048576;
$from = $frag * $length;
$to = $length + $from - 1;
//if($from == 0) $from = 1;
// Try to download the first frag
$temp_file = $local_file . '.tmp';
@unlink($temp_file);
$required_time = 1.0;
debugMsg("-- Importing frag $frag, byte position from/to: $from / $to");
$filesize = 0;
try
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $filename);
curl_setopt($ch, CURLOPT_RANGE, "$from-$to");
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
$errno = curl_errno($ch);
$errmsg = curl_error($ch);
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($result === false)
{
$error = "cURL error $errno: $errmsg";
}
elseif ($http_status > 299)
{
$result = false;
$error = "HTTP status $http_status";
}
else
{
$result = file_put_contents($temp_file, $result);
if ($result === false)
{
$error = "Could not open temporary file $temp_file for writing";
}
}
curl_close($ch);
}
catch (Exception $e)
{
$error = $e->getMessage();
}
if(!$result) {
@unlink($temp_file);
// Failed download
if ($frag == 0)
{
// Failure to download first frag = failure to download. Period.
$retArray['status'] = false;
$retArray['error'] = $error;
debugMsg("-- Download FAILED");
return $retArray;
}
else
{
// Since this is a staggered download, consider this normal and finish
$frag = -1;
debugMsg("-- Import complete");
$doneSize = $totalSize;
$break = true;
continue;
}
}
// Add the currently downloaded frag to the total size of downloaded files
if($result)
{
clearstatcache();
$filesize = (int)@filesize($temp_file);
debugMsg("-- Successful download of $filesize bytes");
$doneSize += $filesize;
// Append the file
$fp = @fopen($local_file,'ab');
if($fp === false)
{
debugMsg("-- Can't open local file for writing");
// Can't open the file for writing
@unlink($temp_file);
$retArray['status'] = false;
$retArray['error'] = 'Can\'t write to the local file';
return false;
}
$tf = fopen($temp_file,'rb');
while(!feof($tf))
{
$data = fread($tf, 262144);
fwrite($fp, $data);
}
fclose($tf);
fclose($fp);
@unlink($temp_file);
debugMsg("-- Temporary file merged and removed");
if ($filesize > $length)
{
debugMsg("-- Read more data than the requested length. I assume this file is complete.");
$frag = -1;
}
else
{
$frag++;
debugMsg("-- Proceeding to next fragment, frag $frag");
}
}
// Advance the frag pointer and mark the end
$end = $timer->getRunningTime();
// Do we predict that we have enough time?
$required_time = max(1.1 * ($end - $start), $required_time);
if( $required_time > (10-$end+$start) )
{
$break = true;
}
$start = $end;
}
if ($frag == -1)
{
$percent = 100;
}
elseif($doneSize <= 0)
{
$percent = 0;
}
else
{
if ($totalSize > 0)
{
$percent = 100 * ($doneSize / $totalSize);
}
else
{
$percent = 0;
}
}
// Update $retArray
$retArray = array(
"status" => true,
"error" => '',
"frag" => $frag,
"totalSize" => $totalSize,
"doneSize" => $doneSize,
"percent" => $percent,
);
}
catch(Exception $e)
{
debugMsg("EXCEPTION RAISED:");
debugMsg($e->getMessage());
$retArray['status'] = false;
$retArray['error'] = $e->getMessage();
}
return $retArray;
}
public function getjurl($params)
{
return array(
"url" => $this->getLatestJoomlaURL(),
);
}
public function onLoadTranslations()
{
$translation = AKText::getInstance();
$translation->addDefaultLanguageStrings(array(
'AKURL_IMPORT' => "Import from URL",
'AKURL_TITLE_STEP1' => "Specify the URL",
'AKURL_FILENAME' => "URL to import",
'AKURL_JOOMLA' => "Latest Joomla! release",
'AKURL_WORDPRESS' => "Latest WordPress release",
'AKURL_CANCEL' => "Cancel import",
'AKURL_TITLE_STEP2' => "Importing...",
'AKURL_DO_NOT_CLOSE' => "Please do not close this window while your backup archives are being imported",
'AKURL_TITLE_STEP3' => "Import is complete",
'AKURL_BTN_RELOAD' => "Reload Kickstart",
));
}
private function getLatestJoomlaURL()
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, self::$downloadPageURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$pageHTML = curl_exec($ch);
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (($pageHTML === false) || ($http_status >= 300))
{
return '';
}
$uniqueHTMLid = '<a id="latest"';
$posStart = strpos($pageHTML, $uniqueHTMLid);
if ($posStart === false)
{
return '';
}
$posStart += strlen($uniqueHTMLid);
$posEnd = strpos($pageHTML, '>', $posStart);
if ($posEnd === false)
{
return '';
}
$innerAttributes = substr($pageHTML, $posStart, $posEnd - $posStart);
$posStart = strpos($innerAttributes, '"');
$posEnd = strpos($innerAttributes, '"', $posStart + 1);
$url = substr($innerAttributes, $posStart + 1, $posEnd - $posStart - 1);
return $url;
}
}