php怎么安装_在虚拟机中搭建PHP开发环境的教程

在虚拟机中搭建PHP开发环境,本质是通过LAMP/LEMP栈实现隔离、可控的开发沙盒。答案是:选择Ubuntu Server 22.04等Linux系统,在VirtualBox或VMware中创建虚拟机,分配足够资源并安装OpenSSH;随后更新系统,依次安装Apache(或Nginx)、MariaDB、PHP及常用扩展(如php-mysql、php-mbstring等),并通过info.php测试PHP解析;配置UFW防火墙开放SSH和Web服务端口。推荐使用虚拟机的核心在于环境隔离,避免宿主机污染,支持多版本共存与快照恢复,提升团队环境一致性。常见问题包括权限不足(需chown www-data)、PHP扩展缺失(用php -m检查)、数据库连接失败(确认服务运行与用户权限)及虚拟主机配置错误(正确设置DocumentRoot并启用站点)。优化体验可通过共享文件夹(宿主机编辑代码、虚拟机运行)、安装Xdebug实现断点调试、部署Composer管理依赖、使用DBeaver等工具远程管理数据库,并结合Git进行版本控制,全面提升开发效率与安全性。

php怎么安装_在虚拟机中搭建php开发环境的教程

在虚拟机里安装PHP,本质上就是在一个隔离的操作系统环境中,搭建一套完整的Web服务栈,通常是LAMP(Linux、Apache、MySQL、PHP)或LEMP(Linux、Nginx、MySQL、PHP)。这让你能在不污染宿主机系统的前提下,拥有一个干净、可控的开发环境。核心步骤包括选择合适的虚拟机软件和操作系统,然后依次安装并配置Web服务器、数据库和PHP解释器及其相关扩展。

解决方案

搭建PHP开发环境,我们通常会选择一个Linux发行版,比如Ubuntu Server,因为它轻量且社区支持广泛。这里以Ubuntu Server 22.04为例,搭建一个LAMP环境。

准备虚拟机:首先,你需要安装一个虚拟机软件,比如VirtualBox或VMware Workstation。创建一个新的虚拟机,分配至少2GB内存和20GB硬盘空间,选择Ubuntu Server 22.04 LTS作为操作系统镜像进行安装。安装过程中,确保选择安装OpenSSH Server,方便后续通过SSH连接操作。

更新系统:虚拟机启动后,登录系统。第一件事总是更新软件包列表并升级已安装的包,这能避免很多不必要的兼容性问题。

sudo apt updatesudo apt upgrade -y

安装Apache Web服务器:Apache是目前最流行的Web服务器之一。

sudo apt install apache2 -y

安装完成后,Apache服务会自动启动。你可以在宿主机浏览器中访问虚拟机的IP地址,如果看到Apache的默认欢迎页面,说明安装成功。

安装MySQL/MariaDB数据库:PHP应用通常需要数据库支持。MariaDB是MySQL的一个分支,完全兼容且性能良好。

sudo apt install mariadb-server -y

安装完成后,运行安全脚本进行配置:

立即学习“PHP免费学习笔记(深入)”;

sudo mysql_secure_installation

这个脚本会引导你设置root密码、移除匿名用户、禁止root远程登录、删除测试数据库等,增强数据库安全性。

安装PHP及其常用扩展:现在是安装PHP本身。为了让PHP能与Apache和MySQL协同工作,还需要安装一些关键的PHP模块。

sudo apt install php libapache2-mod-php php-mysql php-cli php-fpm php-json php-curl php-mbstring php-xml php-zip -y

php-mysql 允许PHP连接MySQL/MariaDB数据库。libapache2-mod-php 是Apache的PHP模块。php-fpm 在某些场景下(比如Nginx)会用到,这里也一并安装了。安装完成后,需要重启Apache服务,让它加载PHP模块:

sudo systemctl restart apache2

测试PHP安装:在Apache的默认Web根目录(/var/www/html/)下创建一个PHP信息文件,来验证PHP是否正常工作。

sudo nano /var/www/html/info.php

在文件中输入以下内容:


保存并关闭文件(Ctrl+O, Enter, Ctrl+X)。现在,在宿主机浏览器中访问 http://你的虚拟机IP/info.php。如果你能看到一个详细的PHP配置信息页面,恭喜你,PHP环境已经搭建成功了。出于安全考虑,查看完 info.php 后最好将其删除或限制访问。

