Skip to content

Commit 8187da8

Browse files
authored
Merge pull request #2 from middlewares/php84-or-improvements
Add support for php8.4 and other improvements
2 parents 9389cae + 1496ac0 commit 8187da8

16 files changed

+190
-91
lines changed

.gitattributes

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
* text=auto eol=lf
22

3-
/tests export-ignore
4-
.editorconfig export-ignore
5-
.gitattributes export-ignore
6-
.gitignore export-ignore
7-
.php_cs export-ignore
8-
.travis.yml export-ignore
9-
phpcs.xml.dist export-ignore
10-
phpunit.xml.dist export-ignore
3+
/tests export-ignore
4+
.editorconfig export-ignore
5+
.gitattributes export-ignore
6+
.gitignore export-ignore
7+
.php-cs-fixer.php export-ignore
8+
phpcs.xml.dist export-ignore
9+
phpunit.xml.dist export-ignore
10+
.phpstan.neon export-ignore

.github/workflows/main.yaml

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
name: "testing"
22

33
on:
4-
push:
5-
branches: [ master ]
6-
pull_request:
7-
branches: [ master ]
4+
push:
5+
branches: [ master ]
6+
pull_request:
7+
branches: [ master ]
88

99
jobs:
1010
qa:
@@ -13,19 +13,19 @@ jobs:
1313

1414
steps:
1515
- name: Checkout
16-
uses: actions/checkout@v2
16+
uses: actions/checkout@v4
1717

1818
- name: Validate composer.json and composer.lock
1919
run: composer validate
2020

2121
- name: Cache Composer packages
2222
id: composer-cache
23-
uses: actions/cache@v2
23+
uses: actions/cache@v4
2424
with:
25-
path: vendor
26-
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
27-
restore-keys: |
28-
${{ runner.os }}-php-
25+
path: vendor
26+
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
27+
restore-keys: |
28+
${{ runner.os }}-php-
2929
3030
- name: Install dependencies
3131
if: steps.composer-cache.outputs.cache-hit != 'true'
@@ -40,37 +40,34 @@ jobs:
4040

4141
strategy:
4242
matrix:
43-
php:
44-
- 7.2
45-
- 7.3
46-
- 7.4
47-
composer-args: [ "" ]
48-
include:
49-
- php: 8.0
50-
composer-args: --ignore-platform-reqs
51-
fail-fast: false
43+
php:
44+
- 7.2
45+
- 7.3
46+
- 7.4
47+
- 8.0
48+
- 8.1
49+
- 8.2
50+
- 8.3
51+
- 8.4
5252

5353
steps:
5454
- name: Checkout
55-
uses: actions/checkout@v2
55+
uses: actions/checkout@v4
5656

5757
- name: Install PHP
5858
uses: shivammathur/setup-php@v2
5959
with:
6060
php-version: ${{ matrix.php }}
6161

6262
- name: Cache PHP dependencies
63-
uses: actions/cache@v2
63+
uses: actions/cache@v4
6464
with:
6565
path: vendor
6666
key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }}
6767
restore-keys: ${{ runner.os }}-php-${{ matrix.php }}-composer-
6868

6969
- name: Install dependencies
70-
run: composer install --prefer-dist --no-progress ${{ matrix.composer-args }}
70+
run: composer install --prefer-dist --no-progress
7171

7272
- name: Tests
7373
run: composer test
74-
75-
- name: Tests coverage
76-
run: composer coverage

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ vendor
22
composer.lock
33
coverage
44
*.cache
5+
.idea
6+
kit

.php-cs-fixer.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
return My\PhpCsFixerConfig::create()
4+
->setFinder(
5+
PhpCsFixer\Finder::create()
6+
->files()
7+
->name('*.php')
8+
->in(__DIR__.'/src')
9+
->in(__DIR__.'/tests')
10+
);

