如何在运行Amazon Linux Distro的EC2 t2.micro实例上安装PHP 7

Rah*_*ate 37 linux amazon-ec2 installation-package amazon-web-services

我想在AWS EC2 T2.Micro实例上安装最新的PHP 7.0.到目前为止,我已经读到目前AWS不支持PHP 7.但是嘿..这只是云中的虚拟服务器,我可以完全控制其配置,所以必须有一些方法让PHP 7在这个上运行一.

任何帮助非常感谢.

我的方框如下

$ cat /etc/*-release
---------------------------------------
NAME="Amazon Linux AMI"
VERSION="2015.09"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2015.09"
PRETTY_NAME="Amazon Linux AMI 2015.09"
ANSI_COLOR="0;33"
CPE_NAME="[*not significant*]"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Amazon Linux AMI release 2015.09

$ uname -a
---------------------------------------
Linux ip-xxx-xxx-xxx-xxx 4.1.13-18.26.amzn1.x86_64 #1 [date] x86_64 x86_64 x86_64 GNU/Linux

$ uname -mrs
---------------------------------------
Linux 4.1.13-18.26.amzn1.x86_64 x86_64

$ cat /proc/version
---------------------------------------
Linux version 4.1.13-18.26.amzn1.x86_64 (mockbuild@gobi-build-64010) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) )
Run Code Online (Sandbox Code Playgroud)

Joh*_*rra 69

你现在可以使用官方的php7包.这是一个易于遵循的指南.

1.在Amazon Linux AMI上安装Apache 2.4和PHP 7.0

# Remove current apache & php 
sudo yum remove httpd* php*

# Install Apache 2.4
sudo yum install httpd24

# Install PHP 7.0 
# automatically includes php70-cli php70-common php70-json php70-process php70-xml
sudo yum install php70

# Install additional commonly used php packages
sudo yum install php70-gd
sudo yum install php70-imap
sudo yum install php70-mbstring
sudo yum install php70-mysqlnd
sudo yum install php70-opcache
sudo yum install php70-pdo
sudo yum install php70-pecl-apcu
Run Code Online (Sandbox Code Playgroud)

2.修改DirectoryIndex以包含index.php

sudo nano /etc/httpd/conf/httpd.conf
Run Code Online (Sandbox Code Playgroud)

找到这个:

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
Run Code Online (Sandbox Code Playgroud)

并将其修改为如下所示:

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>
Run Code Online (Sandbox Code Playgroud)

如果目录包含index.html和index.php,则服务器将使用此设置为index.html提供服务.如果您不希望这种情况发生,您有以下选择:

反转顺序,因此当两个文件都存在时,会提供index.php:

 <IfModule dir_module>
    DirectoryIndex index.php index.html
 </IfModule>
Run Code Online (Sandbox Code Playgroud)

仅使用index.php作为DirectoryIndex:

<IfModule dir_module>
    DirectoryIndex index.php
</IfModule>
Run Code Online (Sandbox Code Playgroud)

3.启动Apache Web服务器

sudo service httpd start
Run Code Online (Sandbox Code Playgroud)

4.将Apache Web服务器配置为在每次系统引导时启动

sudo chkconfig httpd on
Run Code Online (Sandbox Code Playgroud)

5.测试您的安装

创建phpinfo.php:

echo '<?php print phpinfo();' | sudo tee --append /var/www/html/phpinfo.php
Run Code Online (Sandbox Code Playgroud)

打开浏览器并在地址栏中输入实例的公共IP,然后输入/phpinfo.php

Example: http://xxx.xxx.xxx.xxx/phpinfo.php
Run Code Online (Sandbox Code Playgroud)

注意:不要忘记允许实例的安全组中的HTTP(端口80)的传入连接,否则您的请求将超时.

  • 不,只有在PHP代码之后添加更多html代码时才需要`?>`.我永远不会结束包含带有`?>`的php的文件的一个原因是它不会在最终的html中添加意外的空行. (8认同)
  • 很棒。仅供参考,您现在可以使用php71。 (2认同)

小智 34

我在我的实例上运行了这个.你需要http2.2才能使用webtatic repo.我有这么多的回购,有一堆不同版本的不兼容性.我没有留下好记,但看着我的历史,我基本上做了这个:

# Remove current php & apache
sudo service httpd stop
sudo yum remove httpd* php* 

# Remove any third party repos that aren't relevant
sudo yum repolist
sudo yum remove remi-safe

# Install Standard Apache for Amazon AMI
sudo yum install httpd   #specify http22 if you get a different version

# Download webtatic
mkdir -p /tmp/php7
cd /tmp/php7
wget https://mirror.webtatic.com/yum/el6/latest.rpm

# Install webtatic repo
sudo yum install latest.rpm
sudo vi /etc/yum.repos.d/webtatic.repo  'set repo enables
sudo yum clean all

# Install base php7
sudo yum install --enablerepo=webtatic php70w
php -v   #Should say something like  PHP 7.0.2 (cli) (built: Jan  9 2016 16:09:32) ( NTS )
sudo yum install php70w-opcache
sudo yum install php70w-xml
sudo yum install php70w-pdo
sudo yum install php70w-mysqlnd
sudo yum install php70w-gd
sudo yum install php70w-apcu
sudo yum install php70w-pecl-apcu
sudo yum install php70w-mbstring
sudo yum install php70w-imap

# Restart apache
sudo service httpd restart
Run Code Online (Sandbox Code Playgroud)


lam*_*ier 22

问题的当前答案(不是原始版本的问题) - 值得知道,因为这有点简单,并且php7在Amazon Linux 2的标准存储库中不可用,并且直到我更难搜索才出现这个问题:

amazon-linux-extras install php7.2
Run Code Online (Sandbox Code Playgroud)

如果v7.2不再是最新的,可以使用list命令检查额外版本:

amazon-linux-extras list
Run Code Online (Sandbox Code Playgroud)


Hap*_*ude 13

截至2016年7月14日,aws linux现已有官方php7软件包.请参阅https://forums.aws.amazon.com/ann.jspa?annID=3902上的公告

要列出可用的包,请运行yum list php70*


Dun*_*rds 9

我在已经有apache 2.4和PHP 5.5的生产盒上安装了PHP 7.0.我希望以一种没有服务器中断的方式安装PHP 7.0.这就是我做的.

# Install PHP 7.0 
# automatically includes php70-cli php70-common php70-json php70-process php70-xml
sudo yum install php70

# Install additional commonly used php packages
sudo yum install php70-gd
sudo yum install php70-imap
sudo yum install php70-mbstring
sudo yum install php70-mysqlnd
sudo yum install php70-opcache
sudo yum install php70-pecl-apcu
Run Code Online (Sandbox Code Playgroud)

这很好地安装了PHP 7和PHP 5.5.诀窍是告诉apache使用7.0.我不确定这是否是最好的方式,但我通过改变这两个永久链接来实现这一目标:

ln -sf /etc/httpd/conf.d/php-conf.7.0 /etc/alternatives/php.conf
ln -sf /etc/httpd/conf.modules.d/15-php-conf.7.0 /etc/alternatives/10-php.conf
Run Code Online (Sandbox Code Playgroud)

在这一点上,apache仍然很乐意运行5.5.然后当你重新启动apache时,它应该使用7.0(可能是7.0.1).这是没有停机的方式.我仍然建议做我做的,即在另一个实例上重建PROD(创建一个TEST服务器)并在实际上在PROD上执行之前测试一次.祝好运!

哦,现在php命令仍然会运行5.5.您可以更改任何脚本或CRON作业以指向php7或通过运行更改默认版本

alternatives --config php
Run Code Online (Sandbox Code Playgroud)


Fuz*_*ree 8

其他答案似乎只适用于Apache 2.2但不适用于2.4.

以下是我在运行Apache 2.4的Amazon Linux上安装php7的方法:

首先,如果已安装php,则将其删除:

sudo yum remove php5*
Run Code Online (Sandbox Code Playgroud)

记下要删除的php5软件包,因为你需要安装它们的php7版本.php7软件包的名称与php5对应软件有一个相当直接和明确的映射,如下所示.其余说明涵盖了经典的LAMP堆栈,可能足以满足您的使用需求.

使用http://www.spidersoft.com.au/2015/php-7-on-ami-linux-ec2/上的说明

wget http://mirrors.mediatemple.net/remi/enterprise/remi-release-6.rpm
sudo yum install remi-release-6.rpm
Run Code Online (Sandbox Code Playgroud)

编辑/etc/yum.repos.d/epel.repo和设置enabled=1

sudo yum upgrade -y
sudo yum install php70 php70-php-fpm php70-php-xml php70-php-pdo php70-php-mysqlnd php70-php-gd php70-php-pecl-apcu php70-php-mbstring php70-php-mcrypt php70-php-opcache
Run Code Online (Sandbox Code Playgroud)

现在你应该安装php70-php-fpm,你可以和apache一起使用:

启动fpm守护进程:

sudo service php70-php-fpm start
Run Code Online (Sandbox Code Playgroud)

将Apache从prefork切换到mpm事件工作者(这是必需的,因为mod_php不是线程安全的)/etc/httpd/conf.modules.d/00-mpm.conf:

LoadModule mpm_event_module modules/mod_mpm_event.so
Run Code Online (Sandbox Code Playgroud)

通过添加以下行指示apache将所有php请求传递给php-fpm /etc/httpd/conf/httpd.conf

<FilesMatch \.php$>
         SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
DirectoryIndex /index.php index.php
Run Code Online (Sandbox Code Playgroud)

使用重启apache sudo service httpd restart.如果一切顺利,您应该能够通过请求包含的php文件来验证安装phpinfo().

如果您有现有的shell脚本使用php的cli解释器并因此开始#!/usr/bin/php,则必须设置符号链接,/usr/bin/php因为二进制文件现在已命名/usr/bin/php70.你可以这样做:

sudo ln -s /usr/bin/php70 /usr/bin/php
Run Code Online (Sandbox Code Playgroud)

有关如何配置php-fpm的更多信息,请参阅https://wiki.apache.org/httpd/PHP-FPM


Sid*_*rma 1

php 7 软件包名称是php70w。所以你可以做的是,在你的 Linux 机器上安装一个 Webtatic 存储库并从那里安装它。

rpm -ivh https://mirror.webtatic.com/yum/el6/latest.rpm
yum clean all
yum install --enablerepo=webtatic php70w
Run Code Online (Sandbox Code Playgroud)

  • 我试过那个。它给了我这个... --&gt; 完成依赖项解析错误:软件包:php70w-7.0.2-1.w7.x86_64 (webtatic) 需要:httpd-mmn = 20120211x8664 安装:httpd-2.2.31-1.6.amzn1。 x86_64 (@amzn-main) httpd-mmn = 20051115 可用:httpd24-2.4.16-1.62.amzn1.x86_64 (amzn-main) httpd-mmn = 20120211x86-64 httpd-mmn = 20120211 可用:httpd24-2.4.16- 1.63.amzn1.x86_64(amzn 更新)httpd-mmn = 20120211x86-64 httpd-mmn = 20120211 (2认同)