sudo rm /var/www/html/info.php

配置防火墙(UFW):为了安全,只允许HTTP/HTTPS和SSH流量进入虚拟机。

sudo ufw allow OpenSSHsudo ufw allow 'Apache Full'sudo ufw enable

根据提示输入 y 确认启用防火墙。

为什么推荐在虚拟机中搭建PHP开发环境?

我个人觉得,在虚拟机里搞开发环境,最大的好处就是“隔离”和“可控”。你想啊,你的宿主机可能装了各种各样的软件,有它的运行逻辑和依赖。如果直接在上面装PHP、Apache、MySQL,万一版本冲突了,或者哪个配置搞错了,轻则某个服务跑不起来,重则把系统搞得一团糟。我以前就吃过这种亏,为了一个项目,把宿主机的PHP版本升了又降,结果其他项目都受影响了。

虚拟机就完全不一样了。它就像一个独立的沙盒,你可以在里面随意折腾,装什么、怎么配置,都不会影响到宿主机。比如,你可能需要为不同的项目使用不同版本的PHP(PHP 7.4、PHP 8.0、PHP 8.2),或者测试Nginx而不是Apache,甚至尝试不同的Linux发行版。在虚拟机里,你可以轻松地创建多个虚拟机实例,每个实例跑一个独立的开发环境,互不干扰。这对于团队协作也很有用,大家可以基于同一个虚拟机镜像来搭建环境,保证开发环境的一致性,减少“在我机器上没问题”的扯皮。而且,虚拟机支持快照功能,你可以在环境配置好后拍个快照,以后无论怎么折腾,都能随时恢复到最初的干净状态,这简直是救命稻草。

搭建过程中常见的坑有哪些,如何解决?

说实话,搭建环境这事儿,总会遇到一些意想不到的“惊喜”。我总结了几个比较常见的:

权限问题: 这是新手最常遇到的。比如,你把代码放到 /var/www/html/ 下,或者其他自定义目录,结果访问时出现403 Forbidden错误,或者PHP脚本无法写入文件。这通常是Web服务器(Apache/Nginx)运行用户(通常是www-data)没有权限访问你的文件或目录导致的。

解决办法: 检查文件和目录的所有者和权限。最直接的方法是把你的项目目录的所有者改为www-data用户组,并赋予适当的读写权限。

sudo chown -R www-data:www-data /var/www/html/你的项目目录sudo chmod -R 755 /var/www/html/你的项目目录 # 目录权限sudo chmod -R 644 /var/www/html/你的项目目录/* # 文件权限

如果PHP需要写入文件(比如日志、上传文件),那对应的目录需要更高的写入权限:sudo chmod -R 775 /var/www/html/你的项目目录/可写目录。但要注意,777权限通常不推荐在生产环境使用。

PHP版本冲突或扩展未加载: 有时候PHP安装了,但某些功能(比如图片处理、数据库连接)不工作。这很可能是缺少了对应的PHP扩展,或者Apache/Nginx没有正确加载PHP模块。

解决办法: 确认所需扩展是否已安装。例如,如果你需要GD库处理图片,就得安装 php-gd。可以使用 php -m 命令查看已加载的CLI模式下的PHP扩展,或者查看 phpinfo() 页面确认Web服务器加载的扩展。如果缺少,就 sudo apt install php-gd 这样的命令安装。如果Apache没加载PHP模块,确保 libapache2-mod-php 已安装且Apache配置中包含了 LoadModule php_module modules/libphp.so (或类似)的行,并且重启了Apache。

数据库连接失败: 应用程序报错说无法连接数据库。这可能是MySQL/MariaDB服务没启动,或者用户名/密码/主机地址不对,或者防火墙阻止了连接。

解决办法:检查数据库服务状态:sudo systemctl status mariadb (或 mysql)。如果没运行,sudo systemctl start mariadb。确认数据库用户和密码是否正确,以及该用户是否有权限从PHP应用连接。通常会为应用创建一个单独的数据库用户,而不是直接用root。检查PHP代码中连接数据库的主机地址。如果PHP和数据库在同一台虚拟机上,通常是 localhost127.0.0.1。确保防火墙没有阻止MySQL端口(默认3306)。sudo ufw allow 3306/tcp

