服务器运行多个jdk版本_如何在一台服务器上运行多个版本PHP

服务器运行多个jdk版本

In this particular post, we’ll demo a solution to install multiple versions of Phalcon and PHP and run them on a single web server. PHP 5.5.x and 5.6.x will be used here, but you can replace them with other versions. Any servers that support PHP-FPM should be enough but we recommend using Nginx. The environment used in this tutorial is Fedora OS – a Linux system, but the instructions are almost identical for any other *nix OS.

在这篇特别的文章中,我们将演示一种解决方案,以安装多个版本的Phalcon和PHP并在单个Web服务器上运行它们。 这里将使用PHP 5.5.x和5.6.x,但您可以将其替换为其他版本。 任何支持PHP-FPM的服务器都足够,但是我们建议使用Nginx。 本教程中使用的环境是Fedora OS – Linux系统,但是其他* nix OS的说明几乎相同。

初步说明 (Preliminary Note)

This tutorial will cover the installation of PHP 5.5.x with Phalcon 1.3.x and PHP 5.6.x with Phalcon 2.0.0. We’ll also build some additional PHP extensions such as APC, memcache, memcached, and ioncube.

本教程将介绍如何使用Phalcon 1.3.x安装PHP 5.5.x和使用Phalcon 2.0.0安装PHP5.6.x。 我们还将构建一些其他PHP扩展,例如APC,memcache,memcached和ioncube。

安装Nginx (Installing Nginx)

Nginx is an available package in Fedora OS which we can install as follows:

Nginx是Fedora OS中的可用软件包,我们可以按以下方式安装:

sudo yum install nginx

Then, we create the system startup links for Nginx and start it

然后,我们为Nginx创建系统启动链接并启动它

sudo chkconfig nginx on
  sudo service nginx start

构建PHP (Building PHP)

Before starting with PHP, we need to install the prerequisites for building PHP5:

在开始使用PHP之前,我们需要安装构建PHP5的先决条件:

  • gcc or some other compiler suite.

    gcc或其他一些编译器套件。
  • libc-dev, provides the C standard library, including headers.

    libc-dev提供了C标准库,包括头文件。
  • make, which is the build-management tool PHP uses.

    make,这是PHP使用的构建管理工具。
  • autoconf (2.59 or higher) for generating the configure script.

    autoconf(2.59或更高版本),用于生成配置脚本。
  • automake (1.4 or higher), generates Makefile.in files.

    automake(1.4或更高版本),生成Makefile.in文件。
  • libtool, helps us manage shared libraries.

    libtool,帮助我们管理共享库。
  • bison (2.4 or higher), for generating the PHP parser.

    bison(2.4或更高版本),用于生成PHP解析器。
  • (optional) re2c, which is used to generate the PHP lexer. As the git repository already contains a generated lexer you will only need re2c if you wish to make changes to it.

    (可选)re2c,用于生成PHP词法分析器。 由于git存储库已经包含一个生成的词法分析器,因此,如果您希望对其进行更改,则仅需要re2c。

On Centos/Fedora you can install all these with the following command:

在Centos / Fedora上,您可以使用以下命令安装所有这些文件:

sudo yum install gcc libxml2-devel libXpm-devel gmp-devel libicu-devel t1lib-devel aspell-devel openssl-devel bzip2-devel libcurl-devel libjpeg-devel libvpx-devel libpng-devel freetype-devel readline-devel libtidy-devel libxslt-devel libmcrypt-devel pcre-devel curl-devel mysql-devel ncurses-devel gettext-devel net-snmp-devel libevent-devel libtool-ltdl-devel libc-client-devel postgresql-devel bison gcc make

Then we need to get its source code. There are two ways to do this: You can either download an archive from PHP’s download page or clone the git repository from Github.

然后我们需要获取其源代码。 有两种方法可以执行此操作:您可以从PHP的下载页面下载档案,也可以从Github克隆git存储库。

We recommend checking out the source code from git, because it provides you with an easy way to keep your installation up-to-date and to try your code with different versions. A git checkout is also required if you want to submit patches or pull requests for PHP.

我们建议您从git中检出源代码,因为它为您提供了一种使安装保持最新状态并尝试使用不同版本的代码的简便方法。 如果要提交修补程序或请求PHP的请求,还需要git checkout。

To clone the repository, run the following commands in your terminal:

要克隆存储库,请在终端中运行以下命令:

