73 lines
1.9 KiB
PHP
73 lines
1.9 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace Robo\Task\File;
|
||
|
|
|
||
|
|
use Robo\Contract\CompletionInterface;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Create a temporary file that is automatically cleaned up
|
||
|
|
* once the task collection is is part of completes. When created,
|
||
|
|
* it is given a random filename.
|
||
|
|
*
|
||
|
|
* This temporary file may be manipulated exacatly like taskWrite().
|
||
|
|
* It is deleted as soon as the collection it is a part of completes
|
||
|
|
* or rolls back.
|
||
|
|
*
|
||
|
|
* ``` php
|
||
|
|
* <?php
|
||
|
|
* $collection = $this->collectionBuilder();
|
||
|
|
* $tmpFilePath = $collection->taskTmpFile()
|
||
|
|
* ->line('-----')
|
||
|
|
* ->line(date('Y-m-d').' '.$title)
|
||
|
|
* ->line('----')
|
||
|
|
* ->getPath();
|
||
|
|
* $collection->run();
|
||
|
|
* ?>
|
||
|
|
* ```
|
||
|
|
*/
|
||
|
|
class TmpFile extends Write implements CompletionInterface
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* @param string $filename
|
||
|
|
* @param string $extension
|
||
|
|
* @param string $baseDir
|
||
|
|
* @param bool $includeRandomPart
|
||
|
|
*/
|
||
|
|
public function __construct($filename = 'tmp', $extension = '', $baseDir = '', $includeRandomPart = true)
|
||
|
|
{
|
||
|
|
if (empty($baseDir)) {
|
||
|
|
$baseDir = sys_get_temp_dir();
|
||
|
|
}
|
||
|
|
if ($includeRandomPart) {
|
||
|
|
$random = static::randomString();
|
||
|
|
$filename = "{$filename}_{$random}";
|
||
|
|
}
|
||
|
|
$filename .= $extension;
|
||
|
|
parent::__construct("{$baseDir}/{$filename}");
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Generate a suitably random string to use as the suffix for our
|
||
|
|
* temporary file.
|
||
|
|
*
|
||
|
|
* @param int $length
|
||
|
|
*
|
||
|
|
* @return string
|
||
|
|
*/
|
||
|
|
private static function randomString($length = 12)
|
||
|
|
{
|
||
|
|
return substr(str_shuffle('23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'), 0, $length);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Delete this file when our collection completes.
|
||
|
|
* If this temporary file is not part of a collection,
|
||
|
|
* then it will be deleted when the program terminates,
|
||
|
|
* presuming that it was created by taskTmpFile() or _tmpFile().
|
||
|
|
*/
|
||
|
|
public function complete()
|
||
|
|
{
|
||
|
|
unlink($this->getPath());
|
||
|
|
}
|
||
|
|
}
|