diff --git a/.github/workflows/build-release-artifacts.yml b/.github/workflows/build-release-artifacts.yml
index d95e7d04..7f746675 100644
--- a/.github/workflows/build-release-artifacts.yml
+++ b/.github/workflows/build-release-artifacts.yml
@@ -19,7 +19,7 @@ jobs:
- name: Setup PHP
uses: sunxyw/workflows/setup-environment@main
with:
- php-version: 8.0
+ php-version: 8.1
php-extensions: swoole, posix, json
operating-system: ubuntu-latest
use-cache: true
diff --git a/.github/workflows/coding-style.yml b/.github/workflows/coding-style.yml
index 9847a787..4add0e61 100644
--- a/.github/workflows/coding-style.yml
+++ b/.github/workflows/coding-style.yml
@@ -34,7 +34,7 @@ jobs:
- name: Setup PHP
uses: sunxyw/workflows/setup-environment@main
with:
- php-version: 8.0
+ php-version: 8.1
php-extensions: swoole, posix, json
operating-system: ubuntu-latest
use-cache: true
diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml
index 0b813362..617c691d 100644
--- a/.github/workflows/static-analysis.yml
+++ b/.github/workflows/static-analysis.yml
@@ -34,7 +34,7 @@ jobs:
- name: Setup PHP
uses: sunxyw/workflows/setup-environment@main
with:
- php-version: 8.0
+ php-version: 8.1
php-extensions: swoole, posix, json
operating-system: ubuntu-latest
use-cache: true
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index ed09c156..d251b00f 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -33,7 +33,7 @@ jobs:
strategy:
matrix:
operating-system: [ ubuntu-latest, windows-latest, macos-latest ]
- php-version: [ 8.0, 8.1, 8.2 ]
+ php-version: [ 8.1, 8.2, 8.3, 8.4 ]
name: PHP ${{ matrix.php-version }} Test (${{ matrix.operating-system }})
runs-on: ${{ matrix.operating-system }}
timeout-minutes: 10
diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php
index 6dda3026..2f6ab9e3 100644
--- a/.php-cs-fixer.php
+++ b/.php-cs-fixer.php
@@ -68,6 +68,8 @@ return (new PhpCsFixer\Config())
'php_unit_test_class_requires_covers' => false,
'fully_qualified_strict_types' => false,
'new_with_parentheses' => false,
+ 'operator_linebreak' => false,
+ 'php_unit_data_provider_method_order' => false,
])
->setFinder(
PhpCsFixer\Finder::create()
diff --git a/composer.json b/composer.json
index 021b2da5..bca05730 100644
--- a/composer.json
+++ b/composer.json
@@ -39,7 +39,7 @@
"jangregor/phpstan-prophecy": "^1.0",
"jetbrains/phpstorm-attributes": "^1.0",
"mikey179/vfsstream": "^1.6",
- "phpspec/prophecy-phpunit": "^2.0",
+ "phpspec/prophecy-phpunit": "^2.3",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan": "^1.1",
"phpstan/phpstan-deprecation-rules": "^1.0",
@@ -99,7 +99,7 @@
},
"scripts": {
"analyse": "phpstan analyse --memory-limit 300M",
- "cs-fix": "PHP_CS_FIXER_FUTURE_MODE=1 php-cs-fixer fix",
+ "cs-fix": "PHP_CS_FIXER_IGNORE_ENV=1 php-cs-fixer fix",
"test": "bin/phpunit-zm --no-coverage"
}
}
diff --git a/docs/.vuepress/public/doxy/class_z_m_1_1_framework.html b/docs/.vuepress/public/doxy/class_z_m_1_1_framework.html
index 980b65e3..60e9a3a2 100755
--- a/docs/.vuepress/public/doxy/class_z_m_1_1_framework.html
+++ b/docs/.vuepress/public/doxy/class_z_m_1_1_framework.html
@@ -131,7 +131,7 @@ Public 成员函数
|
-| const | VERSION_ID = 724 |
+| const | VERSION_ID = 725 |
| |
| const | VERSION = '3.2.4' |
| |
@@ -522,7 +522,7 @@ Protected 属性
- | const VERSION_ID = 724 |
+ const VERSION_ID = 725 |
diff --git a/src/ZM/Bootstrap/HandleExceptions.php b/src/ZM/Bootstrap/HandleExceptions.php
index 2e4fcec1..425f87ad 100644
--- a/src/ZM/Bootstrap/HandleExceptions.php
+++ b/src/ZM/Bootstrap/HandleExceptions.php
@@ -20,7 +20,6 @@ class HandleExceptions implements Bootstrapper
E_USER_ERROR => ['PHP Error: ', 'error'],
E_USER_WARNING => ['PHP Warning: ', 'warning'],
E_USER_NOTICE => ['PHP Notice: ', 'notice'],
- E_STRICT => ['PHP Strict: ', 'notice'],
E_RECOVERABLE_ERROR => ['PHP Recoverable Error: ', 'error'],
E_DEPRECATED => ['PHP Deprecated: ', 'notice'],
E_USER_DEPRECATED => ['PHP User Deprecated: ', 'notice'],
@@ -30,7 +29,7 @@ class HandleExceptions implements Bootstrapper
logger()->{$level_tip[1]}($error);
// 如果 return false 则错误会继续递交给 PHP 标准错误处理
return true;
- }, E_ALL | E_STRICT);
+ });
// 重载异常处理器
ExceptionHandler::getInstance()->overrideWith(new Handler());
diff --git a/src/ZM/Command/ProxyServerCommand.php b/src/ZM/Command/ProxyServerCommand.php
index 164cd878..f42cee45 100644
--- a/src/ZM/Command/ProxyServerCommand.php
+++ b/src/ZM/Command/ProxyServerCommand.php
@@ -262,7 +262,6 @@ class ProxyServerCommand extends Command
break;
case CMD_UDP_ASSOCIATE:
$connection->stage = STAGE_UDP_ASSOC;
- var_dump('CMD_UDP_ASSOCIATE ' . ($this->config['udp_port'] ?? 2222));
if ($this->config['udp_port'] == 0) {
$connection->udpWorker = new Worker('udp://0.0.0.0:0');
/* @phpstan-ignore-next-line */
@@ -274,7 +273,7 @@ class ProxyServerCommand extends Command
$listenInfo = stream_socket_get_name($connection->udpWorker->getMainSocket(), false);
[$bind_addr, $bind_port] = explode(':', $listenInfo);
} else {
- $bind_port = $this->config['udp_port'] ?? 2222;
+ $bind_port = $this->config['udp_port'];
}
$bind_addr = $this->config['wanIP'] ?? '192.168.1.1';
diff --git a/src/ZM/ConsoleApplication.php b/src/ZM/ConsoleApplication.php
index 9c0a6308..8e632127 100644
--- a/src/ZM/ConsoleApplication.php
+++ b/src/ZM/ConsoleApplication.php
@@ -32,7 +32,11 @@ final class ConsoleApplication extends Application
// 初始化 Composer 变量
if (file_exists(WORKING_DIR . '/runtime/composer.phar')) {
echo '* Using native composer' . PHP_EOL;
- putenv('COMPOSER_EXECUTABLE=' . WORKING_DIR . '/runtime/composer.phar');
+ if (WORKING_DIR . '/runtime/php' === PHP_BINARY) {
+ putenv('COMPOSER_EXECUTABLE="' . WORKING_DIR . '/runtime/php ' . WORKING_DIR . '/runtime/composer.phar"');
+ } else {
+ putenv('COMPOSER_EXECUTABLE="' . WORKING_DIR . '/runtime/composer.phar"');
+ }
}
$this->registerCommandLoader();
diff --git a/src/ZM/Framework.php b/src/ZM/Framework.php
index 3cfa09a3..f3903cf7 100644
--- a/src/ZM/Framework.php
+++ b/src/ZM/Framework.php
@@ -47,7 +47,7 @@ class Framework
use Singleton;
/** @var int 版本ID */
- public const VERSION_ID = 725;
+ public const VERSION_ID = 726;
/** @var string 版本名称 */
public const VERSION = '3.2.4';
diff --git a/tests/ZM/Event/EventProviderTest.php b/tests/ZM/Event/EventProviderTest.php
index 28157a3b..ff3bd089 100644
--- a/tests/ZM/Event/EventProviderTest.php
+++ b/tests/ZM/Event/EventProviderTest.php
@@ -49,6 +49,9 @@ class EventProviderTest extends TestCase
public function testAddEventListenerWithCallableArray(): void
{
+ if (PHP_VERSION_ID >= 80400) {
+ $this->markTestSkipped('PHP 8.4.0 has a bug that cannot pass this test');
+ }
// no meaning for using ZMUtil, just for testing
$event = new ZMUtil();
$callback = [$this, 'testAddEventListenerWithCallableArray'];