PHPackages                             3slab/vdm-library-ftp-transport-bundle - 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. [HTTP &amp; Networking](/categories/http)
4. /
5. 3slab/vdm-library-ftp-transport-bundle

ActiveSymfony-bundle[HTTP &amp; Networking](/categories/http)

3slab/vdm-library-ftp-transport-bundle
======================================

Vdm Ftp Transport

2.0.1(2y ago)01.2kproprietaryPHPCI failing

Since Apr 29Pushed 2y ago4 watchersCompare

[ Source](https://github.com/3slab/VdmLibraryFtpTransportBundle)[ Packagist](https://packagist.org/packages/3slab/vdm-library-ftp-transport-bundle)[ RSS](/packages/3slab-vdm-library-ftp-transport-bundle/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (5)Dependencies (4)Versions (6)Used By (0)

VdmLibraryFtpTransportBundle
============================

[](#vdmlibraryftptransportbundle)

**Not maintained anymore : use [VdmLibraryFlysystemTransportBundle](https://github.com/3slab/VdmLibraryFlysystemTransportBundle) instead with [VdmLibraryBundle v3.x](https://github.com/3slab/VdmLibraryBundle)**

This source can collect data from a ftp server.

Configuration reference
-----------------------

[](#configuration-reference)

```
framework:
    messenger:
        transports:
            consumer:
                dsn: "sftp://user:password@sftp.fr:2222"
                retry_strategy:
                    max_retries: 0
                options:
                    monitoring:
                        enabled: true
                    mode: move
                    ftp_options:
                        dirpath: path/to/your/files/
                        storage: path/to/your/storage/

```

ConfigurationDescriptiondsnthe url you want to collect (needs to start by ftp or sftp)retry\_strategy.max\_retriesneeds to be 0 because ftp transport does not support this featureoptions.modetwo mode available (moveoptions.ftp\_optionsoptions to manage your ftp actionsoptions.ftp\_options.dirpathpath to your directoryoptions.ftp\_options.storageIf you choose option `move` you have to configure this path.options.monitoring.enabledif true, hook up in the vdm library bundle monitoring system to send information about the FTP responseCustom ftp executor
-------------------

[](#custom-ftp-executor)

A custom ftp executor allows you to customize how you call the ftp server. It's necessary if you have differents action to make on files.

Just create a class in your project that extends `Vdm\Bundle\LibraryFtpTransportBundle\Executor\AbstractFtpExecutor`. It will automatically replace the default executor.

**If you have 2 custom executor. Only a single one will be used, the second is ignored.**

```
namespace App\FtpExecutor;

use Psr\Log\LoggerInterface;
use Symfony\Component\Messenger\Envelope;
use Vdm\Bundle\LibraryBundle\Model\Message;
use Vdm\Bundle\LibraryFtpTransportBundle\Executor\AbstractFtpExecutor;
use Vdm\Bundle\LibraryBundle\Stamp\StopAfterHandleStamp;

class CustomFtpExecutor implements AbstractFtpExecutor
{
    /**
     * @var LoggerInterface
    */
    private $logger;

    public function __construct(LoggerInterface $logger)
    {
        parent::__construct();
        $this->logger = $logger;
    }

    public function execute(array $files): iterable
    {
        $files = array_filter($files, function($file) {
            return (isset($file['type']) && $file['type'] === 'file');
        });

        foreach ($files as $key => $file) {
            $file = $this->ftpClient->get($file);
            $message = new Message($file);

            yield $this->getEnvelope($files, $key, $message);
        }

        yield new Envelope(new Message(""), [new StopAfterHandleStamp()]);
    }

    private function getEnvelope(array $files, int $key, Message $message): Envelope
    {
        $stamps = [];

        // Put the stop stamp on the last file
        if (array_key_last($files) === $key) {
            $stamps = [new StopAfterHandleStamp()];
        }

        return new Envelope($message, $stamps);
    }
}

```

There are 2 important things your custom executor needs to do :

- `yield` a new envelope with a VDM Message instance
- Add a `StopAfterHandleStamp` stamp to the yielded envelope if you want to stop after handling the last file (if not, the messenger worker loop over and will execute it once again).

*Note : thanks to the yield system, you can implement a loop in your execute function and return items once at a time*

*Note : you can keep state in your custom executor so if it is executed again, adapt your ftp call*

Monitoring
----------

[](#monitoring)

If you enable monitoring, it will track the following metrics :

- Size of the Ftp file body
- Counter the ftp error

###  Health Score

29

—

LowBetter than 60% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity15

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor2

2 contributors hold 50%+ of commits

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 ~335 days

Total

5

Last Release

862d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/1c22c6eb06bd9de96a2a9391672ce4fee607a63c08c635b539dba8667be570f7?d=identicon)[3slab](/maintainers/3slab)

---

Top Contributors

[![jbouzekri](https://avatars.githubusercontent.com/u/880996?v=4)](https://github.com/jbouzekri "jbouzekri (5 commits)")[![angelfs](https://avatars.githubusercontent.com/u/7326299?v=4)](https://github.com/angelfs "angelfs (4 commits)")[![TOTOleHero](https://avatars.githubusercontent.com/u/657752?v=4)](https://github.com/TOTOleHero "TOTOleHero (2 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/3slab-vdm-library-ftp-transport-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/3slab-vdm-library-ftp-transport-bundle/health.svg)](https://phpackages.com/packages/3slab-vdm-library-ftp-transport-bundle)
```

###  Alternatives

[illuminate/http

The Illuminate Http package.

11936.0M5.1k](/packages/illuminate-http)[vladimir-yuldashev/flysystem-curlftp

Flysystem Adapter for the FTP with cURL implementation

36353.9k1](/packages/vladimir-yuldashev-flysystem-curlftp)[twistor/flysystem-http

An HTTP adapter for Flysystem that uses basic PHP functions.

21253.8k3](/packages/twistor-flysystem-http)[lesstif/confluence-rest-api

Confluence REST API Client for PHP Users.

1713.3k](/packages/lesstif-confluence-rest-api)[rootsoft/laravel-ipfs

Laravel package to communicate with IPFS

323.9k](/packages/rootsoft-laravel-ipfs)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

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