Skip to content

Commit

Permalink
Правка генерации названий директорий
Browse files Browse the repository at this point in the history
  • Loading branch information
snewer committed Jan 24, 2020
1 parent 593144f commit e068b9b
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 1,600 deletions.
3 changes: 3 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,8 @@
"psr-4": {
"snewer\\storage\\": "src/"
}
},
"extra": {
"bootstrap": "snewer\\images\\Bootstrap"
}
}
52 changes: 1 addition & 51 deletions src/AbstractBucket.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
*/
abstract class AbstractBucket extends BaseObject
{

/**
* Название хранилища.
* @var string
Expand Down Expand Up @@ -75,55 +74,7 @@ protected function fetchBaseUrlByPath($baseUrls, $path)
}
return $baseUrls;
}

/**
* @see https://gist.github.com/snewer/013bc268828454cc784c857eb695c434
* @param null $length
* @return array
*/
private function getStopWords($length = null)
{
$stopWords = file_get_contents(__DIR__ . '/stopWords.txt');
$stopWords = explode(PHP_EOL, $stopWords);
if ($length) {
return array_filter($stopWords, function ($value) use ($length) {
return strlen($value) == $length;
});
} else {
return $stopWords;
}
}

/**
* Генерирует случайную строку для именования директорий.
* Выходная строка удовлетворяет регулярному выражению [0-9A-Za-z]+.
* @param int $length - Длина генерируемой строки.
* @param bool $toLower - Нужно ли, что бы выходная строка была в нижнем регистре.
* @return mixed|string
*/
protected function generateRandomString($length = 2, $toLower = true)
{
if ($toLower) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyz';
} else {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
}
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
// AdBlocker блокирует пути, в которых встречаются некоторые ключевые слова,
// такие как "ad", "bn" поэтому убираем их из пути.
$stopWords = $this->getStopWords($length);
foreach ($stopWords as $stopWord) {
if (strcasecmp($randomString, $stopWord) === 0) {
return str_repeat('s', $length);
}
}
return $randomString;
}


/**
* Возвращает название хранилища.
* @return string
Expand All @@ -141,5 +92,4 @@ public function setName($name)
{
$this->_name = $name;
}

}
4 changes: 2 additions & 2 deletions src/drivers/FileSystemDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,9 @@ public function upload($source, $extension)
do {
$path = '';
// используем древовидную структуру директорий,
// что бы в одной директории не накапливалось большое кол-во файлов
// что бы в одной директории не накапливалось большое кол-во файлов.
for ($i = 0; $i < $this->depth; $i++) {
$path .= '/' . $this->generateRandomString($this->dirNameLength, true);
$path .= '/' . rand(10 ** ($this->dirNameLength - 1), 10 ** $this->dirNameLength - 1);
if (!is_dir($this->basePath . $path)) {
mkdir($this->basePath . $path);
}
Expand Down

0 comments on commit e068b9b

Please sign in to comment.