open($zipFile) === true) { $returnValue = ($zip->getFromName($archiveFile) !== false); $zip->close(); return $returnValue; } return false; } // Regular file_exists return \file_exists($pFilename); } /** * Returns the content of a file * * @param string $pFilename Filename * * @return string|null */ public static function fileGetContents(string $pFilename): ?string { if (!self::fileExists($pFilename)) { return null; } if (\strtolower(\substr($pFilename, 0, 3)) == 'zip') { // Open ZIP file and verify if the file exists $zipFile = \substr($pFilename, 6, \strpos($pFilename, '#') - 6); $archiveFile = \substr($pFilename, \strpos($pFilename, '#') + 1); $zip = new \ZipArchive(); if ($zip->open($zipFile) === true) { $returnValue = $zip->getFromName($archiveFile); $zip->close(); return $returnValue; } return null; } // Regular file contents return \file_get_contents($pFilename); } /** * Returns canonicalized absolute pathname, also for ZIP archives * * @param string $pFilename * * @return string */ public static function realpath(string $pFilename): string { // Try using realpath() $returnValue = \realpath($pFilename); // Found something? if (empty($returnValue)) { $pathArray = \explode('/', $pFilename); while (\in_array('..', $pathArray) && $pathArray[0] != '..') { $numPathArray = \count($pathArray); for ($i = 0; $i < $numPathArray; ++$i) { if ($pathArray[$i] == '..' && $i > 0) { unset($pathArray[$i]); unset($pathArray[$i - 1]); break; } } } $returnValue = \implode('/', $pathArray); } // Return return $returnValue; } }