概述
- 由于PHP8.0是RC,所以我将尝试使用各种新环境来构建环境。
- 环境本身将使用Docker构建
- 我认为它不能在所有环境中使用,但我希望它会有所帮助。
- 由于PHP8.0和Xdebug3都是RC,因此有必要对其进行开发研究,以便目前不会将其投入实际使用。
最终环境
1 2 3 4 5 6 7 8 9 | $ docker-compose exec app php --version PHP 8.0.0RC4 (cli) (built: Nov 12 2020 20:17:20) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies with Zend OPcache v8.0.0RC4, Copyright (c), by Zend Technologies with Xdebug v3.0.0RC1, Copyright (c) 2002-2020, by Derick Rethans $ docker-compose exec app composer --version Composer version 2.0.7 2020-11-13 17:31:06 |
可交付成果
它在GitHub上列出,因此请参考。
Dockerfile的最终状态也在存储库
中列出
https://github.com/hrs-o/PHP8.0RC-Laravel
PHP7.4时代的Dockerfile
- 主要目的是为8.0RC重写这个7.4时代的Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | FROM php:7.4-fpm-alpine RUN apk upgrade --update && \ apk --no-cache add autoconf build-base git libxml2-dev libzip-dev oniguruma-dev openssh rsync RUN docker-php-ext-install -j$(nproc) zip pdo_mysql mysqli RUN docker-php-ext-install -j$(nproc) bcmath fileinfo ctype json mbstring tokenizer xml RUN docker-php-ext-install -j$(nproc) opcache RUN pecl install apcu \ && docker-php-ext-enable apcu RUN pecl install xdebug \ && docker-php-ext-enable xdebug RUN pecl install redis \ && docker-php-ext-enable redis RUN curl -sS https://getcomposer.org/installer | php \ && mv composer.phar /usr/local/bin/composer \ && composer self-update RUN composer global require hirak/prestissimo RUN composer global require squizlabs/php_codesniffer RUN composer global require friendsofphp/php-cs-fixer RUN composer global require phpmd/phpmd RUN chmod 777 /var/log/ ENV PATH "/root/.composer/vendor/bin:$PATH" |
尝试
将图像更改为8.0-rc-fpm-alpine
当然,它不会通过构建
-
苔藓与
RUN docker-php-ext-install -j$(nproc) json - 无需指定即可使用,因此我简单地省略了它。
- https://wiki.php.net/rfc/always_enable_json
-
似乎pecl当前已从PHP映像中省略,因此无法使用
- https://externals.io/message/103977
- 看来是从PHP7.4起的,但是我曾经在PHP7.4中经历过pecl ...?
- 因此,请考虑使用FriendsOfPHP / pickle而不是pecl。
使用FriendsOfPHP / pickle
- 如果是从发行版本中获得的咸菜,则无法很好地获得Xdebug-beta的VERSION,并且会发生错误。
- 您说过应该建立桅杆,但是不能使用它,因为xdebug的beta版本会导致解析错误。
-
因此,我决定在自己的存储库中以修改后的状态分叉并使用它(PR本身已经发送,希望它会被接受)
- 当前,pickle只能与composer1一起使用,因此请使用Composer 1的映像进行构建,然后将其复制到PHP 8.0。
- 通过将与pecl一起安装的部分更改为pickle,我能够安装apcu,xdebug-beta和redis。
1 2 3 4 5 6 7 8 9 10 11 12 | FROM composer:1 as pickle RUN cd /tmp \ && git clone https://github.com/hrs-o/pickle.git \ && cd pickle \ && git checkout update/dumper-stability \ && composer install --no-dev --optimize-autoloader \ && php -d phar.readonly=0 box.phar build FROM php:8.0-rc-fpm-alpine COPY --from=pickle /tmp/pickle/pickle.phar /usr/local/bin/pickle |
无法安装hirak / prestissimo
-
似乎hirak / prestissimo当前与Composer 2不兼容,因此我放弃了一次。
- 实际上,Composer 2速度很快,因此您不必使用prestissimo!存储库中有描述。
到目前为止,使用
可以完成对Dockerfile的修改,因此我将安装Laravel并检查操作。
Laravel安装
1 2 | $ mkdir src $ docker-compose exec app composer create-project --prefer-dist laravel/laravel . "8.*" |
.env设置
我将尝试连接到DB和Redis,因此将其设置为
.env
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ~~ DB_CONNECTION=mysql DB_HOST=php8-mysql DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=root ~~ REDIS_HOST=php8-redis REDIS_PASSWORD=null REDIS_PORT=6379 ~~ |
迁移执行
1 | $ docker-compose exec app php artisan migrate |
定义并执行View?Controller?Roter
请参阅提交内容
https://github.com/hrs-o/PHP8.0RC-Laravel/commit/69e1aae936ff77b6c165c68f5f39576301c697f8
目前,数据库连接和与Redis的连接似乎运行良好
检查是否可以从IDE
进行远程调试
这次,我们的目标是IntelliJ Idea(PHPStorm)
已修复,因为Xdebug的设置已更改
https://3.xdebug.org/docs/upgrade_guide
php.ini
1 2 3 4 5 6 7 8 9 10 11 12 | [xdebug] - xdebug.remote_enable = 1 + xdebug.mode = debug - xdebug.remote_autostart = 1 + xdebug.start_with_request = yes - xdebug.remote_host = host.docker.internal + xdebug.client_host = host.docker.internal - xdebug.remote_port = 9000 + xdebug.client_port = 9003 - xdebug.remote_log = /tmp/xdebug.log + xdebug.log = /tmp/xdebug.log xdebug.idekey = PHP8 |
XDEBUG端口设置
- 语言能力