12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- <?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');
- }
- }
|