summaryrefslogtreecommitdiffstats
path: root/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php')
-rw-r--r--vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php142
1 files changed, 142 insertions, 0 deletions
diff --git a/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php
new file mode 100644
index 0000000..948d119
--- /dev/null
+++ b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php
@@ -0,0 +1,142 @@
+<?php
+
+namespace PhpOffice\PhpSpreadsheet\Shared;
+
+use InvalidArgumentException;
+use ZipArchive;
+
+class File
+{
+ /**
+ * Use Temp or File Upload Temp for temporary files.
+ *
+ * @var bool
+ */
+ protected static $useUploadTempDirectory = false;
+
+ /**
+ * Set the flag indicating whether the File Upload Temp directory should be used for temporary files.
+ *
+ * @param bool $useUploadTempDir Use File Upload Temporary directory (true or false)
+ */
+ public static function setUseUploadTempDirectory($useUploadTempDir): void
+ {
+ self::$useUploadTempDirectory = (bool) $useUploadTempDir;
+ }
+
+ /**
+ * Get the flag indicating whether the File Upload Temp directory should be used for temporary files.
+ *
+ * @return bool Use File Upload Temporary directory (true or false)
+ */
+ public static function getUseUploadTempDirectory()
+ {
+ return self::$useUploadTempDirectory;
+ }
+
+ /**
+ * Verify if a file exists.
+ *
+ * @param string $pFilename Filename
+ *
+ * @return bool
+ */
+ public static function fileExists($pFilename)
+ {
+ // Sick construction, but it seems that
+ // file_exists returns strange values when
+ // doing the original file_exists on ZIP archives...
+ 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) !== false);
+ $zip->close();
+
+ return $returnValue;
+ }
+
+ return false;
+ }
+
+ return file_exists($pFilename);
+ }
+
+ /**
+ * Returns canonicalized absolute pathname, also for ZIP archives.
+ *
+ * @param string $pFilename
+ *
+ * @return string
+ */
+ public static function realpath($pFilename)
+ {
+ // Returnvalue
+ $returnValue = '';
+
+ // Try using realpath()
+ if (file_exists($pFilename)) {
+ $returnValue = realpath($pFilename);
+ }
+
+ // Found something?
+ if ($returnValue == '' || ($returnValue === null)) {
+ $pathArray = explode('/', $pFilename);
+ while (in_array('..', $pathArray) && $pathArray[0] != '..') {
+ $iMax = count($pathArray);
+ for ($i = 0; $i < $iMax; ++$i) {
+ if ($pathArray[$i] == '..' && $i > 0) {
+ unset($pathArray[$i], $pathArray[$i - 1]);
+
+ break;
+ }
+ }
+ }
+ $returnValue = implode('/', $pathArray);
+ }
+
+ // Return
+ return $returnValue;
+ }
+
+ /**
+ * Get the systems temporary directory.
+ *
+ * @return string
+ */
+ public static function sysGetTempDir()
+ {
+ if (self::$useUploadTempDirectory) {
+ // use upload-directory when defined to allow running on environments having very restricted
+ // open_basedir configs
+ if (ini_get('upload_tmp_dir') !== false) {
+ if ($temp = ini_get('upload_tmp_dir')) {
+ if (file_exists($temp)) {
+ return realpath($temp);
+ }
+ }
+ }
+ }
+
+ return realpath(sys_get_temp_dir());
+ }
+
+ /**
+ * Assert that given path is an existing file and is readable, otherwise throw exception.
+ *
+ * @param string $filename
+ */
+ public static function assertFile($filename): void
+ {
+ if (!is_file($filename)) {
+ throw new InvalidArgumentException('File "' . $filename . '" does not exist.');
+ }
+
+ if (!is_readable($filename)) {
+ throw new InvalidArgumentException('Could not open "' . $filename . '" for reading.');
+ }
+ }
+}