94 lines
1.9 KiB
PHP
94 lines
1.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Intervention\Image;
|
|
|
|
use Intervention\Image\Exceptions\NotWritableException;
|
|
use Intervention\Image\Interfaces\FileInterface;
|
|
use Intervention\Image\Traits\CanBuildFilePointer;
|
|
|
|
class File implements FileInterface
|
|
{
|
|
use CanBuildFilePointer;
|
|
|
|
/**
|
|
* Create new instance
|
|
*
|
|
* @param string $data
|
|
*/
|
|
public function __construct(protected string $data)
|
|
{
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @see FileInterface::save()
|
|
*/
|
|
public function save(string $filepath): void
|
|
{
|
|
$dir = pathinfo($filepath, PATHINFO_DIRNAME);
|
|
|
|
if (!is_dir($dir)) {
|
|
throw new NotWritableException(
|
|
"Can't write image to path. Directory does not exist."
|
|
);
|
|
}
|
|
|
|
if (!is_writable($dir)) {
|
|
throw new NotWritableException(
|
|
"Can't write image to path. Directory is not writable."
|
|
);
|
|
}
|
|
|
|
// write data
|
|
$saved = @file_put_contents($filepath, (string) $this);
|
|
if ($saved === false) {
|
|
throw new NotWritableException(
|
|
"Can't write image data to path ({$filepath})."
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @see FilterInterface::toString()
|
|
*/
|
|
public function toString(): string
|
|
{
|
|
return $this->data;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @see FilterInterface::toFilePointer()
|
|
*/
|
|
public function toFilePointer()
|
|
{
|
|
return $this->buildFilePointer($this->toString());
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @see FileInterface::size()
|
|
*/
|
|
public function size(): int
|
|
{
|
|
return mb_strlen($this->data);
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @see FileInterface::__toString()
|
|
*/
|
|
public function __toString(): string
|
|
{
|
|
return $this->toString();
|
|
}
|
|
}
|