虚拟主机配置错误: 当你希望在同一个虚拟机上跑多个PHP项目,并且通过不同的域名访问时,就需要配置Apache的虚拟主机(Virtual Host)。配置错误会导致访问不到项目或者访问到错误的目录。

解决办法: 仔细检查 /etc/apache2/sites-available/ 目录下的虚拟主机配置文件。确保 DocumentRoot 指向正确的项目目录,ServerNameServerAlias 设置正确。每修改一次配置,都要 sudo a2ensite 你的配置文件名 启用,并 sudo systemctl restart apache2 重启Apache。别忘了在宿主机的 hosts 文件里把域名映射到虚拟机的IP地址。

如何优化虚拟机中的PHP开发体验?

搭建好基础环境只是第一步,要让开发更顺畅,还需要一些优化和工具。我平时会这么做:

共享文件夹: 这绝对是提高效率的关键。把你的项目代码放在宿主机上,然后通过虚拟机软件(如VirtualBox的Guest Additions)设置共享文件夹,让虚拟机也能访问到这些代码。这样,你就可以在宿主机上用你喜欢的IDE(VS Code、PhpStorm)编辑代码,保存后虚拟机里的Web服务器就能立即读取到最新的代码,省去了频繁复制文件的麻烦。

实现方式: 安装VirtualBox Guest Additions后,在VirtualBox的“设备”菜单中选择“共享文件夹”,添加宿主机上的项目目录,并勾选“自动挂载”和“固定分配”。然后在虚拟机中,通常会在 /media/sf_你的共享文件夹名 下找到共享目录。

Xdebug调试: PHP的调试神器。配置Xdebug后,你可以在IDE里设置断点,一步步跟踪代码执行流程,查看变量值,这比 var_dump()echo 效率高太多了。

配置步骤:安装 php-xdebugsudo apt install php-xdebug。编辑PHP的ini文件(通常在 /etc/php/8.x/apache2/php.ini/etc/php/8.x/mods-available/xdebug.ini),添加或修改以下配置:

[XDebug]zend_extension=xdebug.soxdebug.mode=debugxdebug.start_with_request=yes # 或者通过浏览器插件按需开启xdebug.client_host=你的宿主机IP地址 # 虚拟机要能连接到宿主机xdebug.client_port=9003 # 确保这个端口没有被占用xdebug.discover_client_host=true # 有时更方便,但可能不安全xdebug.idekey="VSCODE" # 或你IDE的IDE Key

重启Apache:sudo systemctl restart apache2。在IDE中配置Xdebug监听端口(通常是9003),并启动监听。

Composer: PHP的依赖管理工具,现代PHP开发不可或缺。它能帮你管理项目所需的各种库和框架。

安装:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"php composer-setup.phpphp -r "unlink('composer-setup.php');"sudo mv composer.phar /usr/local/bin/composer

现在你就可以在项目目录中使用 composer installcomposer update 来管理依赖了。

数据库管理工具: 虽然可以通过命令行管理数据库,但图形界面工具更直观高效。

phpMyAdmin/Adminer: 如果你喜欢Web界面的工具,可以在虚拟机里安装 phpmyadminadminer

sudo apt install phpmyadmin

安装过程中,它会让你选择Web服务器(选择apache2),并配置数据库。

宿主机上的客户端: 我更倾向于在宿主机上使用像DataGrip、Navicat、DBeaver这样的桌面客户端。只要确保虚拟机的MySQL允许宿主机IP连接(可能需要修改MySQL的 bind-address 配置为 0.0.0.0,并创建允许远程连接的用户),然后防火墙放行3306端口即可。

版本控制(Git): 虽然这不是虚拟机特有的,但确保你的项目在Git等版本控制系统下管理,是任何开发环境都应该遵循的最佳实践。你可以在虚拟机中安装Git,直接在项目目录进行版本管理。

sudo apt install git -y

这些工具和优化手段,能让你的PHP开发流程更加顺畅,减少很多重复性劳动,把精力更多地放在代码逻辑本身上。

以上就是php怎么安装_在虚拟机中搭建PHP开发环境的教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/30423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月3日 17:17:47
下一篇 2025年11月3日 17:52:22

