PHPackages                             elhebert/phpexiftool - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. elhebert/phpexiftool

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

elhebert/phpexiftool
====================

Exiftool driver for PHP

1.0.0(1y ago)0661↓12.5%MITPHPPHP ^8.3CI passing

Since May 16Pushed 1y agoCompare

[ Source](https://github.com/Elhebert/PHPExiftool)[ Packagist](https://packagist.org/packages/elhebert/phpexiftool)[ RSS](/packages/elhebert-phpexiftool/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (14)Versions (5)Used By (0)

PHP-Exiftool
============

[](#php-exiftool)

[![Unit tests](https://github.com/Elhebert/PHPExiftool/actions/workflows/test.yml/badge.svg)](https://github.com/Elhebert/PHPExiftool/actions/workflows/test.yml)

This project is a fork of [alchemy/PHPExiftool](https://github.com/alchemy-fr/PHPExiftool) to add Symfony 7 support. This fork also includes better static analysis and re-introduce the TagGroup as part of the package.

PHP Exiftool is an Object Oriented driver for Phil Harvey's Exiftool (see ). Exiftool is a powerful library and command line utility for reading, writing and editing meta information written in Perl.

PHPExiftool provides an intuitive object oriented interface to read and write metadata.

You will find some example below.

Installation
------------

[](#installation)

```
composer require elhebert/phpexiftool
```

Usage
-----

[](#usage)

### Exiftool Reader

[](#exiftool-reader)

A simple example : how to read metadata from a file:

```
use Monolog\Logger;
use PHPExiftool\Reader;
use PHPExiftool\Driver\Value\ValueInterface;

$logger = new Logger('exiftool');
$reader = Reader::create($logger);

$metadataBag = $reader->files(__FILE__)->first();

foreach ($metadataBag as $metadata) {
    if (ValueInterface::TYPE_BINARY === $metadata->getValue()->getType()) {
        echo sprintf("\t--> Field %s has binary data" . PHP_EOL, $metadata->getTagGroup());
    } else {
        echo sprintf("\t--> Field %s has value(s) %s" . PHP_EOL, $metadata->getTagGroup(), $metadata->getValue()->asString());
    }
}
```

An example with directory inspection :

```
use Monolog\Logger;
use PHPExiftool\Reader;
use PHPExiftool\Driver\Value\ValueInterface;

$logger = new Logger('exiftool');
$reader = Reader::create($logger);

$reader
  ->in(['documents', '/Picture'])
  ->extensions(['doc', 'jpg', 'cr2', 'dng'])
  ->exclude(['test', 'tmp'])
  ->followSymLinks();

foreach ($reader as $data) {
    echo "found file " . $data->getFile() . PHP_EOL;

    foreach ($data as $metadata) {
        if (ValueInterface::TYPE_BINARY === $metadata->getValue()->getType()) {
            echo sprintf("\t--> Field %s has binary data" . PHP_EOL, $metadata->getTagGroup());
        } else {
            echo sprintf("\t--> Field %s has value(s) %s" . PHP_EOL, $metadata->getTagGroup(), $metadata->getValue()->asString());
        }
    }
}
```

### Exiftool Writer

[](#exiftool-writer)

```
use Monolog\Logger;
use PHPExiftool\Writer;
use PHPExiftool\Driver\Metadata\Metadata;
use PHPExiftool\Driver\Metadata\MetadataBag;
use PHPExiftool\Driver\Tag\IPTC\ObjectName;
use PHPExiftool\Driver\Value\Mono;

$logger = new Logger('exiftool');
$writer = Writer::create($logger);

$bag = new MetadataBag();
$bag->add(new Metadata(new ObjectName(), new Mono('Pretty cool subject')));

$writer->write('image.jpg', $bag);
```

License
-------

[](#license)

Project licensed under the MIT License

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance46

Moderate activity, may be stable

Popularity17

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 75.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~315 days

Total

2

Last Release

418d ago

PHP version history (2 changes)4.x-devPHP ^7.4 || ^8.2

1.0.0PHP ^8.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/efd06548e5d3377c053337fb7983451b07e50ceecd0a73a318bfde96c53a1754?d=identicon)[Elhebert](/maintainers/Elhebert)

---

Top Contributors

[![romainneutron](https://avatars.githubusercontent.com/u/137574?v=4)](https://github.com/romainneutron "romainneutron (286 commits)")[![jygaulier](https://avatars.githubusercontent.com/u/1247618?v=4)](https://github.com/jygaulier "jygaulier (52 commits)")[![Elhebert](https://avatars.githubusercontent.com/u/3165079?v=4)](https://github.com/Elhebert "Elhebert (14 commits)")[![aynsix](https://avatars.githubusercontent.com/u/35221835?v=4)](https://github.com/aynsix "aynsix (5 commits)")[![bburnichon](https://avatars.githubusercontent.com/u/2437286?v=4)](https://github.com/bburnichon "bburnichon (5 commits)")[![4rthem](https://avatars.githubusercontent.com/u/2180032?v=4)](https://github.com/4rthem "4rthem (4 commits)")[![nlegoff](https://avatars.githubusercontent.com/u/511494?v=4)](https://github.com/nlegoff "nlegoff (4 commits)")[![nmaillat](https://avatars.githubusercontent.com/u/1225962?v=4)](https://github.com/nmaillat "nmaillat (3 commits)")[![aztech-dev](https://avatars.githubusercontent.com/u/93562568?v=4)](https://github.com/aztech-dev "aztech-dev (3 commits)")[![SimonSimCity](https://avatars.githubusercontent.com/u/392589?v=4)](https://github.com/SimonSimCity "SimonSimCity (1 commits)")[![CedCannes](https://avatars.githubusercontent.com/u/2522998?v=4)](https://github.com/CedCannes "CedCannes (1 commits)")[![NoUseFreak](https://avatars.githubusercontent.com/u/879864?v=4)](https://github.com/NoUseFreak "NoUseFreak (1 commits)")[![gioid](https://avatars.githubusercontent.com/u/3519002?v=4)](https://github.com/gioid "gioid (1 commits)")[![michalsanger](https://avatars.githubusercontent.com/u/2528846?v=4)](https://github.com/michalsanger "michalsanger (1 commits)")

---

Tags

metadataexifexiftoolphpexiftool

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/elhebert-phpexiftool/health.svg)

```
[![Health](https://phpackages.com/badges/elhebert-phpexiftool/health.svg)](https://phpackages.com/packages/elhebert-phpexiftool)
```

###  Alternatives

[ec-cube/ec-cube

EC-CUBE EC open platform.

78527.0k1](/packages/ec-cube-ec-cube)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)[contao/core-bundle

Contao Open Source CMS

1231.6M2.4k](/packages/contao-core-bundle)[prestashop/prestashop

PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

9.0k15.4k](/packages/prestashop-prestashop)[alchemy/phpexiftool

Exiftool driver for PHP

40189.1k4](/packages/alchemy-phpexiftool)[jolicode/castor

A lightweight and modern task runner. Automate everything. In PHP.

53541.0k3](/packages/jolicode-castor)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
