diff --git a/.github/workflows/test-ci.yml b/.github/workflows/test-ci.yml index 86d5c865..cf44df92 100644 --- a/.github/workflows/test-ci.yml +++ b/.github/workflows/test-ci.yml @@ -10,12 +10,22 @@ jobs: fail-fast: false max-parallel: 1 matrix: - php-versions: ['5.4', '5.5', '5.6', '7.0'] + php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2'] runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 + - name: Setup php for mock server + uses: shivammathur/setup-php@v2 + with: + php-version: '8.2' + + - name: Setup build-in server + run: | + nohup php -S localhost:9000 -t ./tests/mock-server/ > phpd.log 2>&1 & + echo $! > mock-server.pid + - name: Setup php uses: shivammathur/setup-php@v2 with: @@ -28,13 +38,11 @@ jobs: - name: Run cases run: | - nohup php -S localhost:9000 -t ./tests/mock-server/ > phpd.log 2>&1 & - export PHP_SERVER_PID=$! ./vendor/bin/phpcs --standard=PSR2 src ./vendor/bin/phpcs --standard=PSR2 examples ./vendor/bin/phpcs --standard=PSR2 tests ./vendor/bin/phpunit --coverage-clover=coverage.xml - kill $PHP_SERVER_PID + cat mock-server.pid | xargs kill env: QINIU_ACCESS_KEY: ${{ secrets.QINIU_ACCESS_KEY }} @@ -42,5 +50,10 @@ jobs: QINIU_TEST_BUCKET: ${{ secrets.QINIU_TEST_BUCKET }} QINIU_TEST_DOMAIN: ${{ secrets.QINIU_TEST_DOMAIN }} + - name: Print mock servion log + if: ${{ failure() }} + run: | + cat phpd.log + - name: After_success run: bash <(curl -s https://codecov.io/bash) diff --git a/README.md b/README.md index 447a07d9..784d735a 100644 --- a/README.md +++ b/README.md @@ -12,18 +12,18 @@ ## 安装 -* 推荐使用 `composer` 进行安装。可以使用 composer.json 声明依赖,或者运行下面的命令。SDK 包已经放到这里 [`qiniu/php-sdk`][install-packagist] 。 +推荐使用 `composer` 进行安装。可以使用 composer.json 声明依赖,或者运行下面的命令。SDK 包已经放到这里 [`qiniu/php-sdk`][install-packagist] 。 + ```bash $ composer require qiniu/php-sdk ``` -* 直接下载安装,SDK 没有依赖其他第三方库,但需要参照 composer 的 autoloader,增加一个自己的 autoloader 程序。 ## 运行环境 -| Qiniu SDK版本 | PHP 版本 | -|:--------------------:|:---------------------------:| -| 7.x | cURL extension, 5.3 - 5.6,7.0 | -| 6.x | cURL extension, 5.2 - 5.6 | +| Qiniu SDK版本 | PHP 版本 | +|:--------------------:|:-----------------------------------------------:| +| 7.x | cURL extension, 5.3 - 5.6, 7.0 - 7.4, 8.0-8.1 | +| 6.x | cURL extension, 5.2 - 5.6 | ## 使用方法 diff --git a/composer.json b/composer.json index bf5c7252..f32512f6 100644 --- a/composer.json +++ b/composer.json @@ -19,12 +19,12 @@ ], "require": { "php": ">=5.3.3", - "myclabs/php-enum": "1.6.6" + "myclabs/php-enum": "~1.5.2 || ~1.6.6 || ~1.7.7 || ~1.8.4" }, "require-dev": { "paragonie/random_compat": ">=2", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~3.6" + "phpunit/phpunit": "^4.8 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4", + "squizlabs/php_codesniffer": "^2.3 || ~3.6" }, "autoload": { "psr-4": { diff --git a/src/Qiniu/Enum/QiniuEnum.php b/src/Qiniu/Enum/QiniuEnum.php index 28afac87..8399b542 100644 --- a/src/Qiniu/Enum/QiniuEnum.php +++ b/src/Qiniu/Enum/QiniuEnum.php @@ -1,41 +1,53 @@ $cond 匹配条件,只有条件匹配才会设置成功,目前支持:hash、mime、fsize、putTime + * @param int $to_line_after_days 多少天后将文件转为低频存储。 + * 设置为 -1 表示取消已设置的转低频存储的生命周期规则; + * 0 表示不修改转低频生命周期规则。 + * @param int $to_archive_after_days 多少天后将文件转为归档存储。 + * -1 表示取消已设置的转归档存储的生命周期规则; + * 0 表示不修改转归档生命周期规则。 + * @param int $to_deep_archive_after_days 多少天后将文件转为深度归档存储。 + * -1 表示取消已设置的转深度归档存储的生命周期规则; + * 0 表示不修改转深度归档生命周期规则。 + * @param int $delete_after_days 多少天后将文件删除。 + * -1 表示取消已设置的删除存储的生命周期规则; + * 0 表示不修改删除存储的生命周期规则。 + * @param array $cond 匹配条件,只有条件匹配才会设置成功。 + * 目前支持:hash、mime、fsize、putTime * @return array */ public function setObjectLifecycleWithCond( @@ -1124,10 +1145,18 @@ public static function buildBatchDeleteAfterDays($bucket, $key_day_pairs) /** * @param string $bucket 空间名 * @param array $keys 目标资源 - * @param int $to_line_after_days 多少天后将文件转为低频存储,设置为 -1 表示取消已设置的转低频存储的生命周期规则, 0 表示不修改转低频生命周期规则。 - * @param int $to_archive_after_days 多少天后将文件转为归档存储,设置为 -1 表示取消已设置的转归档存储的生命周期规则, 0 表示不修改转归档生命周期规则。 - * @param int $to_deep_archive_after_days 多少天后将文件转为深度归档存储,设置为 -1 表示取消已设置的转深度归档存储的生命周期规则, 0 表示不修改转深度归档生命周期规则。 - * @param int $delete_after_days 多少天后将文件删除,设置为 -1 表示取消已设置的删除存储的生命周期规则, 0 表示不修改删除存储的生命周期规则。 + * @param int $to_line_after_days 多少天后将文件转为低频存储。 + * -1 表示取消已设置的转低频存储的生命周期规则; + * 0 表示不修改转低频生命周期规则。 + * @param int $to_archive_after_days 多少天后将文件转为归档存储。 + * -1 表示取消已设置的转归档存储的生命周期规则; + * 0 表示不修改转归档生命周期规则。 + * @param int $to_deep_archive_after_days 多少天后将文件转为深度归档存储。 + * -1 表示取消已设置的转深度归档存储的生命周期规则; + * 0 表示不修改转深度归档生命周期规则。 + * @param int $delete_after_days 多少天后将文件删除。 + * -1 表示取消已设置的删除存储的生命周期规则; + * 0 表示不修改删除存储的生命周期规则。 * * @retrun array */ diff --git a/src/Qiniu/functions.php b/src/Qiniu/functions.php index 9a768e6f..f8c19042 100644 --- a/src/Qiniu/functions.php +++ b/src/Qiniu/functions.php @@ -278,4 +278,28 @@ function explodeUpToken($upToken) $bucket = $scopeItems[0]; return array($accessKey, $bucket, null); } + + // polyfill ucwords for `php version < 5.4.32` or `5.5.0 <= php version < 5.5.16` + if (version_compare(phpversion(), "5.4.32") < 0 || + ( + version_compare(phpversion(), "5.5.0") >= 0 && + version_compare(phpversion(), "5.5.16") < 0 + ) + ) { + function ucwords($str, $delimiters = " \t\r\n\f\v") + { + $delims = preg_split('//u', $delimiters, -1, PREG_SPLIT_NO_EMPTY); + + foreach ($delims as $delim) { + $str = implode($delim, array_map('ucfirst', explode($delim, $str))); + } + + return $str; + } + } else { + function ucwords($str, $delimiters) + { + return \ucwords($str, $delimiters); + } + } } diff --git a/tests/Qiniu/Tests/AuthTest.php b/tests/Qiniu/Tests/AuthTest.php index bf4387f4..38b6eaed 100755 --- a/tests/Qiniu/Tests/AuthTest.php +++ b/tests/Qiniu/Tests/AuthTest.php @@ -11,12 +11,14 @@ function time() } namespace Qiniu\Tests { + use PHPUnit\Framework\TestCase; + use Qiniu\Auth; use Qiniu\Http\Header; // @codingStandardsIgnoreEnd - class AuthTest extends \PHPUnit_Framework_TestCase + class AuthTest extends TestCase { public function testSign() @@ -65,10 +67,6 @@ public function testUploadToken() unset($_SERVER['override_qiniu_auth_time']); } - public function testVerifyCallback() - { - } - public function testSignQiniuAuthorization() { $auth = new Auth("ak", "sk"); diff --git a/tests/Qiniu/Tests/Base64Test.php b/tests/Qiniu/Tests/Base64Test.php index 6d633530..fed3da07 100755 --- a/tests/Qiniu/Tests/Base64Test.php +++ b/tests/Qiniu/Tests/Base64Test.php @@ -1,9 +1,11 @@ cdnManager = new CdnManager($testAuth); diff --git a/tests/Qiniu/Tests/ConfigTest.php b/tests/Qiniu/Tests/ConfigTest.php index db45637b..c2b229cc 100644 --- a/tests/Qiniu/Tests/ConfigTest.php +++ b/tests/Qiniu/Tests/ConfigTest.php @@ -1,14 +1,20 @@ accessKey = $accessKey; diff --git a/tests/Qiniu/Tests/Crc32Test.php b/tests/Qiniu/Tests/Crc32Test.php index bfb36da8..63e24fd9 100755 --- a/tests/Qiniu/Tests/Crc32Test.php +++ b/tests/Qiniu/Tests/Crc32Test.php @@ -1,9 +1,11 @@ bucketName = $bucketName; diff --git a/tests/Qiniu/Tests/HeaderTest.php b/tests/Qiniu/Tests/HeaderTest.php index 57bc23e6..28af5f3d 100644 --- a/tests/Qiniu/Tests/HeaderTest.php +++ b/tests/Qiniu/Tests/HeaderTest.php @@ -1,9 +1,11 @@ array('200'), diff --git a/tests/Qiniu/Tests/HttpTest.php b/tests/Qiniu/Tests/HttpTest.php index 2342f962..bbd65ca9 100755 --- a/tests/Qiniu/Tests/HttpTest.php +++ b/tests/Qiniu/Tests/HttpTest.php @@ -1,10 +1,12 @@ */ -class ImageUrlBuilderTest extends \PHPUnit_Framework_TestCase +class ImageUrlBuilderTest extends TestCase { /** * 缩略图测试 diff --git a/tests/Qiniu/Tests/PfopTest.php b/tests/Qiniu/Tests/PfopTest.php index d03b3f6e..19bacc00 100755 --- a/tests/Qiniu/Tests/PfopTest.php +++ b/tests/Qiniu/Tests/PfopTest.php @@ -1,10 +1,12 @@ bucketName = $bucketName; @@ -154,7 +162,7 @@ public function testResumeUploadWithParams() $token, $key, $tempFile, - ["x:var_1" => "val_1", "x:var_2" => "val_2", "x-qn-meta-m1" => "val_1", "x-qn-meta-m2" => "val_2"], + array("x:var_1" => "val_1", "x:var_2" => "val_2", "x-qn-meta-m1" => "val_1", "x-qn-meta-m2" => "val_2"), 'application/octet-stream', false, $resumeFile @@ -169,8 +177,9 @@ public function testResumeUploadWithParams() $response = Client::get("http://$domain/$key"); $this->assertEquals(200, $response->statusCode); $this->assertEquals(md5_file($tempFile, true), md5($response->body(), true)); - $this->assertEquals("val_1", $response->headers()["X-Qn-Meta-M1"]); - $this->assertEquals("val_2", $response->headers()["X-Qn-Meta-M2"]); + $headers = $response->headers(); + $this->assertEquals("val_1", $headers["X-Qn-Meta-M1"]); + $this->assertEquals("val_2", $headers["X-Qn-Meta-M2"]); unlink($tempFile); } @@ -227,7 +236,7 @@ public function testResumeUploadV2WithParams() $token, $key, $tempFile, - ["x:var_1" => "val_1", "x:var_2" => "val_2", "x-qn-meta-m1" => "val_1", "x-qn-meta-m2" => "val_2"], + array("x:var_1" => "val_1", "x:var_2" => "val_2", "x-qn-meta-m1" => "val_1", "x-qn-meta-m2" => "val_2"), 'application/octet-stream', false, $resumeFile, @@ -243,8 +252,9 @@ public function testResumeUploadV2WithParams() $response = Client::get("http://$domain/$key"); $this->assertEquals(200, $response->statusCode); $this->assertEquals(md5_file($tempFile, true), md5($response->body(), true)); - $this->assertEquals("val_1", $response->headers()["X-Qn-Meta-M1"]); - $this->assertEquals("val_2", $response->headers()["X-Qn-Meta-M2"]); + $headers = $response->headers(); + $this->assertEquals("val_1", $headers["X-Qn-Meta-M1"]); + $this->assertEquals("val_2", $headers["X-Qn-Meta-M2"]); unlink($tempFile); } diff --git a/tests/Qiniu/Tests/ZoneTest.php b/tests/Qiniu/Tests/ZoneTest.php index 56190ac0..a1ae4591 100755 --- a/tests/Qiniu/Tests/ZoneTest.php +++ b/tests/Qiniu/Tests/ZoneTest.php @@ -1,10 +1,12 @@ bucketName = $bucketName;