tikiwiki/packages/tiki-pkg-mediaalchemyst/alchemy/phpexiftool/lib/PHPExiftool/Exiftool.php

98 lines
2.3 KiB
PHP
Raw Normal View History

2023-11-20 21:52:04 +01:00
<?php
/**
* This file is part of the PHPExiftool package.
*
* (c) Alchemy <support@alchemy.fr>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPExiftool;
use PHPExiftool\Exception\RuntimeException;
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\Process\Process;
class Exiftool implements LoggerAwareInterface
{
private $logger;
private $binaryPath;
public function __construct(LoggerInterface $logger, $binaryPath = null)
{
$this->logger = $logger;
$this->binaryPath = $binaryPath;
}
/**
* {@inheritdoc}
*/
public function setLogger(LoggerInterface $logger)
{
$this->logger = $logger;
return $this;
}
/**
* Execute a command and return the output
*
* @param string $command
* @param int $timeout
* @return string
* @throws \Exception
*/
public function executeCommand($command, $timeout = 60)
{
$command = ($this->binaryPath == null? self::getBinary(): $this->binaryPath) . ' ' . $command;
$process = new Process($command);
$process->setTimeout($timeout);
$this->logger->addInfo(sprintf('Exiftool executes command %s', $process->getCommandLine()));
$process->run();
if ( ! $process->isSuccessful()) {
throw new RuntimeException(sprintf('Command %s failed : %s, exitcode %s', $command, $process->getErrorOutput(), $process->getExitCode()));
}
$output = $process->getOutput();
unset($process);
return $output;
}
/**
*
* @return string
*/
protected static function getBinary()
{
static $binary = null;
if ($binary) {
return $binary;
}
$dev = __DIR__ . '/../../vendor/phpexiftool/exiftool/exiftool';
$packaged = __DIR__ . '/../../../../phpexiftool/exiftool/exiftool';
foreach (array($packaged, $dev) as $location) {
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
$location .= '.exe';
}
if (is_executable($location)) {
return $binary = realpath($location);
}
}
throw new RuntimeException('Unable to get exiftool binary');
}
}