From 3f6eaed0ab3a1ea0a06600561404d5da1df76c04 Mon Sep 17 00:00:00 2001
From: Cristiano Magro <cristiano.magro@vola.it>
Date: Mon, 26 Aug 2019 23:41:55 +0200
Subject: [PATCH] Classe per filtrare il nome file
---
tests/Vola/UploadFile/FilenameTest.php | 21 ++++++++++
phpunit.xml | 2
src/Vola/UploadFile/Filename.php | 70 +++++++++++++++++++++++++++++++++++
src/Vola/UploadFile/Autoloader.php | 1
README.md | 7 +++
5 files changed, 100 insertions(+), 1 deletions(-)
diff --git a/README.md b/README.md
index c36a81c..65d439c 100644
--- a/README.md
+++ b/README.md
@@ -5,4 +5,11 @@
#Esecuzione phpunit test
~~~php
$ phpunit.phar -c phpunit.xml
+~~~
+#Configusazione
+Occorre installare le dipendenze con composer.
+
+~~~
+$ composer update
+~~~
\ No newline at end of file
diff --git a/phpunit.xml b/phpunit.xml
index bc47a8c..0f16264 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -1,4 +1,4 @@
-<phpunit bootstrap="src/Vola/UploadFile/autoloader.php"
+<phpunit bootstrap="src/Vola/UploadFile/Autoloader.php"
stopOnFailure="true">
<testsuites>
<testsuite name="FileUpload">
diff --git a/src/Vola/UploadFile/Autoloader.php b/src/Vola/UploadFile/Autoloader.php
index 647864b..d9ef722 100644
--- a/src/Vola/UploadFile/Autoloader.php
+++ b/src/Vola/UploadFile/Autoloader.php
@@ -31,6 +31,7 @@
'Upload_Exc_FileNotExist' => 'Exc/FileNotExist.php',
'Upload_MgrFile' => 'MgrFile.php',
'Upload_FileUp' => 'FileUp.php',
+ 'Upload_Filename' => 'Filename.php',
);
/**
diff --git a/src/Vola/UploadFile/Filename.php b/src/Vola/UploadFile/Filename.php
new file mode 100644
index 0000000..78eff8c
--- /dev/null
+++ b/src/Vola/UploadFile/Filename.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: cristiano
+ * Date: 26/08/19
+ * Time: 23.20
+ */
+
+class Upload_Filename
+{
+
+ protected function __construct()
+ {
+ }
+
+ /**
+ * Ritorno un'istanza dell'oggetto
+ * @return Upload_Filename
+ */
+ public function create()
+ {
+ $instance = new self();
+ return $instance;
+ }
+
+ public function filter($filename, $beautify = true)
+ {
+ // sanitize filename
+ $filename = preg_replace(
+ '~
+ [<>:"/\\|?*]| # file system reserved https://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words
+ [\x00-\x1F]| # control characters http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx
+ [\x7F\xA0\xAD]| # non-printing characters DEL, NO-BREAK SPACE, SOFT HYPHEN
+ [#\[\]@!$&\'()+,;=]| # URI reserved https://tools.ietf.org/html/rfc3986#section-2.2
+ [{}^\~`] # URL unsafe characters https://www.ietf.org/rfc/rfc1738.txt
+ ~x',
+ '-', $filename);
+ // avoids ".", ".." or ".hiddenFiles"
+ $filename = ltrim($filename, '.-');
+ // optional beautification
+ if ($beautify) $filename = $this->beautify_filename($filename);
+ // maximize filename length to 255 bytes http://serverfault.com/a/9548/44086
+ $ext = pathinfo($filename, PATHINFO_EXTENSION);
+ $filename = mb_strcut(pathinfo($filename, PATHINFO_FILENAME), 0, 255 - ($ext ? strlen($ext) + 1 : 0), mb_detect_encoding($filename)) . ($ext ? '.' . $ext : '');
+ return $filename;
+ }
+
+ public function beautify_filename($filename) {
+ // reduce consecutive characters
+ $filename = preg_replace(array(
+ // "file name.zip" becomes "file-name.zip"
+ '/ +/',
+ // "file___name.zip" becomes "file-name.zip"
+ '/_+/',
+ // "file---name.zip" becomes "file-name.zip"
+ '/-+/'
+ ), '-', $filename);
+ $filename = preg_replace(array(
+ // "file--.--.-.--name.zip" becomes "file.name.zip"
+ '/-*\.-*/',
+ // "file...name..zip" becomes "file.name.zip"
+ '/\.{2,}/'
+ ), '.', $filename);
+ // lowercase for windows/unix interoperability http://support.microsoft.com/kb/100625
+ $filename = mb_strtolower($filename, mb_detect_encoding($filename));
+ // ".file-name.-" becomes "file-name"
+ $filename = trim($filename, '.-');
+ return $filename;
+ }
+}
\ No newline at end of file
diff --git a/tests/Vola/UploadFile/FilenameTest.php b/tests/Vola/UploadFile/FilenameTest.php
new file mode 100644
index 0000000..4020cc6
--- /dev/null
+++ b/tests/Vola/UploadFile/FilenameTest.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: cristiano
+ * Date: 26/08/19
+ * Time: 23.25
+ */
+
+class FilenameTest extends PHPUnit_Framework_TestCase
+{
+
+ public function testFilename()
+ {
+ $nome = '../ciCcio-- a.zip';
+ $atteso = 'ciccio-a.zip';
+
+ $esito = Upload_Filename::create()->filter($nome);
+
+ $this->assertEquals($atteso, $esito);
+ }
+}
\ No newline at end of file
--
Gitblit v1.8.0