Passed
Push — master ( 43d553...f25e71 )
by Sebastian
02:52
created
src/FileHelper.php 2 patches
Indentation   +422 added lines, -422 removed lines patch added patch discarded remove patch
@@ -78,32 +78,32 @@  discard block
 block discarded – undo
78 78
     
79 79
     const ERROR_PATH_IS_NOT_A_FOLDER = 340034;
80 80
     
81
-   /**
82
-    * Opens a serialized file and returns the unserialized data.
83
-    * 
84
-    * @param string $file
85
-    * @throws FileHelper_Exception
86
-    * @return array
87
-    * @deprecated Use parseSerializedFile() instead.
88
-    * @see FileHelper::parseSerializedFile()
89
-    */
81
+    /**
82
+     * Opens a serialized file and returns the unserialized data.
83
+     * 
84
+     * @param string $file
85
+     * @throws FileHelper_Exception
86
+     * @return array
87
+     * @deprecated Use parseSerializedFile() instead.
88
+     * @see FileHelper::parseSerializedFile()
89
+     */
90 90
     public static function openUnserialized(string $file) : array
91 91
     {
92 92
         return self::parseSerializedFile($file);
93 93
     }
94 94
 
95
-   /**
96
-    * Opens a serialized file and returns the unserialized data.
97
-    *
98
-    * @param string $file
99
-    * @throws FileHelper_Exception
100
-    * @return array
101
-    * @see FileHelper::parseSerializedFile()
102
-    * 
103
-    * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
104
-    * @see FileHelper::ERROR_SERIALIZED_FILE_CANNOT_BE_READ
105
-    * @see FileHelper::ERROR_SERIALIZED_FILE_UNSERIALZE_FAILED
106
-    */
95
+    /**
96
+     * Opens a serialized file and returns the unserialized data.
97
+     *
98
+     * @param string $file
99
+     * @throws FileHelper_Exception
100
+     * @return array
101
+     * @see FileHelper::parseSerializedFile()
102
+     * 
103
+     * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
104
+     * @see FileHelper::ERROR_SERIALIZED_FILE_CANNOT_BE_READ
105
+     * @see FileHelper::ERROR_SERIALIZED_FILE_UNSERIALZE_FAILED
106
+     */
107 107
     public static function parseSerializedFile(string $file)
108 108
     {
109 109
         self::requireFileExists($file);
@@ -172,13 +172,13 @@  discard block
 block discarded – undo
172 172
         return rmdir($rootFolder);
173 173
     }
174 174
     
175
-   /**
176
-    * Create a folder, if it does not exist yet.
177
-    *  
178
-    * @param string $path
179
-    * @throws FileHelper_Exception
180
-    * @see FileHelper::ERROR_CANNOT_CREATE_FOLDER
181
-    */
175
+    /**
176
+     * Create a folder, if it does not exist yet.
177
+     *  
178
+     * @param string $path
179
+     * @throws FileHelper_Exception
180
+     * @see FileHelper::ERROR_CANNOT_CREATE_FOLDER
181
+     */
182 182
     public static function createFolder($path)
183 183
     {
184 184
         if(is_dir($path) || mkdir($path, 0777, true)) {
@@ -225,22 +225,22 @@  discard block
 block discarded – undo
225 225
         }
226 226
     }
227 227
     
228
-   /**
229
-    * Copies a file to the target location. Includes checks
230
-    * for most error sources, like the source file not being
231
-    * readable. Automatically creates the target folder if it
232
-    * does not exist yet.
233
-    * 
234
-    * @param string $sourcePath
235
-    * @param string $targetPath
236
-    * @throws FileHelper_Exception
237
-    * 
238
-    * @see FileHelper::ERROR_CANNOT_CREATE_FOLDER
239
-    * @see FileHelper::ERROR_SOURCE_FILE_NOT_FOUND
240
-    * @see FileHelper::ERROR_SOURCE_FILE_NOT_READABLE
241
-    * @see FileHelper::ERROR_TARGET_COPY_FOLDER_NOT_WRITABLE
242
-    * @see FileHelper::ERROR_CANNOT_COPY_FILE
243
-    */
228
+    /**
229
+     * Copies a file to the target location. Includes checks
230
+     * for most error sources, like the source file not being
231
+     * readable. Automatically creates the target folder if it
232
+     * does not exist yet.
233
+     * 
234
+     * @param string $sourcePath
235
+     * @param string $targetPath
236
+     * @throws FileHelper_Exception
237
+     * 
238
+     * @see FileHelper::ERROR_CANNOT_CREATE_FOLDER
239
+     * @see FileHelper::ERROR_SOURCE_FILE_NOT_FOUND
240
+     * @see FileHelper::ERROR_SOURCE_FILE_NOT_READABLE
241
+     * @see FileHelper::ERROR_TARGET_COPY_FOLDER_NOT_WRITABLE
242
+     * @see FileHelper::ERROR_CANNOT_COPY_FILE
243
+     */
244 244
     public static function copyFile($sourcePath, $targetPath)
245 245
     {
246 246
         self::requireFileExists($sourcePath, self::ERROR_SOURCE_FILE_NOT_FOUND);
@@ -291,15 +291,15 @@  discard block
 block discarded – undo
291 291
         );
292 292
     }
293 293
     
294
-   /**
295
-    * Deletes the target file. Ignored if it cannot be found,
296
-    * and throws an exception if it fails.
297
-    * 
298
-    * @param string $filePath
299
-    * @throws FileHelper_Exception
300
-    * 
301
-    * @see FileHelper::ERROR_CANNOT_DELETE_FILE
302
-    */
294
+    /**
295
+     * Deletes the target file. Ignored if it cannot be found,
296
+     * and throws an exception if it fails.
297
+     * 
298
+     * @param string $filePath
299
+     * @throws FileHelper_Exception
300
+     * 
301
+     * @see FileHelper::ERROR_CANNOT_DELETE_FILE
302
+     */
303 303
     public static function deleteFile(string $filePath) : void
304 304
     {
305 305
         if(!file_exists($filePath)) {
@@ -321,15 +321,15 @@  discard block
 block discarded – undo
321 321
     }
322 322
 
323 323
     /**
324
-    * Creates a new CSV parser instance and returns it.
325
-    * 
326
-    * @param string $delimiter
327
-    * @param string $enclosure
328
-    * @param string $escape
329
-    * @param bool $heading
330
-    * @return \parseCSV
331
-    * @todo Move this to the CSV helper.
332
-    */
324
+     * Creates a new CSV parser instance and returns it.
325
+     * 
326
+     * @param string $delimiter
327
+     * @param string $enclosure
328
+     * @param string $escape
329
+     * @param bool $heading
330
+     * @return \parseCSV
331
+     * @todo Move this to the CSV helper.
332
+     */
333 333
     public static function createCSVParser(string $delimiter = ';', string $enclosure = '"', string $escape = '\\', bool $heading=false) : \parseCSV
334 334
     {
335 335
         if($delimiter==='') { $delimiter = ';'; }
@@ -344,23 +344,23 @@  discard block
 block discarded – undo
344 344
         return $parser;
345 345
     }
346 346
 
347
-   /**
348
-    * Parses all lines in the specified string and returns an
349
-    * indexed array with all csv values in each line.
350
-    *
351
-    * @param string $csv
352
-    * @param string $delimiter
353
-    * @param string $enclosure
354
-    * @param string $escape
355
-    * @param bool $heading
356
-    * @return array
357
-    * @throws FileHelper_Exception
358
-    * 
359
-    * @todo Move this to the CSVHelper.
360
-    *
361
-    * @see parseCSVFile()
362
-    * @see FileHelper::ERROR_PARSING_CSV
363
-    */
347
+    /**
348
+     * Parses all lines in the specified string and returns an
349
+     * indexed array with all csv values in each line.
350
+     *
351
+     * @param string $csv
352
+     * @param string $delimiter
353
+     * @param string $enclosure
354
+     * @param string $escape
355
+     * @param bool $heading
356
+     * @return array
357
+     * @throws FileHelper_Exception
358
+     * 
359
+     * @todo Move this to the CSVHelper.
360
+     *
361
+     * @see parseCSVFile()
362
+     * @see FileHelper::ERROR_PARSING_CSV
363
+     */
364 364
     public static function parseCSVString(string $csv, string $delimiter = ';', string $enclosure = '"', string $escape = '\\', bool $heading=false) : array
365 365
     {
366 366
         $parser = self::createCSVParser($delimiter, $enclosure, $escape, $heading);
@@ -532,31 +532,31 @@  discard block
 block discarded – undo
532 532
         );
533 533
     }
534 534
     
535
-   /**
536
-    * Verifies whether the target file is a PHP file. The path
537
-    * to the file can be a path to a file as a string, or a 
538
-    * DirectoryIterator object instance.
539
-    * 
540
-    * @param string|\DirectoryIterator $pathOrDirIterator
541
-    * @return boolean
542
-    */
535
+    /**
536
+     * Verifies whether the target file is a PHP file. The path
537
+     * to the file can be a path to a file as a string, or a 
538
+     * DirectoryIterator object instance.
539
+     * 
540
+     * @param string|\DirectoryIterator $pathOrDirIterator
541
+     * @return boolean
542
+     */
543 543
     public static function isPHPFile($pathOrDirIterator)