.phpstan.neon

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
parameters:
2+
reportUnmatchedIgnoredErrors: false
3+
inferPrivatePropertyTypeFromConstructor: true
4+
level: 8
5+
paths:
6+
- src
7+
- tests
8+
ignoreErrors:
9+
-
10+
identifier: 'function.alreadyNarrowedType'
11+
reportUnmatched: false
12+
- "#^Unsafe usage of new static#"

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/)
66
and this project adheres to [Semantic Versioning](http://semver.org/).
77

8+
## [3.0.0] - 2020-12-03
9+
### Changed
10+
- PHP 7.2 remains th minimum version.
11+
- Updated `league/filesystem` to version 2 for php 7.2, 7.3 and 7.4, and to version 3 for >= php 8.0.
12+
- With these changes, a breaking change is introduced by `league/filesystem`. Now you have to pass a FilesystemOperator interface compliant class to the middlewares. Check README's code examples.
13+
814
## [2.0.1] - 2020-12-03
915
### Added
1016
- Support for PHP 8.0
@@ -69,6 +75,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
6975
## 0.1.0 - 2016-10-02
7076
First version
7177

78+
[3.0.0]: https://github.com/middlewares/filesystem/compare/v2.0.1...v3.0.0
7279
[2.0.1]: https://github.com/middlewares/filesystem/compare/v2.0.0...v2.0.1
7380
[2.0.0]: https://github.com/middlewares/filesystem/compare/v1.1.0...v2.0.0
7481
[1.1.0]: https://github.com/middlewares/filesystem/compare/v1.0.0...v1.1.0

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
The MIT License (MIT)
22

3-
Copyright (c) 2019
3+
Copyright (c) 2019-2025
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

README.md

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,30 @@ Example using a ftp storage:
4545

4646
```php
4747
use League\Flysystem\Filesystem;
48-
use League\Flysystem\Adapter\Ftp;
49-
50-
$filesystem = new Filesystem(new Ftp([
51-
'host' => 'ftp.example.com',
52-
'username' => 'username',
53-
'password' => 'password',
54-
'port' => 21,
55-
'root' => '/path/to/root',
56-
'passive' => true,
57-
'ssl' => true,
58-
'timeout' => 30,
59-
]));
48+
use League\Flysystem\Ftp\FtpAdapter;
49+
use League\Flysystem\Ftp\FtpConnectionOptions;
50+
51+
$adapter = new League\Flysystem\Ftp\FtpAdapter(
52+
FtpConnectionOptions::fromArray([
53+
'host' => 'hostname',
54+
'root' => '/root/path/',
55+
'username' => 'username',
56+
'password' => 'password',
57+
'port' => 21,
58+
'ssl' => false,
59+
'timeout' => 90,
60+
'utf8' => false,
61+
'passive' => true,
62+
'transferMode' => FTP_BINARY,
63+
'systemType' => null, // 'windows' or 'unix'
64+
'ignorePassiveAddress' => null, // true or false
65+
'timestampsOnUnixListingsEnabled' => false, // true or false
66+
'recurseManually' => true // true
67+
])
68+
);
69+
70+
// The FilesystemOperator
71+
$filesystem = new Filesystem($adapter);
6072

6173
Dispatcher::run([
6274
new Middlewares\Reader($filesystem)
@@ -77,7 +89,7 @@ $reader = new Middlewares\Reader($filesystem, $responseFactory, $streamFactory);
7789
Allows to continue to the next middleware on error (file not found, method not allowed, etc). This allows to create a simple caching system as the following:
7890

7991
```php
80-
$cache = new Flysystem(new Local(__DIR__.'/path/to/files'));
92+
$cache = new Filesystem(new LocalFilesystemAdapter(__DIR__.'/path/to/files'));
8193

8294
Dispatcher::run([
8395
(new Middlewares\Reader($cache)) //read and returns the cached response...
@@ -103,7 +115,7 @@ To be compatible with `Reader` behaviour:
103115
* If the response is gzipped (has the header `Content-Encoding: gzip`) the file is saved with the extension .gz. For example `/post/23/index.html.gz` (instead `/post/23/index.html`).
104116

105117
```php
106-
$filesystem = new Flysystem(new Local(__DIR__.'/storage'));
118+
$filesystem = new Filesystem(new LocalFilesystemAdapter(__DIR__.'/storage'));
107119

108120
Dispatcher::run([
109121
new Middlewares\Writer($filesystem)

composer.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@
1818
},
1919
"require": {
2020
"php": "^7.2 || ^8.0",
21-
"middlewares/utils": "^3.0",
22-
"league/flysystem": "^1.0",
23-
"psr/http-server-middleware": "^1.0"
21+
"middlewares/utils": "^2 || ^3 || ^4",
22+
"league/flysystem": "^2 || ^3",
23+
"psr/http-server-middleware": "^1"
2424
},
2525
"require-dev": {
26-
"phpunit/phpunit": "^8|^9",
27-
"friendsofphp/php-cs-fixer": "^2.0",
28-
"squizlabs/php_codesniffer": "^3.0",
29-
"oscarotero/php-cs-fixer-config": "^1.0",
30-
"phpstan/phpstan": "^0.12",
31-
"laminas/laminas-diactoros": "^2.3"
26+
"phpunit/phpunit": "^8 || ^9",
27+
"friendsofphp/php-cs-fixer": "^3",
28+
"squizlabs/php_codesniffer": "^3",
29+
"oscarotero/php-cs-fixer-config": "^2",
30+
"phpstan/phpstan": "^1 || ^2",
31+
"laminas/laminas-diactoros": "^2 || ^3"
3232
},
3333
"autoload": {
3434
"psr-4": {

phpcs.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0"?>
2+
<ruleset name="Middlewares coding standard">
3+
<description>Middlewares coding standard</description>
4+
5+
<!-- display progress -->
6+
<arg value="p"/>
7+
<arg name="report" value="full"/>
8+
<arg name="colors"/>
9+
10+
<!-- coding standard -->
11+
<rule ref="PSR2"/>
12+
13+
<!-- Paths to check -->
14+
<file>src</file>
15+
<file>tests</file>
16+
</ruleset>

phpunit.xml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<phpunit bootstrap="vendor/autoload.php"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
5+
backupGlobals="false"
6+
backupStaticAttributes="false"
7+
beStrictAboutOutputDuringTests="true"
8+
beStrictAboutTestsThatDoNotTestAnything="true"
9+
beStrictAboutTodoAnnotatedTests="true"
10+
colors="true"
11+
verbose="true"
12+
convertErrorsToExceptions="true"
13+
convertNoticesToExceptions="true"
14+
convertWarningsToExceptions="true"
15+
processIsolation="false"
16+
stopOnFailure="false"
17+
failOnWarning="true">
18+
<testsuites>
19+
<testsuite name="Filesystem test suite">
20+
<directory>tests</directory>
21+
</testsuite>
22+
</testsuites>
23+
24+
<filter>
25+
<whitelist addUncoveredFilesFromWhitelist="true" processUncoveredFilesFromWhitelist="true">
26+
<directory>./src</directory>
27+
<exclude>
28+
<directory>./tests</directory>
29+
<directory>./vendor</directory>
30+
</exclude>
31+
</whitelist>
32+
</filter>
33+
</phpunit>

src/Filesystem.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,20 @@
33

44
namespace Middlewares;
55

6-
use League\Flysystem\Adapter\Local;
76
use League\Flysystem\Filesystem as Flysystem;
8-
use League\Flysystem\FilesystemInterface;
7+
use League\Flysystem\FilesystemOperator;
8+
use League\Flysystem\Local\LocalFilesystemAdapter;
99

1010
abstract class Filesystem
1111
{
1212
/**
13-
* @var FilesystemInterface
13+
* @var FilesystemOperator
1414
*/
1515
protected $filesystem;
1616

17-
protected static function createLocalFlysystem(string $path): FilesystemInterface
17+
protected static function createLocalFlysystem(string $path): FilesystemOperator
1818
{
19-
return new Flysystem(new Local($path));
19+
return new Flysystem(new LocalFilesystemAdapter($path));
2020
}
2121

2222
/**
@@ -25,8 +25,8 @@ protected static function createLocalFlysystem(string $path): FilesystemInterfac
2525
protected static function getFilename(string $path): string
2626
{
2727
$parts = pathinfo(urldecode($path));
28-
$path = isset($parts['dirname']) ? $parts['dirname'] : '';
29-
$filename = isset($parts['basename']) ? $parts['basename'] : '';
28+
$path = $parts['dirname'] ?? '';
29+
$filename = $parts['basename'];
3030

3131
//if has not extension, assume it's a directory and append index.html
3232
if (empty($parts['extension'])) {

0 commit comments

Comments
 (0)