相关推荐

  • 使用 Mask 导入本地图片时,如何解决跨域问题?

    跨域疑难:如何解决 mask 引入本地图片产生的跨域问题? 在使用 mask 导入本地图片时,你可能会遇到令人沮丧的跨域错误。为什么会出现跨域问题呢?让我们深入了解一下: mask 框架假设你以 http(s) 协议加载你的 html 文件,而当使用 file:// 协议打开本地文件时,就会产生跨域…

    2025年12月24日
    200
  • HTML、CSS 和 JavaScript 中的简单侧边栏菜单

    构建一个简单的侧边栏菜单是一个很好的主意,它可以为您的网站添加有价值的功能和令人惊叹的外观。 侧边栏菜单对于客户找到不同项目的方式很有用,而不会让他们觉得自己有太多选择,从而创造了简单性和秩序。 今天,我将分享一个简单的 HTML、CSS 和 JavaScript 源代码来创建一个简单的侧边栏菜单。…

    2025年12月24日
    200
  • 前端代码辅助工具:如何选择最可靠的AI工具?

    前端代码辅助工具:可靠性探讨 对于前端工程师来说,在HTML、CSS和JavaScript开发中借助AI工具是司空见惯的事情。然而,并非所有工具都能提供同等的可靠性。 个性化需求 关于哪个AI工具最可靠,这个问题没有一刀切的答案。每个人的使用习惯和项目需求各不相同。以下是一些影响选择的重要因素: 立…

    2025年12月24日
    000
  • 带有 HTML、CSS 和 JavaScript 工具提示的响应式侧边导航栏

    响应式侧边导航栏不仅有助于改善网站的导航,还可以解决整齐放置链接的问题,从而增强用户体验。通过使用工具提示,可以让用户了解每个链接的功能,包括设计紧凑的情况。 在本教程中,我将解释使用 html、css、javascript 创建带有工具提示的响应式侧栏导航的完整代码。 对于那些一直想要一个干净、简…

    2025年12月24日
    000
  • 布局 – CSS 挑战

    您可以在 github 仓库中找到这篇文章中的所有代码。 您可以在这里查看视觉效果: 固定导航 – 布局 – codesandbox两列 – 布局 – codesandbox三列 – 布局 – codesandbox圣杯 &#8…

    2025年12月24日
    000
  • 隐藏元素 – CSS 挑战

    您可以在 github 仓库中找到这篇文章中的所有代码。 您可以在此处查看隐藏元素的视觉效果 – codesandbox 隐藏元素 hiding elements hiding elements hiding elements hiding elements hiding element…

    2025年12月24日
    400
  • 居中 – CSS 挑战

    您可以在 github 仓库中找到这篇文章中的所有代码。 您可以在此处查看垂直中心 – codesandbox 和水平中心的视觉效果。 通过 css 居中 垂直居中 centering centering centering centering centering centering立即…

    2025年12月24日 好文分享
    300
  • 如何在 Laravel 框架中轻松集成微信支付和支付宝支付?

    如何用 laravel 框架集成微信支付和支付宝支付 问题:如何在 laravel 框架中集成微信支付和支付宝支付? 回答: 建议使用 easywechat 的 laravel 版,easywechat 是一个由腾讯工程师开发的高质量微信开放平台 sdk,已被广泛地应用于许多 laravel 项目中…

    2025年12月24日
    000
  • 如何在移动端实现子 div 在父 div 内任意滑动查看?

    如何在移动端中实现让子 div 在父 div 内任意滑动查看 在移动端开发中,有时我们需要让子 div 在父 div 内任意滑动查看。然而,使用滚动条无法实现负值移动,因此需要采用其他方法。 解决方案: 使用绝对布局(absolute)或相对布局(relative):将子 div 设置为绝对或相对定…

    2025年12月24日
    000
  • 移动端嵌套 DIV 中子 DIV 如何水平滑动?

    移动端嵌套 DIV 中子 DIV 滑动 在移动端开发中,遇到这样的问题:当子 DIV 的高度小于父 DIV 时,无法在父 DIV 中水平滚动子 DIV。 无限画布 要实现子 DIV 在父 DIV 中任意滑动,需要创建一个无限画布。使用滚动无法达到负值,因此需要使用其他方法。 相对定位 一种方法是将子…

    2025年12月24日
    000
  • 为什么在 React 组件中无法获得 Tailwind CSS 语法提示?

    为什么在 React 组件中无法获得 Tailwind CSS 语法提示? 你在 VSCode 中编写 HTML 文件时,可以正常获取 Tailwind CSS 语法提示。但当你尝试在 React 组件中编写 Tailwind CSS 时,这些提示却消失不见了。这是什么原因造成的? 解决方案 要解决…

    2025年12月24日
    000
  • 移动端项目中,如何消除rem字体大小计算带来的CSS扭曲?

    移动端项目中消除rem字体大小计算带来的css扭曲 在移动端项目中,使用rem计算根节点字体大小可以实现自适应布局。但是,此方法可能会导致页面打开时出现css扭曲,这是因为页面内容在根节点字体大小赋值后重新渲染造成的。 解决方案: 要避免这种情况,将计算根节点字体大小的js脚本移动到页面的最前面,即…

    2025年12月24日
    000
  • Nuxt 移动端项目中 rem 计算导致 CSS 变形,如何解决?

    Nuxt 移动端项目中解决 rem 计算导致 CSS 变形 在 Nuxt 移动端项目中使用 rem 计算根节点字体大小时,可能会遇到一个问题:页面内容在字体大小发生变化时会重绘,导致 CSS 变形。 解决方案: 可将计算根节点字体大小的 JS 代码块置于页面最前端的 标签内,确保在其他资源加载之前执…

    2025年12月24日
    200
  • Nuxt 移动端项目使用 rem 计算字体大小导致页面变形,如何解决?

    rem 计算导致移动端页面变形的解决方法 在 nuxt 移动端项目中使用 rem 计算根节点字体大小时,页面会发生内容重绘,导致页面打开时出现样式变形。如何避免这种现象? 解决方案: 移动根节点字体大小计算代码到页面顶部,即 head 中。 原理: flexível.js 也遇到了类似问题,它的解决…

    2025年12月24日
    000
  • 如何在 VSCode 中为 React 组件启用 Tailwind CSS 提示?

    在 vscode 中为 react 组件启用 tailwind css 提示 如果你在使用 vscode 编写 react 组件时,发现 tailwind css 提示无法正常显示,这里有一个解决方法: 安装 tailwind css intellisense 插件 这是实现代码提示的关键,确保你已…

    2025年12月24日
    200
  • 形状 – CSS 挑战

    您可以在 github 仓库中找到这篇文章中的所有代码。 您可以在此处查看 codesandbox 的视觉效果。 通过css绘制各种形状 如何在 css 中绘制正方形、梯形、三角形、异形三角形、扇形、圆形、半圆、固定宽高比、0.5px 线? shapes 0.5px line .square { w…

    2025年12月24日
    000
  • 有哪些美观的开源数字大屏驾驶舱框架?

    开源数字大屏驾驶舱框架推荐 问题:有哪些美观的开源数字大屏驾驶舱框架? 答案: 资源包 [弗若恩智能大屏驾驶舱开发资源包](https://www.fanruan.com/resource/152) 软件 [弗若恩报表 – 数字大屏可视化组件](https://www.fanruan.c…

    2025年12月24日
    000
  • 网站底部如何实现飘彩带效果?

    网站底部飘彩带效果的 js 库实现 许多网站都会在特殊节日或活动中添加一些趣味性的视觉效果,例如点击按钮后散发的五彩缤纷的彩带。对于一个特定的网站来说,其飘彩带效果的实现方式可能有以下几个方面: 以 https://dub.sh/ 网站为例,它底部按钮点击后的彩带效果是由 javascript 库实…

    2025年12月24日
    000
  • 网站彩带效果背后是哪个JS库?

    网站彩带效果背后是哪个js库? 当你访问某些网站时,点击按钮后,屏幕上会飘出五颜六色的彩带,营造出庆祝的氛围。这些效果是通过使用javascript库实现的。 问题: 哪个javascript库能够实现网站上点击按钮散发彩带的效果? 答案: 根据给定网站的源代码分析: 可以发现,该网站使用了以下js…

    好文分享 2025年12月24日
    100
  • Vue3 中如何将页面上的 PX 单位转换为 REM?

    vue3 下如何实现某个页面 px 自适应到 rem? 在 vue3 中,您可以在某个页面中使用 px 转 rem 的自适应功能,以免影响其他项目 ui 框架。以下是实现方法: 使用 jquery 获取页面宽度,并将其作为基准值。例如,使用 375 作为基准,您可以在页面 mounted 生命周期函…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信