544 544
     {
545
-    	if(self::getExtension($pathOrDirIterator) == 'php') {
546
-    		return true;
547
-    	}
545
+        if(self::getExtension($pathOrDirIterator) == 'php') {
546
+            return true;
547
+        }
548 548
     	
549
-    	return false;
549
+        return false;
550 550
     }
551 551
     
552
-   /**
553
-    * Retrieves the extension of the specified file. Can be a path
554
-    * to a file as a string, or a DirectoryIterator object instance.
555
-    * 
556
-    * @param string|\DirectoryIterator $pathOrDirIterator
557
-    * @param bool $lowercase
558
-    * @return string
559
-    */
552
+    /**
553
+     * Retrieves the extension of the specified file. Can be a path
554
+     * to a file as a string, or a DirectoryIterator object instance.
555
+     * 
556
+     * @param string|\DirectoryIterator $pathOrDirIterator
557
+     * @param bool $lowercase
558
+     * @return string
559
+     */
560 560
     public static function getExtension($pathOrDirIterator, bool $lowercase = true) : string
561 561
     {
562 562
         if($pathOrDirIterator instanceof \DirectoryIterator) {
@@ -567,51 +567,51 @@  discard block
 block discarded – undo
567 567
          
568 568
         $ext = pathinfo($filename, PATHINFO_EXTENSION);
569 569
         if($lowercase) {
570
-        	$ext = mb_strtolower($ext);
570
+            $ext = mb_strtolower($ext);
571 571
         }
572 572
         
573 573
         return $ext;
574 574
     }
575 575
     
576
-   /**
577
-    * Retrieves the file name from a path, with or without extension.
578
-    * The path to the file can be a string, or a DirectoryIterator object
579
-    * instance.
580
-    * 
581
-    * In case of folders, behaves like the pathinfo function: returns
582
-    * the name of the folder.
583
-    * 
584
-    * @param string|\DirectoryIterator $pathOrDirIterator
585
-    * @param bool $extension
586
-    * @return string
587
-    */
576
+    /**
577
+     * Retrieves the file name from a path, with or without extension.
578
+     * The path to the file can be a string, or a DirectoryIterator object
579
+     * instance.
580
+     * 
581
+     * In case of folders, behaves like the pathinfo function: returns
582
+     * the name of the folder.
583
+     * 
584
+     * @param string|\DirectoryIterator $pathOrDirIterator
585
+     * @param bool $extension
586
+     * @return string
587
+     */
588 588
     public static function getFilename($pathOrDirIterator, $extension = true)
589 589
     {
590 590
         $path = $pathOrDirIterator;
591
-    	if($pathOrDirIterator instanceof \DirectoryIterator) {
592
-    		$path = $pathOrDirIterator->getFilename();
593
-    	}
591
+        if($pathOrDirIterator instanceof \DirectoryIterator) {
592
+            $path = $pathOrDirIterator->getFilename();
593
+        }
594 594
     	
595
-    	$path = self::normalizePath($path);
595
+        $path = self::normalizePath($path);
596 596
     	
597
-    	if(!$extension) {
598
-    	    return pathinfo($path, PATHINFO_FILENAME);
599
-    	}
597
+        if(!$extension) {
598
+            return pathinfo($path, PATHINFO_FILENAME);
599
+        }
600 600
     	
601
-    	return pathinfo($path, PATHINFO_BASENAME); 
601
+        return pathinfo($path, PATHINFO_BASENAME); 
602 602
     }
603 603
    
604
-   /**
605
-    * Tries to read the contents of the target file and
606
-    * treat it as JSON to return the decoded JSON data.
607
-    * 
608
-    * @param string $file
609
-    * @throws FileHelper_Exception
610
-    * @return array
611
-    * 
612
-    * @see FileHelper::ERROR_CANNOT_FIND_JSON_FILE
613
-    * @see FileHelper::ERROR_CANNOT_DECODE_JSON_FILE
614
-    */ 
604
+    /**
605
+     * Tries to read the contents of the target file and
606
+     * treat it as JSON to return the decoded JSON data.
607
+     * 
608
+     * @param string $file
609
+     * @throws FileHelper_Exception
610
+     * @return array
611
+     * 
612
+     * @see FileHelper::ERROR_CANNOT_FIND_JSON_FILE
613
+     * @see FileHelper::ERROR_CANNOT_DECODE_JSON_FILE
614
+     */ 
615 615
     public static function parseJSONFile(string $file, $targetEncoding=null, $sourceEncoding=null)
616 616
     {
617 617
         self::requireFileExists($file, self::ERROR_CANNOT_FIND_JSON_FILE);
@@ -647,16 +647,16 @@  discard block
 block discarded – undo
647 647
         return $json;
648 648
     }
649 649
     
650
-   /**
651
-    * Corrects common formatting mistakes when users enter
652
-    * file names, like too many spaces, dots and the like.
653
-    * 
654
-    * NOTE: if the file name contains a path, the path is
655
-    * stripped, leaving only the file name.
656
-    * 
657
-    * @param string $name
658
-    * @return string
659
-    */
650
+    /**
651
+     * Corrects common formatting mistakes when users enter
652
+     * file names, like too many spaces, dots and the like.
653
+     * 
654
+     * NOTE: if the file name contains a path, the path is
655
+     * stripped, leaving only the file name.
656
+     * 
657
+     * @param string $name
658
+     * @return string
659
+     */
660 660
     public static function fixFileName(string $name) : string
661 661
     {
662 662
         $name = trim($name);
@@ -686,68 +686,68 @@  discard block
 block discarded – undo
686 686
         return $name;
687 687
     }
688 688
     
689
-   /**
690
-    * Creates an instance of the file finder, which is an easier
691
-    * alternative to the other manual findFile methods, since all
692
-    * options can be set by chaining.
693
-    * 
694
-    * @param string $path
695
-    * @return FileHelper_FileFinder
696
-    */
689
+    /**
690
+     * Creates an instance of the file finder, which is an easier
691
+     * alternative to the other manual findFile methods, since all
692
+     * options can be set by chaining.
693
+     * 
694
+     * @param string $path
695
+     * @return FileHelper_FileFinder
696
+     */
697 697
     public static function createFileFinder(string $path) : FileHelper_FileFinder
698 698
     {
699 699
         return new FileHelper_FileFinder($path);
700 700
     }
701 701
     
702
-   /**
703
-    * Searches for all HTML files in the target folder.
704
-    * 
705
-    * NOTE: This method only exists for backwards compatibility.
706
-    * Use the `createFileFinder()` method instead, which offers
707
-    * an object oriented interface that is much easier to use.
708
-    * 
709
-    * @param string $targetFolder
710
-    * @param array $options
711
-    * @return array An indexed array with files.
712
-    * @see FileHelper::createFileFinder()
713
-    */
702
+    /**
703
+     * Searches for all HTML files in the target folder.
704
+     * 
705
+     * NOTE: This method only exists for backwards compatibility.
706
+     * Use the `createFileFinder()` method instead, which offers
707
+     * an object oriented interface that is much easier to use.
708
+     * 
709
+     * @param string $targetFolder
710
+     * @param array $options
711
+     * @return array An indexed array with files.
712
+     * @see FileHelper::createFileFinder()
713
+     */
714 714
     public static function findHTMLFiles(string $targetFolder, array $options=array()) : array
715 715
     {
716 716
         return self::findFiles($targetFolder, array('html'), $options);
717 717
     }
718 718
 
719
-   /**
720
-    * Searches for all PHP files in the target folder.
721
-    * 
722
-    * NOTE: This method only exists for backwards compatibility.
723
-    * Use the `createFileFinder()` method instead, which offers
724
-    * an object oriented interface that is much easier to use.
725
-    * 
726
-    * @param string $targetFolder
727
-    * @param array $options
728
-    * @return array An indexed array of PHP files.
729
-    * @see FileHelper::createFileFinder()
730
-    */
719
+    /**
720
+     * Searches for all PHP files in the target folder.
721
+     * 
722
+     * NOTE: This method only exists for backwards compatibility.
723
+     * Use the `createFileFinder()` method instead, which offers
724
+     * an object oriented interface that is much easier to use.
725
+     * 
726
+     * @param string $targetFolder
727
+     * @param array $options
728
+     * @return array An indexed array of PHP files.
729
+     * @see FileHelper::createFileFinder()
730
+     */
731 731
     public static function findPHPFiles(string $targetFolder, array $options=array()) : array
732 732
     {
733 733
         return self::findFiles($targetFolder, array('php'), $options);
734 734
     }
735 735
     
736
-   /**
737
-    * Finds files according to the specified options.
738
-    * 
739
-    * NOTE: This method only exists for backwards compatibility.
740
-    * Use the `createFileFinder()` method instead, which offers
741
-    * an object oriented interface that is much easier to use.
742
-    *  
743
-    * @param string $targetFolder
744
-    * @param array $extensions
745
-    * @param array $options
746
-    * @param array $files
747
-    * @throws FileHelper_Exception
748
-    * @return array
749
-    * @see FileHelper::createFileFinder()
750
-    */
736
+    /**
737
+     * Finds files according to the specified options.
738
+     * 
739
+     * NOTE: This method only exists for backwards compatibility.
740
+     * Use the `createFileFinder()` method instead, which offers
741
+     * an object oriented interface that is much easier to use.
742
+     *  
743
+     * @param string $targetFolder
744
+     * @param array $extensions
745
+     * @param array $options
746
+     * @param array $files
747
+     * @throws FileHelper_Exception
748
+     * @return array
749
+     * @see FileHelper::createFileFinder()
750
+     */
751 751
     public static function findFiles(string $targetFolder, array $extensions=array(), array $options=array(), array $files=array()) : array
752 752
     {
753 753
         $finder = self::createFileFinder($targetFolder);
@@ -773,13 +773,13 @@  discard block
 block discarded – undo
773 773
         return $finder->getAll();
774 774
     }
775 775
 
776
-   /**
777
-    * Removes the extension from the specified path or file name,
778
-    * if any, and returns the name without the extension.
779
-    * 
780
-    * @param string $filename
781
-    * @return sTring
782
-    */
776
+    /**
777
+     * Removes the extension from the specified path or file name,
778
+     * if any, and returns the name without the extension.
779
+     * 
780
+     * @param string $filename
781
+     * @return sTring
782
+     */
783 783
     public static function removeExtension(string $filename) : string
784 784
     {
785 785
         // normalize paths to allow windows style slashes even on nix servers
@@ -788,22 +788,22 @@  discard block
 block discarded – undo
788 788
         return pathinfo($filename, PATHINFO_FILENAME);
789 789
     }
790 790
     
791
-   /**
792
-    * Detects the UTF BOM in the target file, if any. Returns
793
-    * the encoding matching the BOM, which can be any of the
794
-    * following:
795
-    * 
796
-    * <ul>
797
-    * <li>UTF32-BE</li>
798
-    * <li>UTF32-LE</li>
799
-    * <li>UTF16-BE</li>
800
-    * <li>UTF16-LE</li>
801
-    * <li>UTF8</li>
802
-    * </ul>
803
-    * 
804
-    * @param string $filename
805
-    * @return string|NULL
806
-    */
791
+    /**
792
+     * Detects the UTF BOM in the target file, if any. Returns
793
+     * the encoding matching the BOM, which can be any of the
794
+     * following:
795
+     * 
796
+     * <ul>
797
+     * <li>UTF32-BE</li>
798
+     * <li>UTF32-LE</li>
799
+     * <li>UTF16-BE</li>
800
+     * <li>UTF16-LE</li>
801
+     * <li>UTF8</li>
802
+     * </ul>
803
+     * 
804
+     * @param string $filename
805
+     * @return string|NULL
806
+     */
807 807
     public static function detectUTFBom(string $filename) : ?string
808 808
     {
809 809
         $fp = fopen($filename, 'r');
@@ -835,13 +835,13 @@  discard block
 block discarded – undo
835 835
     
836 836
     protected static $utfBoms;
837 837
     
838
-   /**
839
-    * Retrieves a list of all UTF byte order mark character
840
-    * sequences, as an assocative array with UTF encoding => bom sequence
841
-    * pairs.
842
-    * 
843
-    * @return array
844
-    */
838
+    /**
839
+     * Retrieves a list of all UTF byte order mark character
840
+     * sequences, as an assocative array with UTF encoding => bom sequence
841
+     * pairs.
842
+     * 
843
+     * @return array
844
+     */
845 845
     public static function getUTFBOMs()
846 846
     {
847 847
         if(!isset(self::$utfBoms)) {
@@ -857,15 +857,15 @@  discard block
 block discarded – undo
857 857
         return self::$utfBoms;
858 858
     }
859 859
     
860
-   /**
861
-    * Checks whether the specified encoding is a valid
862
-    * unicode encoding, for example "UTF16-LE" or "UTF8".
863
-    * Also accounts for alternate way to write the, like
864
-    * "UTF-8", and omitting little/big endian suffixes.
865
-    * 
866
-    * @param string $encoding
867
-    * @return boolean
868
-    */
860
+    /**
861
+     * Checks whether the specified encoding is a valid
862
+     * unicode encoding, for example "UTF16-LE" or "UTF8".
863
+     * Also accounts for alternate way to write the, like
864
+     * "UTF-8", and omitting little/big endian suffixes.
865
+     * 
866
+     * @param string $encoding
867
+     * @return boolean
868
+     */
869 869
     public static function isValidUnicodeEncoding(string $encoding) : bool
870 870
     {
871 871
         $encodings = self::getKnownUnicodeEncodings();
@@ -884,40 +884,40 @@  discard block
 block discarded – undo
884 884
         return in_array($encoding, $keep);
885 885
     }
886 886
     
887
-   /**
888
-    * Retrieves a list of all known unicode file encodings.
889
-    * @return array
890
-    */
887
+    /**
888
+     * Retrieves a list of all known unicode file encodings.
889
+     * @return array
890
+     */
891 891
     public static function getKnownUnicodeEncodings()
892 892
     {
893 893
         return array_keys(self::getUTFBOMs());
894 894
     }
895 895
     
896
-   /**
897
-    * Normalizes the slash style in a file or folder path,
898
-    * by replacing any antislashes with forward slashes.
899
-    * 
900
-    * @param string $path
901
-    * @return string
902
-    */
896
+    /**
897
+     * Normalizes the slash style in a file or folder path,
898
+     * by replacing any antislashes with forward slashes.
899
+     * 
900
+     * @param string $path
901
+     * @return string
902
+     */
903 903
     public static function normalizePath(string $path) : string
904 904
     {
905 905
         return str_replace(array('\\', '//'), array('/', '/'), $path);
906 906
     }
907 907
     
908
-   /**
909
-    * Saves the specified data to a file, JSON encoded.
910
-    * 
911
-    * @param mixed $data
912
-    * @param string $file
913
-    * @param bool $pretty
914
-    * @throws FileHelper_Exception
915
-    * 
916
-    * @see FileHelper::ERROR_JSON_ENCODE_ERROR
917
-    * @see FileHelper::ERROR_SAVE_FOLDER_NOT_WRITABLE
918
-    * @see FileHelper::ERROR_SAVE_FILE_NOT_WRITABLE
919
-    * @see FileHelper::ERROR_SAVE_FILE_WRITE_FAILED
920
-    */
908
+    /**
909
+     * Saves the specified data to a file, JSON encoded.
910
+     * 
911
+     * @param mixed $data
912
+     * @param string $file
913
+     * @param bool $pretty
914
+     * @throws FileHelper_Exception
915
+     * 
916
+     * @see FileHelper::ERROR_JSON_ENCODE_ERROR
917
+     * @see FileHelper::ERROR_SAVE_FOLDER_NOT_WRITABLE
918
+     * @see FileHelper::ERROR_SAVE_FILE_NOT_WRITABLE
919
+     * @see FileHelper::ERROR_SAVE_FILE_WRITE_FAILED
920
+     */
921 921
     public static function saveAsJSON($data, string $file, bool $pretty=false)
922 922
     {
923 923
         $options = null;
@@ -941,18 +941,18 @@  discard block
 block discarded – undo
941 941
         self::saveFile($file, $json);
942 942
     }
943 943
    
944
-   /**
945
-    * Saves the specified content to the target file, creating
946
-    * the file and the folder as necessary.
947
-    * 
948
-    * @param string $filePath
949
-    * @param string $content
950
-    * @throws FileHelper_Exception
951
-    * 
952
-    * @see FileHelper::ERROR_SAVE_FOLDER_NOT_WRITABLE
953
-    * @see FileHelper::ERROR_SAVE_FILE_NOT_WRITABLE
954
-    * @see FileHelper::ERROR_SAVE_FILE_WRITE_FAILED
955
-    */
944
+    /**
945
+     * Saves the specified content to the target file, creating
946
+     * the file and the folder as necessary.
947
+     * 
948
+     * @param string $filePath
949
+     * @param string $content
950
+     * @throws FileHelper_Exception
951
+     * 
952
+     * @see FileHelper::ERROR_SAVE_FOLDER_NOT_WRITABLE
953
+     * @see FileHelper::ERROR_SAVE_FILE_NOT_WRITABLE
954
+     * @see FileHelper::ERROR_SAVE_FILE_WRITE_FAILED
955
+     */
956 956
     public static function saveFile(string $filePath, string $content='') : void
957 957
     {
958 958
         // target file already exists
@@ -1005,12 +1005,12 @@  discard block
 block discarded – undo
1005 1005
         );
1006 1006
     }
1007 1007
     
1008
-   /**
1009
-    * Checks whether it is possible to run PHP command 
1010
-    * line commands.
1011
-    * 
1012
-    * @return boolean
1013
-    */
1008
+    /**
1009
+     * Checks whether it is possible to run PHP command 
1010
+     * line commands.
1011
+     * 
1012
+     * @return boolean
1013
+     */
1014 1014
     public static function canMakePHPCalls() : bool
1015 1015
     {
1016 1016
         return self::cliCommandExists('php');
@@ -1087,16 +1087,16 @@  discard block
 block discarded – undo
1087 1087
         return $result;
1088 1088
     }
1089 1089
     
1090
-   /**
1091
-    * Validates a PHP file's syntax.
1092
-    * 
1093
-    * NOTE: This will fail silently if the PHP command line
1094
-    * is not available. Use {@link FileHelper::canMakePHPCalls()}
1095
-    * to check this beforehand as needed.
1096
-    * 
1097
-    * @param string $path
1098
-    * @return boolean|array A boolean true if the file is valid, an array with validation messages otherwise.
1099
-    */
1090
+    /**
1091
+     * Validates a PHP file's syntax.
1092
+     * 
1093
+     * NOTE: This will fail silently if the PHP command line
1094
+     * is not available. Use {@link FileHelper::canMakePHPCalls()}
1095
+     * to check this beforehand as needed.
1096
+     * 
1097
+     * @param string $path
1098
+     * @return boolean|array A boolean true if the file is valid, an array with validation messages otherwise.
1099
+     */
1100 1100
     public static function checkPHPFileSyntax($path)
1101 1101
     {
1102 1102
         if(!self::canMakePHPCalls()) {
@@ -1120,14 +1120,14 @@  discard block
 block discarded – undo
1120 1120
         return $output;
1121 1121
     }
1122 1122
     
1123
-   /**
1124
-    * Retrieves the last modified date for the specified file or folder.
1125
-    * 
1126
-    * Note: If the target does not exist, returns null. 
1127
-    * 
1128
-    * @param string $path
1129
-    * @return \DateTime|NULL
1130
-    */
1123
+    /**
1124
+     * Retrieves the last modified date for the specified file or folder.
1125
+     * 
1126
+     * Note: If the target does not exist, returns null. 
1127
+     * 
1128
+     * @param string $path
1129
+     * @return \DateTime|NULL
1130
+     */
1131 1131
     public static function getModifiedDate($path)
1132 1132
     {
1133 1133
         $time = filemtime($path);
@@ -1140,24 +1140,24 @@  discard block
 block discarded – undo
1140 1140
         return null; 
1141 1141
     }
1142 1142
     
1143
-   /**
1144
-    * Retrieves the names of all subfolders in the specified path.
1145
-    * 
1146
-    * Available options:
1147
-    * 
1148
-    * - recursive: true/false
1149
-    *   Whether to search for subfolders recursively. 
1150
-    *   
1151
-    * - absolute-paths: true/false
1152
-    *   Whether to return a list of absolute paths.
1153
-    * 
1154
-    * @param string $targetFolder
1155
-    * @param array $options
1156
-    * @throws FileHelper_Exception
1157
-    * @return string[]
1158
-    * 
1159
-    * @todo Move this to a separate class.
1160
-    */
1143
+    /**
1144
+     * Retrieves the names of all subfolders in the specified path.
1145
+     * 
1146
+     * Available options:
1147
+     * 
1148
+     * - recursive: true/false
1149
+     *   Whether to search for subfolders recursively. 
1150
+     *   
1151
+     * - absolute-paths: true/false
1152
+     *   Whether to return a list of absolute paths.
1153
+     * 
1154
+     * @param string $targetFolder
1155
+     * @param array $options
1156
+     * @throws FileHelper_Exception
1157
+     * @return string[]
1158
+     * 
1159
+     * @todo Move this to a separate class.
1160
+     */
1161 1161
     public static function getSubfolders($targetFolder, $options = array())
1162 1162
     {
1163 1163
         if(!is_dir($targetFolder)) 
@@ -1218,16 +1218,16 @@  discard block
 block discarded – undo
1218 1218
         return $result;
1219 1219
     }
1220 1220
 
1221
-   /**
1222
-    * Retrieves the maximum allowed upload file size, in bytes.
1223
-    * Takes into account the PHP ini settings <code>post_max_size</code>
1224
-    * and <code>upload_max_filesize</code>. Since these cannot
1225
-    * be modified at runtime, they are the hard limits for uploads.
1226
-    * 
1227
-    * NOTE: Based on binary values, where 1KB = 1024 Bytes.
1228
-    * 
1229
-    * @return int Will return <code>-1</code> if no limit.
1230
-    */
1221
+    /**
1222
+     * Retrieves the maximum allowed upload file size, in bytes.
1223
+     * Takes into account the PHP ini settings <code>post_max_size</code>
1224
+     * and <code>upload_max_filesize</code>. Since these cannot
1225
+     * be modified at runtime, they are the hard limits for uploads.
1226
+     * 
1227
+     * NOTE: Based on binary values, where 1KB = 1024 Bytes.
1228
+     * 
1229
+     * @return int Will return <code>-1</code> if no limit.
1230
+     */
1231 1231
     public static function getMaxUploadFilesize() : int
1232 1232
     {
1233 1233
         static $max_size = -1;
@@ -1265,16 +1265,16 @@  discard block
 block discarded – undo
1265 1265
         return round($size);
1266 1266
     }
1267 1267
    
1268
-   /**
1269
-    * Makes a path relative using a folder depth: will reduce the
1270
-    * length of the path so that only the amount of folders defined
1271
-    * in the <code>$depth</code> attribute are shown below the actual
1272
-    * folder or file in the path.
1273
-    *  
1274
-    * @param string  $path The absolute or relative path
1275
-    * @param int $depth The folder depth to reduce the path to
1276
-    * @return string
1277
-    */
1268
+    /**
1269
+     * Makes a path relative using a folder depth: will reduce the
1270
+     * length of the path so that only the amount of folders defined
1271
+     * in the <code>$depth</code> attribute are shown below the actual
1272
+     * folder or file in the path.
1273
+     *  
1274
+     * @param string  $path The absolute or relative path
1275
+     * @param int $depth The folder depth to reduce the path to
1276
+     * @return string
1277
+     */
1278 1278
     public static function relativizePathByDepth(string $path, int $depth=2) : string
1279 1279
     {
1280 1280
         $path = self::normalizePath($path);
@@ -1312,23 +1312,23 @@  discard block
 block discarded – undo
1312 1312
         return trim(implode('/', $tokens), '/');
1313 1313
     }
1314 1314
     
1315
-   /**
1316
-    * Makes the specified path relative to another path,
1317
-    * by removing one from the other if found. Also 
1318
-    * normalizes the path to use forward slashes. 
1319
-    * 
1320
-    * Example:
1321
-    * 
1322
-    * <pre>
1323
-    * relativizePath('c:\some\folder\to\file.txt', 'c:\some\folder');
1324
-    * </pre>
1325
-    * 
1326
-    * Result: <code>to/file.txt</code>
1327
-    * 
1328
-    * @param string $path
1329
-    * @param string $relativeTo
1330
-    * @return string
1331
-    */
1315
+    /**
1316
+     * Makes the specified path relative to another path,
1317
+     * by removing one from the other if found. Also 
1318
+     * normalizes the path to use forward slashes. 
1319
+     * 
1320
+     * Example:
1321
+     * 
1322
+     * <pre>
1323
+     * relativizePath('c:\some\folder\to\file.txt', 'c:\some\folder');
1324
+     * </pre>
1325
+     * 
1326
+     * Result: <code>to/file.txt</code>
1327
+     * 
1328
+     * @param string $path
1329
+     * @param string $relativeTo
1330
+     * @return string
1331
+     */
1332 1332
     public static function relativizePath(string $path, string $relativeTo) : string
1333 1333
     {
1334 1334
         $path = self::normalizePath($path);
@@ -1340,17 +1340,17 @@  discard block
 block discarded – undo
1340 1340
         return $relative;
1341 1341
     }
1342 1342
     
1343
-   /**
1344
-    * Checks that the target file exists, and throws an exception
1345
-    * if it does not. 
1346
-    * 
1347
-    * @param string $path
1348
-    * @param int|NULL $errorCode Optional custom error code
1349
-    * @throws FileHelper_Exception
1350
-    * @return string The real path to the file
1351
-    * 
1352
-    * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
1353
-    */
1343
+    /**
1344
+     * Checks that the target file exists, and throws an exception
1345
+     * if it does not. 
1346
+     * 
1347
+     * @param string $path
1348
+     * @param int|NULL $errorCode Optional custom error code
1349
+     * @throws FileHelper_Exception
1350
+     * @return string The real path to the file
1351
+     * 
1352
+     * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
1353
+     */
1354 1354
     public static function requireFileExists(string $path, $errorCode=null) : string
1355 1355
     {
1356 1356
         $result = realpath($path);
@@ -1369,18 +1369,18 @@  discard block
 block discarded – undo
1369 1369
         );
1370 1370
     }
1371 1371
     
1372
-   /**
1373
-    * Reads a specific line number from the target file and returns its
1374
-    * contents, if the file has such a line. Does so with little memory
1375
-    * usage, as the file is not read entirely into memory.
1376
-    * 
1377
-    * @param string $path
1378
-    * @param int $lineNumber Note: 1-based; the first line is number 1.
1379
-    * @return string|NULL Will return null if the requested line does not exist.
1380
-    * @throws FileHelper_Exception
1381
-    * 
1382
-    * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
1383
-    */
1372
+    /**
1373
+     * Reads a specific line number from the target file and returns its
1374
+     * contents, if the file has such a line. Does so with little memory
1375
+     * usage, as the file is not read entirely into memory.
1376
+     * 
1377
+     * @param string $path
1378
+     * @param int $lineNumber Note: 1-based; the first line is number 1.
1379
+     * @return string|NULL Will return null if the requested line does not exist.
1380
+     * @throws FileHelper_Exception
1381
+     * 
1382
+     * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
1383
+     */
1384 1384
     public static function getLineFromFile(string $path, int $lineNumber) : ?string
1385 1385
     {
1386 1386
         self::requireFileExists($path);
@@ -1396,19 +1396,19 @@  discard block
 block discarded – undo
1396 1396
         $file->seek($targetLine);
1397 1397
         
1398 1398
         if($file->key() !== $targetLine) {
1399
-             return null;
1399
+                return null;
1400 1400
         }
1401 1401
         
1402 1402
         return $file->current(); 
1403 1403
     }
1404 1404
     
1405
-   /**
1406
-    * Retrieves the total amount of lines in the file, without 
1407
-    * reading the whole file into memory.
1408
-    * 
1409
-    * @param string $path
1410
-    * @return int
1411
-    */
1405
+    /**
1406
+     * Retrieves the total amount of lines in the file, without 
1407
+     * reading the whole file into memory.
1408
+     * 
1409
+     * @param string $path
1410
+     * @return int
1411
+     */
1412 1412
     public static function countFileLines(string $path) : int
1413 1413
     {
1414 1414
         self::requireFileExists($path);
@@ -1438,26 +1438,26 @@  discard block
 block discarded – undo
1438 1438
         return $number+1;
1439 1439
     }
1440 1440
     
1441
-   /**
1442
-    * Parses the target file to detect any PHP classes contained
1443
-    * within, and retrieve information on them. Does not use the 
1444
-    * PHP reflection API.
1445
-    * 
1446
-    * @param string $filePath
1447
-    * @return FileHelper_PHPClassInfo
1448
-    */
1441
+    /**
1442
+     * Parses the target file to detect any PHP classes contained
1443
+     * within, and retrieve information on them. Does not use the 
1444
+     * PHP reflection API.
1445
+     * 
1446
+     * @param string $filePath
1447
+     * @return FileHelper_PHPClassInfo
1448
+     */
1449 1449
     public static function findPHPClasses(string $filePath) : FileHelper_PHPClassInfo
1450 1450
     {
1451 1451
         return new FileHelper_PHPClassInfo($filePath);
1452 1452
     }
1453 1453
     
1454
-   /**
1455
-    * Detects the end of line style used in the target file, if any.
1456
-    * Can be used with large files, because it only reads part of it.
1457
-    * 
1458
-    * @param string $filePath The path to the file.
1459
-    * @return NULL|ConvertHelper_EOL The end of line character information, or NULL if none is found.
1460
-    */
1454
+    /**
1455
+     * Detects the end of line style used in the target file, if any.
1456
+     * Can be used with large files, because it only reads part of it.
1457
+     * 
1458
+     * @param string $filePath The path to the file.
1459
+     * @return NULL|ConvertHelper_EOL The end of line character information, or NULL if none is found.
1460
+     */
1461 1461
     public static function detectEOLCharacter(string $filePath) : ?ConvertHelper_EOL
1462 1462
     {
1463 1463
         // 20 lines is enough to get a good picture of the newline style in the file.
@@ -1470,18 +1470,18 @@  discard block
 block discarded – undo
1470 1470
         return ConvertHelper::detectEOLCharacter($string);
1471 1471
     }
1472 1472
     
1473
-   /**
1474
-    * Reads the specified amount of lines from the target file.
1475
-    * Unicode BOM compatible: any byte order marker is stripped
1476
-    * from the resulting lines.
1477
-    * 
1478
-    * @param string $filePath
1479
-    * @param int $amount Set to 0 to read all lines.
1480
-    * @return array
1481
-    * 
1482
-    * @see FileHelper::ERROR_CANNOT_OPEN_FILE_TO_READ_LINES
1483
-    * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
1484
-    */
1473
+    /**
1474
+     * Reads the specified amount of lines from the target file.
1475
+     * Unicode BOM compatible: any byte order marker is stripped
1476
+     * from the resulting lines.
1477
+     * 
1478
+     * @param string $filePath
1479
+     * @param int $amount Set to 0 to read all lines.
1480
+     * @return array
1481
+     * 
1482
+     * @see FileHelper::ERROR_CANNOT_OPEN_FILE_TO_READ_LINES
1483
+     * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
1484
+     */
1485 1485
     public static function readLines(string $filePath, int $amount=0) : array
1486 1486
     {
1487 1487
         self::requireFileExists($filePath);
@@ -1534,16 +1534,16 @@  discard block
 block discarded – undo
1534 1534
         return $result;
1535 1535
     }
1536 1536
     
1537
-   /**
1538
-    * Reads all content from a file.
1539
-    * 
1540
-    * @param string $filePath
1541
-    * @throws FileHelper_Exception
1542
-    * @return string
1543
-    * 
1544
-    * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
1545
-    * @see FileHelper::ERROR_CANNOT_READ_FILE_CONTENTS
1546
-    */
1537
+    /**
1538
+     * Reads all content from a file.
1539
+     * 
1540
+     * @param string $filePath
1541
+     * @throws FileHelper_Exception
1542
+     * @return string
1543
+     * 
1544
+     * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
1545
+     * @see FileHelper::ERROR_CANNOT_READ_FILE_CONTENTS
1546
+     */
1547 1547
     public static function readContents(string $filePath) : string
1548 1548
     {
1549 1549
         self::requireFileExists($filePath);
@@ -1564,18 +1564,18 @@  discard block
 block discarded – undo
1564 1564
         );
1565 1565
     }
1566 1566
 
1567
-   /**
1568
-    * Ensures that the target path exists on disk, and is a folder.
1569
-    * 
1570
-    * @param string $path
1571
-    * @return string The real path, with normalized slashes.
1572
-    * @throws FileHelper_Exception
1573
-    * 
1574
-    * @see FileHelper::normalizePath()
1575
-    * 
1576
-    * @see FileHelper::ERROR_FOLDER_DOES_NOT_EXIST
1577
-    * @see FileHelper::ERROR_PATH_IS_NOT_A_FOLDER
1578
-    */
1567
+    /**
1568
+     * Ensures that the target path exists on disk, and is a folder.
1569
+     * 
1570
+     * @param string $path
1571
+     * @return string The real path, with normalized slashes.
1572
+     * @throws FileHelper_Exception
1573
+     * 
1574
+     * @see FileHelper::normalizePath()
1575
+     * 
1576
+     * @see FileHelper::ERROR_FOLDER_DOES_NOT_EXIST
1577
+     * @see FileHelper::ERROR_PATH_IS_NOT_A_FOLDER
1578
+     */
1579 1579
     public static function requireFolderExists(string $path) : string
1580 1580
     {
1581 1581
         $actual = realpath($path);
Please login to merge, or discard this patch.
Spacing   +100 added lines, -100 removed lines patch added patch discarded remove patch
@@ -110,7 +110,7 @@  discard block
 block discarded – undo
110 110
         
111 111
         $contents = file_get_contents($file);
112 112
         
113
-        if($contents === false) 
113
+        if ($contents === false) 
114 114
         {
115 115
             throw new FileHelper_Exception(
116 116
                 'Cannot load serialized content from file.',
@@ -124,7 +124,7 @@  discard block
 block discarded – undo
124 124
         
125 125
         $result = @unserialize($contents);
126 126
         
127
-        if($result !== false) {
127
+        if ($result !== false) {
128 128
             return $result;
129 129
         }
130 130
         
@@ -140,7 +140,7 @@  discard block
 block discarded – undo
140 140
     
141 141
     public static function deleteTree($rootFolder)
142 142
     {
143
-        if(!file_exists($rootFolder)) {
143
+        if (!file_exists($rootFolder)) {
144 144
             return true;
145 145
         }
146 146
         
@@ -181,7 +181,7 @@  discard block
 block discarded – undo
181 181
     */
182 182
     public static function createFolder($path)
183 183
     {
184
-        if(is_dir($path) || mkdir($path, 0777, true)) {
184
+        if (is_dir($path) || mkdir($path, 0777, true)) {
185 185
             return;
186 186
         }
187 187
         
@@ -216,11 +216,11 @@  discard block
 block discarded – undo
216 216
 
217 217
             if ($item->isDir()) 
218 218
             {
219
-                FileHelper::copyTree(str_replace('\\', '/', $itemPath), $target . '/' . $baseName);
219
+                FileHelper::copyTree(str_replace('\\', '/', $itemPath), $target.'/'.$baseName);
220 220
             } 
221
-            else if($item->isFile()) 
221
+            else if ($item->isFile()) 
222 222
             {
223
-                self::copyFile($itemPath, $target . '/' . $baseName);
223
+                self::copyFile($itemPath, $target.'/'.$baseName);
224 224
             }
225 225
         }
226 226
     }
@@ -245,7 +245,7 @@  discard block
 block discarded – undo
245 245
     {
246 246
         self::requireFileExists($sourcePath, self::ERROR_SOURCE_FILE_NOT_FOUND);
247 247
         
248
-        if(!is_readable($sourcePath))
248
+        if (!is_readable($sourcePath))
249 249
         {
250 250
             throw new FileHelper_Exception(
251 251
                 sprintf('Source file [%s] to copy is not readable.', basename($sourcePath)),
@@ -259,11 +259,11 @@  discard block
 block discarded – undo
259 259
         
260 260
         $targetFolder = dirname($targetPath);
261 261
         
262
-        if(!file_exists($targetFolder))
262
+        if (!file_exists($targetFolder))
263 263
         {
264 264
             self::createFolder($targetFolder);
265 265
         }
266
-        else if(!is_writable($targetFolder)) 
266
+        else if (!is_writable($targetFolder)) 
267 267
         {
268 268
             throw new FileHelper_Exception(
269 269
                 sprintf('Target folder [%s] is not writable.', basename($targetFolder)),
@@ -275,7 +275,7 @@  discard block
 block discarded – undo
275 275
             );
276 276
         }
277 277
         
278
-        if(copy($sourcePath, $targetPath)) {
278
+        if (copy($sourcePath, $targetPath)) {
279 279
             return;
280 280
         }
281 281
         
@@ -302,11 +302,11 @@  discard block
 block discarded – undo
302 302
     */
303 303
     public static function deleteFile(string $filePath) : void
304 304
     {
305
-        if(!file_exists($filePath)) {
305
+        if (!file_exists($filePath)) {
306 306
             return;
307 307
         }
308 308
         
309
-        if(unlink($filePath)) {
309
+        if (unlink($filePath)) {
310 310
             return;
311 311
         }
312 312
         
@@ -330,10 +330,10 @@  discard block
 block discarded – undo
330 330
     * @return \parseCSV
331 331
     * @todo Move this to the CSV helper.
332 332
     */
333
-    public static function createCSVParser(string $delimiter = ';', string $enclosure = '"', string $escape = '\\', bool $heading=false) : \parseCSV
333
+    public static function createCSVParser(string $delimiter = ';', string $enclosure = '"', string $escape = '\\', bool $heading = false) : \parseCSV
334 334
     {
335
-        if($delimiter==='') { $delimiter = ';'; }
336
-        if($enclosure==='') { $enclosure = '"'; }
335
+        if ($delimiter === '') { $delimiter = ';'; }
336
+        if ($enclosure === '') { $enclosure = '"'; }
337 337
         
338 338
         $parser = new \parseCSV(null, null, null, array());
339 339
 
@@ -361,11 +361,11 @@  discard block
 block discarded – undo
361 361
     * @see parseCSVFile()
362 362
     * @see FileHelper::ERROR_PARSING_CSV
363 363
     */
364
-    public static function parseCSVString(string $csv, string $delimiter = ';', string $enclosure = '"', string $escape = '\\', bool $heading=false) : array
364
+    public static function parseCSVString(string $csv, string $delimiter = ';', string $enclosure = '"', string $escape = '\\', bool $heading = false) : array
365 365
     {
366 366
         $parser = self::createCSVParser($delimiter, $enclosure, $escape, $heading);
367 367
         $result = $parser->parse_string(/** @scrutinizer ignore-type */ $csv);
368
-        if(is_array($result)) {
368
+        if (is_array($result)) {
369 369
             return $result;
370 370
         }
371 371
         
@@ -394,7 +394,7 @@  discard block
 block discarded – undo
394 394
      * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
395 395
      * @see FileHelper::ERROR_CANNOT_READ_FILE_CONTENTS
396 396
      */
397
-    public static function parseCSVFile(string $filePath, string $delimiter = ';', string $enclosure = '"', string $escape = '\\', bool $heading=false) : array
397
+    public static function parseCSVFile(string $filePath, string $delimiter = ';', string $enclosure = '"', string $escape = '\\', bool $heading = false) : array
398 398
     {
399 399
         $content = self::readContents($filePath);
400 400
 
@@ -411,7 +411,7 @@  discard block
 block discarded – undo
411 411
     public static function detectMimeType(string $fileName) : ?string
412 412
     {
413 413
         $ext = self::getExtension($fileName);
414
-        if(empty($ext)) {
414
+        if (empty($ext)) {
415 415
             return null;
416 416
         }
417 417
 
@@ -432,11 +432,11 @@  discard block
 block discarded – undo
432 432
      * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
433 433
      * @see FileHelper::ERROR_UNKNOWN_FILE_MIME_TYPE
434 434
      */
435
-    public static function sendFile(string $filePath, $fileName = null, bool $asAttachment=true)
435
+    public static function sendFile(string $filePath, $fileName = null, bool $asAttachment = true)
436 436
     {
437 437
         self::requireFileExists($filePath);
438 438
         
439
-        if(empty($fileName)) {
439
+        if (empty($fileName)) {
440 440
             $fileName = basename($filePath);
441 441
         }
442 442
 
@@ -454,10 +454,10 @@  discard block
 block discarded – undo
454 454
         
455 455
         header("Cache-Control: public", true);
456 456
         header("Content-Description: File Transfer", true);
457
-        header("Content-Type: " . $mime, true);
457
+        header("Content-Type: ".$mime, true);
458 458
 
459 459
         $disposition = 'inline';
460
-        if($asAttachment) {
460
+        if ($asAttachment) {
461 461
             $disposition = 'attachment';
462 462
         }
463 463
         
@@ -485,7 +485,7 @@  discard block
 block discarded – undo
485 485
         requireCURL();
486 486
         
487 487
         $ch = curl_init();
488
-        if(!is_resource($ch)) 
488
+        if (!is_resource($ch)) 
489 489
         {
490 490
             throw new FileHelper_Exception(
491 491
                 'Could not initialize a new cURL instance.',
@@ -506,7 +506,7 @@  discard block
 block discarded – undo
506 506
         
507 507
         $output = curl_exec($ch);
508 508
 
509
-        if($output === false) {
509
+        if ($output === false) {
510 510
             throw new FileHelper_Exception(
511 511
                 'Unable to open URL',
512 512
                 sprintf(
@@ -520,7 +520,7 @@  discard block
 block discarded – undo
520 520
 
521 521
         curl_close($ch);
522 522
 
523
-        if(is_string($output)) 
523
+        if (is_string($output)) 
524 524
         {
525 525
             return $output;
526 526
         }
@@ -542,7 +542,7 @@  discard block
 block discarded – undo
542 542
     */
543 543
     public static function isPHPFile($pathOrDirIterator)
544 544
     {
545
-    	if(self::getExtension($pathOrDirIterator) == 'php') {
545
+    	if (self::getExtension($pathOrDirIterator) == 'php') {
546 546
     		return true;
547 547
     	}
548 548
     	
@@ -559,14 +559,14 @@  discard block
 block discarded – undo
559 559
     */
560 560
     public static function getExtension($pathOrDirIterator, bool $lowercase = true) : string
561 561
     {
562
-        if($pathOrDirIterator instanceof \DirectoryIterator) {
562
+        if ($pathOrDirIterator instanceof \DirectoryIterator) {
563 563
             $filename = $pathOrDirIterator->getFilename();
564 564
         } else {
565 565
             $filename = basename($pathOrDirIterator);
566 566
         }
567 567
          
568 568
         $ext = pathinfo($filename, PATHINFO_EXTENSION);
569
-        if($lowercase) {
569
+        if ($lowercase) {
570 570
         	$ext = mb_strtolower($ext);
571 571
         }
572 572
         
@@ -588,13 +588,13 @@  discard block
 block discarded – undo
588 588
     public static function getFilename($pathOrDirIterator, $extension = true)
589 589
     {
590 590
         $path = $pathOrDirIterator;
591
-    	if($pathOrDirIterator instanceof \DirectoryIterator) {
591
+    	if ($pathOrDirIterator instanceof \DirectoryIterator) {
592 592
     		$path = $pathOrDirIterator->getFilename();
593 593
     	}
594 594
     	
595 595
     	$path = self::normalizePath($path);
596 596
     	
597
-    	if(!$extension) {
597
+    	if (!$extension) {
598 598
     	    return pathinfo($path, PATHINFO_FILENAME);
599 599
     	}
600 600
     	
@@ -612,12 +612,12 @@  discard block
 block discarded – undo
612 612
     * @see FileHelper::ERROR_CANNOT_FIND_JSON_FILE
613 613
     * @see FileHelper::ERROR_CANNOT_DECODE_JSON_FILE
614 614
     */ 
615
-    public static function parseJSONFile(string $file, $targetEncoding=null, $sourceEncoding=null)
615
+    public static function parseJSONFile(string $file, $targetEncoding = null, $sourceEncoding = null)
616 616
     {
617 617
         self::requireFileExists($file, self::ERROR_CANNOT_FIND_JSON_FILE);
618 618
         
619 619
         $content = file_get_contents($file);
620
-        if(!$content) {
620
+        if (!$content) {
621 621
             throw new FileHelper_Exception(
622 622
                 'Cannot get file contents',
623 623
                 sprintf(
@@ -628,12 +628,12 @@  discard block
 block discarded – undo
628 628
             );
629 629
         }
630 630
         
631
-        if(isset($targetEncoding)) {
631
+        if (isset($targetEncoding)) {
632 632
             $content = mb_convert_encoding($content, $targetEncoding, $sourceEncoding);
633 633
         }
634 634
         
635 635
         $json = json_decode($content, true);
636
-        if($json === false || $json === NULL) {
636
+        if ($json === false || $json === NULL) {
637 637
             throw new FileHelper_Exception(
638 638
                 'Cannot decode json data',
639 639
                 sprintf(
@@ -673,13 +673,13 @@  discard block
 block discarded – undo
673 673
         
674 674
         $name = str_replace(array_keys($replaces), array_values($replaces), $name);
675 675
         
676
-        while(strstr($name, '  ')) {
676
+        while (strstr($name, '  ')) {
677 677
             $name = str_replace('  ', ' ', $name);
678 678
         }
679 679
 
680 680
         $name = str_replace(array_keys($replaces), array_values($replaces), $name);
681 681
         
682
-        while(strstr($name, '..')) {
682
+        while (strstr($name, '..')) {
683 683
             $name = str_replace('..', '.', $name);
684 684
         }
685 685
         
@@ -711,7 +711,7 @@  discard block
 block discarded – undo
711 711
     * @return array An indexed array with files.
712 712
     * @see FileHelper::createFileFinder()
713 713
     */
714
-    public static function findHTMLFiles(string $targetFolder, array $options=array()) : array
714
+    public static function findHTMLFiles(string $targetFolder, array $options = array()) : array
715 715
     {
716 716
         return self::findFiles($targetFolder, array('html'), $options);
717 717
     }
@@ -728,7 +728,7 @@  discard block
 block discarded – undo
728 728
     * @return array An indexed array of PHP files.
729 729
     * @see FileHelper::createFileFinder()
730 730
     */
731
-    public static function findPHPFiles(string $targetFolder, array $options=array()) : array
731
+    public static function findPHPFiles(string $targetFolder, array $options = array()) : array
732 732
     {
733 733
         return self::findFiles($targetFolder, array('php'), $options);
734 734
     }
@@ -748,22 +748,22 @@  discard block
 block discarded – undo
748 748
     * @return array
749 749
     * @see FileHelper::createFileFinder()
750 750
     */
751
-    public static function findFiles(string $targetFolder, array $extensions=array(), array $options=array(), array $files=array()) : array
751
+    public static function findFiles(string $targetFolder, array $extensions = array(), array $options = array(), array $files = array()) : array
752 752
     {
753 753
         $finder = self::createFileFinder($targetFolder);
754 754
 
755 755
         $finder->setPathmodeStrip();
756 756
         
757
-        if(isset($options['relative-path']) && $options['relative-path'] === true) 
757
+        if (isset($options['relative-path']) && $options['relative-path'] === true) 
758 758
         {
759 759
             $finder->setPathmodeRelative();
760 760
         } 
761
-        else if(isset($options['absolute-path']) && $options['absolute-path'] === true)
761
+        else if (isset($options['absolute-path']) && $options['absolute-path'] === true)
762 762
         {
763 763
             $finder->setPathmodeAbsolute();
764 764
         }
765 765
         
766
-        if(isset($options['strip-extension'])) 
766
+        if (isset($options['strip-extension'])) 
767 767
         {
768 768
             $finder->stripExtensions();
769 769
         }
@@ -807,7 +807,7 @@  discard block
 block discarded – undo
807 807
     public static function detectUTFBom(string $filename) : ?string
808 808
     {
809 809
         $fp = fopen($filename, 'r');
810
-        if($fp === false) 
810
+        if ($fp === false) 
811 811
         {
812 812
             throw new FileHelper_Exception(
813 813
                 'Cannot open file for reading',
@@ -822,10 +822,10 @@  discard block
 block discarded – undo
822 822
 
823 823
         $boms = self::getUTFBOMs();
824 824
         
825
-        foreach($boms as $bom => $value) 
825
+        foreach ($boms as $bom => $value) 
826 826
         {
827 827
             $length = mb_strlen($value);
828
-            if(mb_substr($text, 0, $length) == $value) {
828
+            if (mb_substr($text, 0, $length) == $value) {
829 829
                 return $bom;
830 830
             }
831 831
         }
@@ -844,13 +844,13 @@  discard block
 block discarded – undo
844 844
     */
845 845
     public static function getUTFBOMs()
846 846
     {
847
-        if(!isset(self::$utfBoms)) {
847
+        if (!isset(self::$utfBoms)) {
848 848
             self::$utfBoms = array(
849
-                'UTF32-BE' => chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF),
850
-                'UTF32-LE' => chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00),
851
-                'UTF16-BE' => chr(0xFE) . chr(0xFF),
852
-                'UTF16-LE' => chr(0xFF) . chr(0xFE),
853
-                'UTF8' => chr(0xEF) . chr(0xBB) . chr(0xBF)
849
+                'UTF32-BE' => chr(0x00).chr(0x00).chr(0xFE).chr(0xFF),
850
+                'UTF32-LE' => chr(0xFF).chr(0xFE).chr(0x00).chr(0x00),
851
+                'UTF16-BE' => chr(0xFE).chr(0xFF),
852
+                'UTF16-LE' => chr(0xFF).chr(0xFE),
853
+                'UTF8' => chr(0xEF).chr(0xBB).chr(0xBF)
854 854
             );
855 855
         }
856 856
         
@@ -871,7 +871,7 @@  discard block
 block discarded – undo
871 871
         $encodings = self::getKnownUnicodeEncodings();
872 872
 
873 873
         $keep = array();
874
-        foreach($encodings as $string) 
874
+        foreach ($encodings as $string) 
875 875
         {
876 876
             $withHyphen = str_replace('UTF', 'UTF-', $string);
877 877
             
@@ -918,16 +918,16 @@  discard block
 block discarded – undo
918 918
     * @see FileHelper::ERROR_SAVE_FILE_NOT_WRITABLE
919 919
     * @see FileHelper::ERROR_SAVE_FILE_WRITE_FAILED
920 920
     */
921
-    public static function saveAsJSON($data, string $file, bool $pretty=false)
921
+    public static function saveAsJSON($data, string $file, bool $pretty = false)
922 922
     {
923 923
         $options = null;
924
-        if($pretty) {
924
+        if ($pretty) {
925 925
             $options = JSON_PRETTY_PRINT;
926 926
         }
927 927
         
928 928
         $json = json_encode($data, $options);
929 929
         
930
-        if($json===false) 
930
+        if ($json === false) 
931 931
         {
932 932
             $errorCode = json_last_error();
933 933
             
@@ -953,12 +953,12 @@  discard block
 block discarded – undo
953 953
     * @see FileHelper::ERROR_SAVE_FILE_NOT_WRITABLE
954 954
     * @see FileHelper::ERROR_SAVE_FILE_WRITE_FAILED
955 955
     */
956
-    public static function saveFile(string $filePath, string $content='') : void
956
+    public static function saveFile(string $filePath, string $content = '') : void
957 957
     {
958 958
         // target file already exists
959
-        if(file_exists($filePath))
959
+        if (file_exists($filePath))
960 960
         {
961
-            if(!is_writable($filePath))
961
+            if (!is_writable($filePath))
962 962
             {
963 963
                 throw new FileHelper_Exception(
964 964
                     sprintf('Cannot save file: target file [%s] exists, but is not writable.', basename($filePath)),
@@ -978,7 +978,7 @@  discard block
 block discarded – undo
978 978
             // create the folder as needed
979 979
             self::createFolder($targetFolder);
980 980
             
981
-            if(!is_writable($targetFolder)) 
981
+            if (!is_writable($targetFolder)) 
982 982
             {
983 983
                 throw new FileHelper_Exception(
984 984
                     sprintf('Cannot save file: target folder [%s] is not writable.', basename($targetFolder)),
@@ -991,7 +991,7 @@  discard block
 block discarded – undo
991 991
             }
992 992
         }
993 993
         
994
-        if(file_put_contents($filePath, $content) !== false) {
994
+        if (file_put_contents($filePath, $content) !== false) {
995 995
             return;
996 996
         }
997 997
         
@@ -1029,7 +1029,7 @@  discard block
 block discarded – undo
1029 1029
     {
1030 1030
         static $checked = array();
1031 1031
         
1032
-        if(isset($checked[$command])) {
1032
+        if (isset($checked[$command])) {
1033 1033
             return $checked[$command];
1034 1034
         }
1035 1035
         
@@ -1042,7 +1042,7 @@  discard block
 block discarded – undo
1042 1042
         
1043 1043
         $os = strtolower(PHP_OS_FAMILY);
1044 1044
         
1045
-        if(!isset($osCommands[$os])) 
1045
+        if (!isset($osCommands[$os])) 
1046 1046
         {
1047 1047
             throw new FileHelper_Exception(
1048 1048
                 'Unsupported OS for CLI commands',
@@ -1068,7 +1068,7 @@  discard block
 block discarded – undo
1068 1068
             $pipes
1069 1069
         );
1070 1070
         
1071
-        if($process === false) {
1071
+        if ($process === false) {
1072 1072
             $checked[$command] = false;
1073 1073
             return false;
1074 1074
         }
@@ -1099,7 +1099,7 @@  discard block
 block discarded – undo
1099 1099
     */
1100 1100
     public static function checkPHPFileSyntax($path)
1101 1101
     {
1102
-        if(!self::canMakePHPCalls()) {
1102
+        if (!self::canMakePHPCalls()) {
1103 1103
             return true;
1104 1104
         }
1105 1105
         
@@ -1110,7 +1110,7 @@  discard block
 block discarded – undo
1110 1110
         // when the validation is successful, the first entry
1111 1111
         // in the array contains the success message. When it
1112 1112
         // is invalid, the first entry is always empty.
1113
-        if(!empty($output[0])) {
1113
+        if (!empty($output[0])) {
1114 1114
             return true;
1115 1115
         }
1116 1116
         
@@ -1131,7 +1131,7 @@  discard block
 block discarded – undo
1131 1131
     public static function getModifiedDate($path)
1132 1132
     {
1133 1133
         $time = filemtime($path);
1134
-        if($time !== false) {
1134
+        if ($time !== false) {
1135 1135
             $date = new \DateTime();
1136 1136
             $date->setTimestamp($time);
1137 1137
             return $date;
@@ -1160,7 +1160,7 @@  discard block
 block discarded – undo
1160 1160
     */
1161 1161
     public static function getSubfolders($targetFolder, $options = array())
1162 1162
     {
1163
-        if(!is_dir($targetFolder)) 
1163
+        if (!is_dir($targetFolder)) 
1164 1164
         {
1165 1165
             throw new FileHelper_Exception(
1166 1166
                 'Target folder does not exist',
@@ -1184,29 +1184,29 @@  discard block
 block discarded – undo
1184 1184
         
1185 1185
         $d = new \DirectoryIterator($targetFolder);
1186 1186
         
1187
-        foreach($d as $item) 
1187
+        foreach ($d as $item) 
1188 1188
         {
1189
-            if($item->isDir() && !$item->isDot()) 
1189
+            if ($item->isDir() && !$item->isDot()) 
1190 1190
             {
1191 1191
                 $name = $item->getFilename();
1192 1192
                 
1193
-                if(!$options['absolute-path']) {
1193
+                if (!$options['absolute-path']) {
1194 1194
                     $result[] = $name;
1195 1195
                 } else {
1196 1196
                     $result[] = $targetFolder.'/'.$name;
1197 1197
                 }
1198 1198
                 
1199
-                if(!$options['recursive']) 
1199
+                if (!$options['recursive']) 
1200 1200
                 {
1201 1201
                     continue;
1202 1202
                 }
1203 1203
                 
1204 1204
                 $subs = self::getSubfolders($targetFolder.'/'.$name, $options);
1205
-                foreach($subs as $sub) 
1205
+                foreach ($subs as $sub) 
1206 1206
                 {
1207 1207
                     $relative = $name.'/'.$sub;
1208 1208
                     
1209
-                    if(!$options['absolute-path']) {
1209
+                    if (!$options['absolute-path']) {
1210 1210
                         $result[] = $relative;
1211 1211
                     } else {
1212 1212
                         $result[] = $targetFolder.'/'.$relative;
@@ -1256,7 +1256,7 @@  discard block
 block discarded – undo
1256 1256
         $unit = preg_replace('/[^bkmgtpezy]/i', '', $size); // Remove the non-unit characters from the size.
1257 1257
         $size = floatval(preg_replace('/[^0-9\.]/', '', $size)); // Remove the non-numeric characters from the size.
1258 1258
         
1259
-        if($unit) 
1259
+        if ($unit) 
1260 1260
         {
1261 1261
             // Find the position of the unit in the ordered string which is the power of magnitude to multiply a kilobyte by.
1262 1262
             return round($size * pow(1024, stripos('bkmgtpezy', $unit[0])));
@@ -1275,7 +1275,7 @@  discard block
 block discarded – undo
1275 1275
     * @param int $depth The folder depth to reduce the path to
1276 1276
     * @return string
1277 1277
     */
1278
-    public static function relativizePathByDepth(string $path, int $depth=2) : string
1278
+    public static function relativizePathByDepth(string $path, int $depth = 2) : string
1279 1279
     {
1280 1280
         $path = self::normalizePath($path);
1281 1281
         
@@ -1283,17 +1283,17 @@  discard block
 block discarded – undo
1283 1283
         $tokens = array_filter($tokens); // remove empty entries (trailing slash for example)
1284 1284
         $tokens = array_values($tokens); // re-index keys
1285 1285
         
1286
-        if(empty($tokens)) {
1286
+        if (empty($tokens)) {
1287 1287
             return '';
1288 1288
         }
1289 1289
         
1290 1290
         // remove the drive if present
1291
-        if(strstr($tokens[0], ':')) {
1291
+        if (strstr($tokens[0], ':')) {
1292 1292
             array_shift($tokens);
1293 1293
         }
1294 1294
         
1295 1295
         // path was only the drive
1296
-        if(count($tokens) == 0) {
1296
+        if (count($tokens) == 0) {
1297 1297
             return '';
1298 1298
         }
1299 1299
 
@@ -1302,8 +1302,8 @@  discard block
 block discarded – undo
1302 1302
         
1303 1303
         // reduce the path to the specified depth
1304 1304
         $length = count($tokens);
1305
-        if($length > $depth) {
1306
-            $tokens = array_slice($tokens, $length-$depth);
1305
+        if ($length > $depth) {
1306
+            $tokens = array_slice($tokens, $length - $depth);
1307 1307
         }
1308 1308
 
1309 1309
         // append the last element again
@@ -1351,14 +1351,14 @@  discard block
 block discarded – undo
1351 1351
     * 
1352 1352
     * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
1353 1353
     */
1354
-    public static function requireFileExists(string $path, $errorCode=null) : string
1354
+    public static function requireFileExists(string $path, $errorCode = null) : string
1355 1355
     {
1356 1356
         $result = realpath($path);
1357
-        if($result !== false) {
1357
+        if ($result !== false) {
1358 1358
             return $result;
1359 1359
         }
1360 1360
         
1361
-        if($errorCode === null) {
1361
+        if ($errorCode === null) {
1362 1362
             $errorCode = self::ERROR_FILE_DOES_NOT_EXIST;
1363 1363
         }
1364 1364
         
@@ -1387,15 +1387,15 @@  discard block
 block discarded – undo
1387 1387
         
1388 1388
         $file = new \SplFileObject($path);
1389 1389
         
1390
-        if($file->eof()) {
1390
+        if ($file->eof()) {
1391 1391
             return '';
1392 1392
         }
1393 1393
         
1394
-        $targetLine = $lineNumber-1;
1394
+        $targetLine = $lineNumber - 1;
1395 1395
         
1396 1396
         $file->seek($targetLine);
1397 1397
         
1398
-        if($file->key() !== $targetLine) {
1398
+        if ($file->key() !== $targetLine) {
1399 1399
              return null;
1400 1400
         }
1401 1401
         
@@ -1421,7 +1421,7 @@  discard block
 block discarded – undo
1421 1421
         $number = $spl->key();
1422 1422
         
1423 1423
         // if seeking to the end the cursor is still at 0, there are no lines. 
1424
-        if($number === 0) 
1424
+        if ($number === 0) 
1425 1425
         {
1426 1426
             // since it's a very small file, to get reliable results,
1427 1427
             // we read its contents and use that to determine what
@@ -1429,13 +1429,13 @@  discard block
 block discarded – undo
1429 1429
             // that this is not pactical to solve with the SplFileObject.
1430 1430
             $content = file_get_contents($path);
1431 1431
             
1432
-            if(empty($content)) {
1432
+            if (empty($content)) {
1433 1433
                 return 0;
1434 1434
             }
1435 1435
         }
1436 1436
         
1437 1437
         // return the line number we were able to reach + 1 (key is zero-based)
1438
-        return $number+1;
1438
+        return $number + 1;
1439 1439
     }
1440 1440
     
1441 1441
    /**
@@ -1482,13 +1482,13 @@  discard block
 block discarded – undo
1482 1482
     * @see FileHelper::ERROR_CANNOT_OPEN_FILE_TO_READ_LINES
1483 1483
     * @see FileHelper::ERROR_FILE_DOES_NOT_EXIST
1484 1484
     */
1485
-    public static function readLines(string $filePath, int $amount=0) : array
1485
+    public static function readLines(string $filePath, int $amount = 0) : array
1486 1486
     {
1487 1487
         self::requireFileExists($filePath);
1488 1488
         
1489 1489
         $fn = fopen($filePath, "r");
1490 1490
         
1491
-        if($fn === false) 
1491
+        if ($fn === false) 
1492 1492
         {
1493 1493
             throw new FileHelper_Exception(
1494 1494
                 'Could not open file for reading.',
@@ -1504,19 +1504,19 @@  discard block
 block discarded – undo
1504 1504
         $counter = 0;
1505 1505
         $first = true;
1506 1506
         
1507
-        while(!feof($fn)) 
1507
+        while (!feof($fn)) 
1508 1508
         {
1509 1509
             $counter++;
1510 1510
             
1511 1511
             $line = fgets($fn);
1512 1512
             
1513 1513
             // can happen with zero length files
1514
-            if($line === false) {
1514
+            if ($line === false) {
1515 1515
                 continue;
1516 1516
             }
1517 1517
             
1518 1518
             // the first line may contain a unicode BOM marker.
1519
-            if($first) 
1519
+            if ($first) 
1520 1520
             {
1521 1521
                 $line = ConvertHelper::stripUTFBom($line);
1522 1522
                 $first = false;
@@ -1524,7 +1524,7 @@  discard block
 block discarded – undo
1524 1524
             
1525 1525
             $result[] = $line;
1526 1526
             
1527
-            if($amount > 0 && $counter == $amount) {
1527
+            if ($amount > 0 && $counter == $amount) {
1528 1528
                 break;
1529 1529
             }
1530 1530
         }
@@ -1550,7 +1550,7 @@  discard block
 block discarded – undo
1550 1550
         
1551 1551
         $result = file_get_contents($filePath);
1552 1552
         
1553
-        if($result !== false) {
1553
+        if ($result !== false) {
1554 1554
             return $result;
1555 1555
         }
1556 1556
         
@@ -1580,7 +1580,7 @@  discard block
 block discarded – undo
1580 1580
     {
1581 1581
         $actual = realpath($path);
1582 1582
         
1583
-        if($actual === false) 
1583
+        if ($actual === false) 
1584 1584
         {
1585 1585
             throw new FileHelper_Exception(
1586 1586
                 'Folder does not exist',
@@ -1592,7 +1592,7 @@  discard block
 block discarded – undo
1592 1592
             );
1593 1593
         }
1594 1594
         
1595
-        if(is_dir($path)) 
1595
+        if (is_dir($path)) 
1596 1596
         {
1597 1597
             return self::normalizePath($actual);
1598 1598
         }
Please login to merge, or discard this patch.