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)01.1k↑65.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 1w 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

36

—

LowBetter than 79% of packages

Maintenance40

Moderate activity, may be stable

Popularity19

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

509d ago

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

1.0.0PHP ^8.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/3165079?v=4)[Elhebert](/maintainers/Elhebert)[@Elhebert](https://github.com/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

[chameleon-system/chameleon-base

The Chameleon System core.

1029.4k6](/packages/chameleon-system-chameleon-base)[matomo/matomo

Matomo is the leading Free/Libre open analytics platform

21.7k39.6k](/packages/matomo-matomo)[sulu/sulu

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

1.3k1.4M236](/packages/sulu-sulu)[contao/core-bundle

Contao Open Source CMS

1301.7M3.1k](/packages/contao-core-bundle)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.8M672](/packages/shopware-core)[pimcore/pimcore

Content &amp; Product Management Framework (CMS/PIM/E-Commerce)

3.8k3.9M535](/packages/pimcore-pimcore)

PHPackages © 2026

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