Replaced $extension
parameter with $options
parameter in \TempFile > TempFile > __construct()
so that it's possible to specify the file extension and the file name prefix.
This commit is contained in:
parent
f55aabaeb2
commit
a338c7cb38
6 changed files with 118 additions and 24 deletions
|
@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [1.1.0] - 2023-02-26
|
||||
|
||||
### Changed
|
||||
|
||||
- Replaced `$extension` parameter with `$options` parameter in `\TempFile > TempFile > __construct()`
|
||||
so that it's possible to specify the file extension and the file name prefix.
|
||||
|
||||
## [1.0.0] - 2023-02-25
|
||||
|
||||
### Added
|
||||
|
|
36
README.md
36
README.md
|
@ -3,6 +3,18 @@
|
|||
TempFile is a very simple library used for creating temporary files without having to write code to delete them
|
||||
once you're done with them.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
<!-- TOC -->
|
||||
* [TempFile](#tempfile)
|
||||
* [Table of Contents](#table-of-contents)
|
||||
* [Installation](#installation)
|
||||
* [Compiling from source](#compiling-from-source)
|
||||
* [Usage](#usage)
|
||||
* [Options](#options)
|
||||
* [License](#license)
|
||||
<!-- TOC -->
|
||||
|
||||
## Installation
|
||||
|
||||
The library can be installed using ncc:
|
||||
|
@ -44,15 +56,20 @@ make release
|
|||
|
||||
## Usage
|
||||
|
||||
Just create a class object, optionally specifying a file extension to use (without the dot). And that's all, an
|
||||
Exception will be thrown if the file could not be created.
|
||||
Just create a class object, optionally specifying options you'd like to use.
|
||||
|
||||
```php
|
||||
require_once('ncc');
|
||||
import('net.nosial.tempfile');
|
||||
|
||||
$file1 = new TempFile();
|
||||
$file2 = new TempFile('txt');
|
||||
$file1 = new TempFile\TempFile();
|
||||
$file2 = new TempFile\TempFile([
|
||||
TempFile\Options::Extension => 'txt',
|
||||
TempFile\Options::Prefix => 'prefix_',
|
||||
TempFile\Options::Suffix => '_suffix',
|
||||
TempFile\Options::RandomLength => 8,
|
||||
TempFile\Options::Directory => '/tmp',
|
||||
]);
|
||||
```
|
||||
|
||||
You can obtain the file path by using the `getFilepath()` method or by using the object as a string.
|
||||
|
@ -66,6 +83,17 @@ Files are automatically deleted when the object is destroyed, if for some reason
|
|||
properly called, a shutdown function is automatically registered to delete all the temporary files that were
|
||||
created.
|
||||
|
||||
### Options
|
||||
|
||||
The following options are available:
|
||||
|
||||
- `TempFile\Options::Extension` - The file extension to use, defaults to 'tmp',
|
||||
- `TempFile\Options::Prefix` - The prefix to use for the file name, empty by default,
|
||||
- `TempFile\Options::Suffix` - The suffix to use for the file name, empty by default,
|
||||
- `TempFile\Options::RandomLength` - The length of the random string to use for the file name, defaults to 16,
|
||||
- `TempFile\Options::Directory` - The directory to create the file in, defaults to the system's temporary directory.
|
||||
- `TempFile\Options::Filename` - The filename to use, if specified, the random string will not be used.
|
||||
|
||||
## License
|
||||
|
||||
This library is licensed under the MIT license, see the LICENSE file
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
"package": "net.nosial.tempfile",
|
||||
"copyright": "Copyright (c) 2022-2023 Nosial",
|
||||
"description": "TempFile is a PHP library for creating temporary files.",
|
||||
"version": "1.0.0",
|
||||
"version": "1.1.0",
|
||||
"uuid": "910f98fe-b4c9-11ed-b13f-fdc283a6db6d"
|
||||
},
|
||||
"build": {
|
||||
|
|
22
src/TempFile/Options.php
Normal file
22
src/TempFile/Options.php
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
namespace TempFile;
|
||||
|
||||
abstract class Options
|
||||
{
|
||||
const Extension = 'extension';
|
||||
const Filename = 'filename';
|
||||
const Prefix = 'prefix';
|
||||
const Suffix = 'suffix';
|
||||
const RandomLength = 'random_length';
|
||||
const Directory = 'directory';
|
||||
|
||||
Const All = [
|
||||
self::Extension,
|
||||
self::Filename,
|
||||
self::Prefix,
|
||||
self::Suffix,
|
||||
self::RandomLength,
|
||||
self::Directory,
|
||||
];
|
||||
}
|
|
@ -5,6 +5,7 @@
|
|||
namespace TempFile;
|
||||
|
||||
use Exception;
|
||||
use InvalidArgumentException;
|
||||
use ncc\Runtime;
|
||||
|
||||
class TempFile
|
||||
|
@ -23,13 +24,6 @@
|
|||
*/
|
||||
private static $shutdown_handler_registered = false;
|
||||
|
||||
/**
|
||||
* The extension of the temporary file
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $extension;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
|
@ -41,21 +35,60 @@
|
|||
private $filepath;
|
||||
|
||||
/**
|
||||
* Create a new temporary file with a given extension (default: tmp)
|
||||
* Create a new temporary file with optional options:
|
||||
* - extension: The extension of the file
|
||||
* - filename: The filename of the file
|
||||
* - prefix: The prefix of the file name
|
||||
* - suffix: The suffix of the file name
|
||||
*
|
||||
* @param string|null $extension
|
||||
* @param array|null $options
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __construct(?string $extension=null)
|
||||
public function __construct(?array $options=[])
|
||||
{
|
||||
if($extension === null)
|
||||
/** @var string|int $value */
|
||||
foreach($options as $option => $value)
|
||||
{
|
||||
$extension = 'tmp';
|
||||
if(!is_string($value) && !is_int($value))
|
||||
throw new InvalidArgumentException(sprintf('The value for option %s must be a string or int, got %s', $option, gettype($value)));
|
||||
if(!in_array($option, Options::All))
|
||||
throw new InvalidArgumentException(sprintf('The option %s is not valid', $option));
|
||||
}
|
||||
|
||||
$this->extension = ltrim($extension, '.');
|
||||
$this->filename = $this->randomString() . '.' . $this->extension;
|
||||
$this->filepath = $this->getTempDir() . DIRECTORY_SEPARATOR . $this->filename;
|
||||
if(!isset($options[Options::Extension]))
|
||||
$options[Options::Extension] = 'tmp';
|
||||
if(!isset($options[Options::RandomLength]))
|
||||
$options[Options::RandomLength] = 8;
|
||||
|
||||
if(isset($options[Options::Filename]))
|
||||
{
|
||||
$this->filename = $options[Options::Filename];
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->filename = self::randomString((int)$options[Options::RandomLength]);
|
||||
}
|
||||
|
||||
if(isset($options[Options::Prefix]))
|
||||
$this->filename = $options[Options::Prefix] . $this->filename;
|
||||
if(isset($options[Options::Suffix]))
|
||||
$this->filename = $this->filename . $options[Options::Suffix];
|
||||
$this->filename .= '.' . $options[Options::Extension];
|
||||
$this->filename = preg_replace('/[^a-zA-Z0-9.\-_]/', '', $this->filename);
|
||||
|
||||
if(isset($options[Options::Directory]))
|
||||
{
|
||||
if(!file_exists($options[Options::Directory]) || !is_dir($options[Options::Directory]))
|
||||
throw new InvalidArgumentException(sprintf('The directory %s does not exist or is not a a valid path', $options[Options::Directory]));
|
||||
if(!is_writable($options[Options::Directory]))
|
||||
throw new InvalidArgumentException(sprintf('The directory %s is not writable', $options[Options::Directory]));
|
||||
|
||||
$this->filepath = $options[Options::Directory] . DIRECTORY_SEPARATOR . $this->filename;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->filepath = self::getTempDir() . DIRECTORY_SEPARATOR . $this->filename;
|
||||
}
|
||||
|
||||
if(!file_exists($this->filepath))
|
||||
{
|
||||
|
@ -79,14 +112,15 @@
|
|||
/**
|
||||
* Generates a random string of a given length
|
||||
*
|
||||
* @param int $length
|
||||
* @return string
|
||||
*/
|
||||
private function randomString(): string
|
||||
private static function randomString(int $length=8): string
|
||||
{
|
||||
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
$charactersLength = strlen($characters);
|
||||
$randomString = '';
|
||||
for ($i = 0; $i < 32; $i++)
|
||||
for ($i = 0; $i < $length; $i++)
|
||||
{
|
||||
$randomString .= $characters[rand(0, $charactersLength - 1)];
|
||||
}
|
||||
|
@ -99,7 +133,7 @@
|
|||
* @return string
|
||||
* @throws Exception
|
||||
*/
|
||||
private function getTempDir(): string
|
||||
private static function getTempDir(): string
|
||||
{
|
||||
if(function_exists('sys_get_temp_dir'))
|
||||
{
|
||||
|
|
|
@ -3,7 +3,10 @@
|
|||
require 'ncc';
|
||||
import('net.nosial.tempfile');
|
||||
|
||||
$temp = new \TempFile\TempFile('bin');
|
||||
$temp = new \TempFile\TempFile([
|
||||
\TempFile\Options::Extension => 'txt',
|
||||
\TempFile\Options::Filename => 'test',
|
||||
]);
|
||||
print(sprintf('Tempfile: %s', $temp->getFilepath()) . PHP_EOL);
|
||||
|
||||
file_put_contents($temp, 'Hello, world!');
|
||||
|
|
Loading…
Add table
Reference in a new issue