@ 2017-07-12T09:47:57Z <?php
final class Filename
{
/**
* @var string
*/
private $basename;
/**
* @var string
*/
private $extension;
/**
* Filename constructor.
*
* @param string $filename
* @param array $replace
*/
public function __construct(string $filename, array $replace = [])
{
$info = pathinfo($filename);
$info = array_map('strtolower', $info);
if (array_key_exists('extension', $info)) {
$this->setExtension($info['extension']);
}
if (empty($replace)) {
$replace = [
' ' => '_',
'Ä' => 'Ae',
'Ö' => 'Oe',
'Ü' => 'Ue',
'ä' => 'ae',
'ö' => 'oe',
'ü' => 'ue',
'ß' => 'ss'
];
}
print_r($info);
$this->basename = self::clean($info['filename'], $replace);
}
/**
* @param int $length
*
* @throws \Exception
*/
public function limitLength(int $length)
{
assure($length > 0, 'Invalide Länge: %d', $length);
if (strlen($this->basename) > $length) {
$this->basename = substr($this->basename, 0, $length);
}
}
/**
* @param string $str
* @param array $replace
*
* @return string
*/
public static function clean(string $str, array $replace = []): string
{
$str = trim($str);
$str = trim($str, '_-');
if (!empty($replace)) {
$str = str_replace(array_keys($replace), array_values($replace), $str);
}
$str = preg_replace('#[^\w\-]+#i', '_', $str);
//Mehrere aufeinanderfolgende Unterstriche zu einem Unterstrich
$str = preg_replace('#_+#', '_', $str);
//Bindestrich vor Unterstrich zum Bindestrich
$str = preg_replace('#\-_#', '-', $str);
//Bindestrich nach Unterstrich zum Bindestrich
$str = preg_replace('#_\-#', '-', $str);
//Unterstrich am Ende zu nix
$str = preg_replace('#_$#', '', $str);
return $str;
}
/**
* @return null|string
*/
public function getExtension()
{
return $this->extension;
}
/**
* @return bool
*/
public function hasExtension(): bool
{
return $this->extension !== null;
}
/**
* @param string $extension
*/
public function setExtension(string $extension)
{
if (MimeTypes::isExtensionSupported($extension)) {
$this->extension = $extension;
}
}
/**
* @return string
*/
public function getBasename(): string
{
return $this->basename;
}
/**
* @return bool
*/
public function isValid(): bool
{
return strlen($this->getBasename()) !== 0 && $this->hasExtension();
}
/**
* @return string
*/
public function assemble(): string
{
if ($this->hasExtension()) {
return sprintf('%s.%s', $this->getBasename(), $this->getExtension());
}
return $this->getBasename();
}
}
$file = 'Versicherungsschein/Nachträge';
var_dump(new Filename($file));
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.0.0 - 7.0.33 , 7.1.0 - 7.1.33 , 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.4 , 8.3.6 Array
(
[dirname] => versicherungsschein
[basename] => nachträge
[filename] => nachträge
)
object(Filename)#1 (2) {
["basename":"Filename":private]=>
string(10) "nachtraege"
["extension":"Filename":private]=>
NULL
}
Output for 8.3.5 Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Array
(
[dirname] => versicherungsschein
[basename] => nachträge
[filename] => nachträge
)
object(Filename)#1 (2) {
["basename":"Filename":private]=>
string(10) "nachtraege"
["extension":"Filename":private]=>
NULL
}
Output for 5.6.0 - 5.6.40 Parse error: syntax error, unexpected ':', expecting ';' or '{' in /in/bJhRv on line 66
Process exited with code 255 . preferences:dark mode live preview
230.97 ms | 401 KiB | 291 Q