sudo mkdir /opt/source && cd /opt/source
  git clone git@github.com:php/php-src.git && cd php-src

By default you will be on the master branch, so if you want to move to a development version, you need to check out the stable branch. For example.

默认情况下,您将位于master分支上,因此,如果要移至开发版本,则需要签出稳定分支。 例如。

PHP 5.3:  git checkout PHP-5.3
  PHP 5.4:  git checkout PHP-5.4
  PHP 5.6:  git checkout PHP-5.6
  PHP HEAD: git checkout master

Before going to the individual build steps, we must execute some commands for a “default” PHP build. This is only necessary for builds from git.

在进行各个构建步骤之前,我们必须为“默认” PHP构建执行一些命令。 这仅对于从git构建才需要。

sudo ./buildconf

./buildconf generates the configuration script. This may take several minutes.

./buildconf生成配置脚本。 这可能会需要几分钟。

In my opinion, storing the whole web server in a single directory is best, so I use /opt here. Open the terminal and type the following command.

我认为,最好将整个Web服务器存储在一个目录中,所以我在这里使用/opt 。 打开终端,然后键入以下命令。

sudo mkdir -p /opt/php-5.6
  sudo mkdir -p /opt/php-5.5

Once the ./configure script is generated via the step above, you can use it to customize your PHP build. You can list all supported options using –help:

通过上述步骤生成./configure脚本后,您可以使用它来自定义PHP构建。 您可以使用–help列出所有受支持的选项:

./configure --help

The command above will list various generic options, which are supported by all autoconf-based configuration scripts. One of them is already mentioned –prefix=DIR, which changes the installation directory used by make install. Another useful option is -C, which will cache the result of various tests in the config.cache file and speed up subsequent ./configure calls. Using this option only makes sense once you already have a working build and want to quickly change between different configurations.

上面的命令将列出各种通用选项,所有基于autoconf的配置脚本均支持这些选项。 已经提到了其中之一–prefix = DIR,它更改了make install使用的安装目录。 另一个有用的选项是-C,它将各种测试的结果缓存在config.cache文件中,并加快随后的./configure调用。 仅当您已经具有可用的构建并且要在不同配置之间快速更改时,才使用此选项才有意义。

Here are some useful settings:

以下是一些有用的设置:

[...]

  Usage: ./configure [OPTION]... [VAR=VALUE]...

  To assign environment variables (e.g., CC, CFLAGS...), specify them as
  VAR=VALUE.  See below for descriptions of some of the useful variables.

  Defaults for the options are specified in brackets.

  Configuration:
    -h, --help              display this help and exit
        --help=short        display options specific to this package
        --help=recursive    display the short help of all the included packages
    -V, --version           display version information and exit
    -q, --quiet, --silent   do not print `checking ...' messages
        --cache-file=FILE   cache test results in FILE [disabled]
    -C, --config-cache      alias for `--cache-file=config.cache'
    -n, --no-create         do not create output files
        --srcdir=DIR        find the sources in DIR [configure dir or `..']

  Installation directories:
    --prefix=PREFIX         install architecture-independent files in PREFIX
                            [/usr/local]
    --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                            [PREFIX]

  By default, `make install' will install all the files in
  `/usr/local/bin', `/usr/local/lib' etc.  You can specify
  an installation prefix other than `/usr/local' using `--prefix',
  for instance `--prefix=$HOME'.

  For better control, use the options below.

  Fine tuning of the installation directories:
    --bindir=DIR            user executables [EPREFIX/bin]
    --sbindir=DIR           system admin executables [EPREFIX/sbin]
    --libexecdir=DIR        program executables [EPREFIX/libexec]
    --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
    --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
    --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
    --libdir=DIR            object code libraries [EPREFIX/lib]
    --includedir=DIR        C header files [PREFIX/include]
    --oldincludedir=DIR     C header files for non-gcc [/usr/include]
    --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
    --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
    --infodir=DIR           info documentation [DATAROOTDIR/info]
    --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
    --mandir=DIR            man documentation [DATAROOTDIR/man]
    --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
    --htmldir=DIR           html documentation [DOCDIR]
    --dvidir=DIR            dvi documentation [DOCDIR]
    --pdfdir=DIR            pdf documentation [DOCDIR]
    --psdir=DIR             ps documentation [DOCDIR]
 
  [...]

After finishing the preparation we install the PHP version 5.6. Run the following:

完成准备工作后,我们将安装PHP版本5.6。 运行以下命令:

./configure \
--prefix=/opt/php-5.6 \
--with-pdo-pgsql \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-soap \
--enable-calendar \
--with-curl \
--with-mcrypt \
--with-zlib \
--with-gd \
--with-pgsql \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-libdir=lib64 \
--enable-ftp \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--with-gettext \
--with-gd \
--with-jpeg-dir=/usr/lib/
--enable-fpm

The last switch (–enable-fpm) makes this PHP version work with PHP-FPM. If you want to use this PHP-FPM version with Apache, please use --with-fpm-user=apache and --with-fpm-group=apache. On the other hand, if you want to use this PHP-FPM version with nginx, please use --with-fpm-user=nginx and --with-fpm-group=nginx.

最后一个开关(–enable-fpm)使此PHP版本与PHP-FPM一起使用。 如果要将此PHP-FPM版本与Apache一起使用,请使用--with-fpm-user=apache--with-fpm-group=apache 。 另一方面,如果要将此PHP-FPM版本与nginx一起使用,请使用--with-fpm-user=nginx--with-fpm-group=nginx

A successful message should be printed in the terminal like so:

像这样在终端中应该打印一条成功的消息:

[...]

creating libtool
appending configuration tag "CXX" to libtool

Generating files
configure: creating ./config.status
creating main/internal_functions.c
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.

config.status: creating php5.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/fpm/php-fpm.conf
config.status: creating sapi/fpm/init.d.php-fpm
config.status: creating sapi/fpm/php-fpm.service
config.status: creating sapi/fpm/php-fpm.8
config.status: creating sapi/fpm/status.html
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands

Now, you can use make to perform the actual compilation:

现在,您可以使用make执行实际的编译:

make

The main result of this operation will be PHP binaries for the enabled SAPIs (by default sapi/cli/php and sapi/cgi/php-cgi), as well as shared extensions in the modules/ directory.

该操作的主要结果将是启用的SAPIPHP二进制文件(默认情况下为sapi / cli / php和sapi / cgi / php-cgi),以及modules /目录中的共享扩展。

Now you can run “make install” to install PHP into /usr/local (default) or other directories by using the --prefix configuration. In this case it’s /opt/php-5.6

现在,您可以运行“ make install”,以使用--prefix配置将PHP安装到/ usr / local(默认)或其他目录中。 在这种情况下,它是/opt/php-5.6

sudo make install

Please note that make install will not create an ini file.

请注意, make install不会创建ini文件。

/opt/php-5.6/bin/php --ini
Configuration File (php.ini) Path: /opt/php-5.6/lib
Loaded Configuration File:         (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

Copy php.ini and php-fpm.conf to the correct directory:

将php.ini和php-fpm.conf复制到正确的目录:

sudo cp /opt/source/php-src/php-fpm.conf.default /opt/php-5.6/etc/php-fpm.conf
sudo cp /opt/source/php-src/php.ini-production /opt/php-5.6/lib/php.ini

We verify and check the php version one more time.

我们再次验证并检查php版本。

/opt/php-5.6/bin/php --ini
  Configuration File (php.ini) Path: /opt/php-5.6/lib
  Loaded Configuration File:         /opt/php-5.6/lib/php.ini
  Scan for additional .ini files in: (none)
  Additional .ini files parsed:      (none)

  ### Checking php
  /opt/php-5.6/bin/php --version
  PHP 5.6.2-dev (cli) (built: Oct  2 2014 17:20:23) 
  Copyright (c) 1997-2014 The PHP Group
  Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies

Open /opt/php-5.6/etc/php-fpm.conf and adjust the settings in the listen line. You must change to an unused port (e.g. 9001; the port 9000 might be in use by Fedora)

打开/opt/php-5.6/etc/php-fpm.conf并在侦听行中调整设置。 您必须更改为未使用的端口(例如9001; Fedora可能正在使用端口9000)

vi /opt/php-5.6/etc/php-fpm.conf
[...]
  pid = run/php-fpm.pid
  [...]
  user = nginx
  group = nginx
  [...]
  listen = 127.0.0.1:9001
  [...]
  #include=/opt/php-5.6/etc/pool.d/*.conf

初始化脚本设置 (Init script setup)

You will probably want to create an init script for your new php-fpm. Luckily, PHP 5.3+ already provides it for you, simply copy the init script to your directory and change permissions:

您可能需要为新的php-fpm创建一个初始化脚本。 幸运的是,PHP 5.3+已经为您提供了它,只需将init脚本复制到您的目录中并更改权限:

sudo cp /opt/source/php-src/sapi/fpm/init.d.php-fpm /etc/init.d/php5.6-fpm
  sudo chmod 755 /etc/init.d/php5.6-fpm

Your init script is ready. Now, you are able to start, stop and reload php-fpm:

您的初始化脚本已准备就绪。 现在,您可以启动,停止和重新加载php-fpm了:

sudo /etc/init.d/php5.6-fpm start
  sudo /etc/init.d/php5.6-fpm stop
  sudo /etc/init.d/php5.6-fpm reload

构建第二个PHP(5.5.x) (Building the second PHP (5.5.x))

We open up the terminal and type the following command.

我们打开终端并输入以下命令。

git checkout PHP-5.5
sudo ./buildconf 
./configure \
--prefix=/opt/php-5.5 \
--with-pdo-pgsql \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-soap \
--enable-calendar \
--with-curl \
--with-mcrypt \
--with-zlib \
--with-gd \
--with-pgsql \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-libdir=lib64 \
--enable-ftp \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--with-gettext \
--with-gd \
--with-jpeg-dir=/usr/lib/ \
--enable-fpm

make && sudo make install

构建PHP Phalcon扩展 (Building PHP Phalcon extensions)

To install multiple versions of Phalcon including Phalcon 2.0, we need to install Zephir

要安装包括Phalcon 2.0在内的Phalcon的多个版本,我们需要安装Zephir

git clone https://github.com/json-c/json-c.git
  cd json-c
  sh autogen.sh
  ./configure
  make && sudo make install
   
  git clone https://github.com/phalcon/zephir
  cd zephir
  sudo ./install -c

There are many ways to install PHP extensions. We will use phpize build it.

有许多安装PHP扩展的方法。 我们将使用phpize构建它。

Phpize plays a similar role as the ./buildconf script used for PHP builds: first, it will import the PHP build system into your extension by copying files from $PREFIX/lib/php/build. Among these files are acinclude.m4 (PHP’s M4 macros), phpize.m4 (which will be renamed to configure.in in your extension and contains the main build instructions) and run-tests.php.

Phpize与用于PHP构建的./buildconf脚本具有相似的作用:首先,它将通过从$PREFIX/lib/php/build复制文件将PHP构建系统导入您的扩展程序。 这些文件中包括acinclude.m4 (PHP的M4宏), phpize.m4 (将在您的扩展名中重命名为configure.in并包含主要的构建说明)和run-tests.php

Then, phpize will invoke autoconf to generate a ./configure file, which can be used to customize the extension build. Such as installation memcached you must adding --enable-memcache .

然后,phpize将调用autoconf生成一个./configure文件,该文件可用于自定义扩展版本。 如安装memcached,则必须添加--enable-memcache

Remember! You must specify the --with-php-config option when building the extensions (unless you have only a single, global installation of PHP). Otherwise ./configure will not be able to determine the PHP version and flags correctly. Furthermore, the php-config script also ensures that the “make install” command will move the generated *.so file to the right extension directory.

记得! 构建扩展时,必须指定--with-php-config选项(除非只有一个全局PHP安装)。 否则./configure将无法正确确定PHP版本和标志。 此外,php-config脚本还确保“ make install”命令会将生成的*.so文件移动到正确的扩展目录。

构建第一个PHP Phalcon(2.0) (Building the first PHP Phalcon (2.0))

git clone http://github.com/phalcon/cphalcon
  cd cphalcon && git checkout 2.0.0
  zephir compile
  cd ext && /opt/php-5.6/bin/phpize
  ./configure --with-php-config=/opt/php-5.6/bin/php-config
  make && sudo make install
  Installing shared extensions:     /opt/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/

Please check whether or not it is successful

请检查是否成功

ls /opt/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/

After the extension is installed. You still need to activate it by including it in php.ini file.

安装扩展程序之后。 您仍然需要通过将其包含在php.ini文件中来激活它。

sudo su
  echo "extension=phalcon.so" >> /opt/php-5.6/lib/php.ini
  exit

构建第二个PHP Phalcon(1.3.x) (Building the second PHP Phalcon (1.3.x))

git clone http://github.com/phalcon/cphalcon
  cd cphalcon && git checkout master
  cd ext && /opt/php-5.5/bin/phpize
  ./configure --with-php-config=/opt/php-5.5/bin/php-config
  make && sudo make install
  Installing shared extensions:     /opt/php-5.5/lib/php/extensions/no-debug-non-zts-20121212/

We check again to make sure the installation is successful

我们再次检查以确保安装成功

ls /opt/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/
  sudo su
  echo "extension=phalcon.so" >> /opt/php-5.5/lib/php.ini
  exit

配置Nginx (Configuring Nginx)

sudo vi /etc/nginx/nginx.conf

The following configuration will create two servers: the phalcon-prd.localhost runs on PHP 5.5.x and phalcon-dev.localhost works with PHP 5.6.x. This is an example, you can customize it to anything you want, see Nginx documentation

以下配置将创建两个服务器:phalcon-prd.localhost在PHP 5.5.x上运行,phalcon-dev.localhost在PHP 5.6.x上运行。 这是一个示例,您可以根据需要对其进行自定义, 请参见Nginx文档。

[...]
http {
  include       mime.types;
  default_type  application/octet-stream;
  sendfile        on;
  keepalive_timeout  65;
  #gzip  on;
  include /etc/nginx/conf.d/*.conf;

  index index.php index.html index.htm;

  #Prodution environment Phalcon
  server {
    listen       80;
    server_name  phalcon-prd.localhost;

    root   /usr/share/nginx/html/phalcon-prd;

    location / {
      index  index.php;
    }

    location ~ \.php$ {
      fastcgi_pass   127.0.0.1:9001;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include        fastcgi_params;
    }
  }
  #Development environment Phalcon
  server {
    listen       80;
    server_name  phalcon-dev.localhost;

    root   /usr/share/nginx/html/phalcon-prd;

    location / {
      index  index.php;
    }

    location ~ \.php$ {
      fastcgi_pass   127.0.0.1:9002;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include        fastcgi_params;
    }
  }
}
[...]

设置本地主机文件 (Set Up Local Hosts File)

If you are using a Linux system, you can edit the host file:

如果您使用的是Linux系统,则可以编辑主机文件:

sudo vi /etc/hosts

The new host file will look like.

新的主机文件将如下所示。

[...]
127.0.0 localhost phalcon-dev.localhost phalcon-prd.localhost
::1   localhost6.localdomain6 localhost6
[...]

This one intercepts all requests for phalcon-dev.localhost and phalcon-prd.localhost then sends them to your server.

这将拦截对phalcon-dev.localhostphalcon-prd.localhost所有请求,然后将它们发送到您的服务器。

测试它 (Testing it)

For testing, we create a new file called test.php and put it into folder corresponding to the above configuration of Nginx. In each file, we add the following command.

为了进行测试,我们创建了一个名为test.php的新文件,并将其放入与上述Nginx配置相对应的文件夹中。 在每个文件中,我们添加以下命令。

<?php phpinfo(); ?>

Now, running the test.php file in each server, we see a Phalcon 1.3.x phpinfo() at http://phancon-prd.localhost/test.php while at http://phancon-dev.localhost/test.php there should be phpinfo() of Phalcon 2.0.x.

现在,在每台服务器上运行test.php文件,我们在http://phancon-prd.localhost/test.php上看到了Phalcon 1.3.x phpinfo() ,而在http://phancon-dev.localhost/test上看到了。 php应该有Phalcon 2.0.x的phpinfo()

alt

结论 (In conclusion)

In this tutorial, we’ve learned how we can easily have multiple actively running versions of PHP on our server, each with its own set of different extensions if necessary. This can come in handy if you’re doing shared hosting, or if you need to support ancient legacy apps while being able to develop and deploy on cutting edge versions, for example.

在本教程中,我们学习了如何在服务器上轻松地拥有多个正在运行PHP版本,每个版本都有自己的一组不同扩展名(如有必要)。 例如,如果您要进行共享托管,或者需要支持古老的旧版应用程序,同时又能够在最先进的版本上进行开发和部署,则此方法会派上用场。

Leave your feedback in the comments below and, as always, please share this article if you liked it!

将您的反馈留在下面的评论中,和往常一样,如果您喜欢它,请分享这篇文章!

翻译自: https://www.sitepoint.com/run-multiple-versions-php-one-server/

服务器运行多个jdk版本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值