macOS搭建php环境以及调试Symfony

macOS搭建php环境以及调试Symfony

  • macOS搭建php环境以及调试Symfony
    • 古老的传说
    • 运行环境
    • 快速前置安装环境
      • php 的安装
      • 安装 Xdebug 来调试 php
      • 如何找到你的 php.ini
      • Xdebug 安装成功
    • 创建并调试的 Hello world
      • 安装 PHP Debug
    • 安装 Symfony
      • 安装 Composer
      • 安装 Symfony CLI
    • 创建 Symfony App
    • 添加路由
    • 调试路由
    • 结尾

古老的传说

神说:要有光,于是世界就有了光。

神说:要有语言,于是世界就有了php

在世界上下 5000 年的历史长河中,

有这么一句古话镌刻在我们全人类心中:

“php是世界上最好的语言”

运行环境

最近,我,一名 Nodejs Developer, 出于来 php 生态取取经这个目的,我开始学习 php 框架 Symfony

而且我也喜欢 Symphony 这首歌,于是一边写代码写这篇文章,一边开始了我的 Clean Bandit 循环。

本文的运行环境如下:

  • macOS 14.3.1
  • vscode 1.87.2

除此之外不需要安装其他任何软件 (比如: XAMPP,Laragon)

快速前置安装环境

php 经过这么多年的发展,早就已经非常的成熟了。所以安装调试它非常的简单。

php 的安装

首先去 php.net 按照 macOS 系统下的安装文档 安装一下 php

记得先安装 homebrew : https://brew.sh/

brew install php

安装就好了, php -v 一下,出现以下信息:

PHP 8.3.4 (cli) (built: Mar 12 2024 23:42:26) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.4, Copyright (c) Zend Technologies

安装 Xdebug 来调试 php

调试 php 需要 xdebug, 去 xdebug.org 按照教程安装一下

pecl install xdebug

安装好了之后,默认情况它会自己去修改你的 php 目录下的 php.ini 添加一行:

zend_extension="xdebug.so"

当然假如没有的话,你也可以手动去 php.ini 添加下这一行。

如何找到你的 php.ini

你可以通过 php --ini 命令找到你文件的路径:

php --ini
# 然后展示你php的路径信息,类似下方
Configuration File (php.ini) Path: /opt/homebrew/etc/php/8.3
Loaded Configuration File:         /opt/homebrew/etc/php/8.3/php.ini
Scan for additional .ini files in: /opt/homebrew/etc/php/8.3/conf.d
Additional .ini files parsed:      /opt/homebrew/etc/php/8.3/conf.d/ext-opcache.ini

Xdebug 安装成功

此时假如 xdebug 安装注册成功的话, 执行 php -v 会额外出现信息:

PHP 8.3.4 (cli) (built: Mar 12 2024 23:42:26) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.4, Copyright (c) Zend Technologies
# 注意下一行 Xdebug
    with Xdebug v3.3.1, Copyright (c) 2002-2023, by Derick Rethans
    with Zend OPcache v8.3.4, Copyright (c), by Zend Technologies

创建并调试的 Hello world

随便在哪创建一个目录,在这打开 vscode 然后创建一个 test.php,内容如下:

<?php
$a = 0.1;
$b = 0.2;
$c = $a + $b;
$isEqual = $c == 0.3;
var_dump($isEqual);

$author = "'🧊 ice breaker 🧊'";
$cow = '\'Hello World\' from ';

$helloWorld = $cow . $author;

echo $helloWorld;

执行 php -f test.php 运行一下看看结果

安装 PHP Debug

然后安装 PHP Debug vscode 扩展:

Image

安装好了,就可以创建 .vscode/launch.json 并在其中添加,调试 php 的启动方式了。

我们在这个 json 文件的 configurations 字段中,随便输入个 php 就自动联想出来调试 php 的各种方式了, 比如下方这端就是插件自动生成的:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch currently open script",
      "type": "php",
      "request": "launch",
      "program": "${file}",
      "cwd": "${fileDirname}",
      "port": 0,
      "runtimeArgs": ["-dxdebug.start_with_request=yes"],
      "env": {
        "XDEBUG_MODE": "debug,develop",
        "XDEBUG_CONFIG": "client_port=${port}"
      }
    }
  ]
}

这个生成的调试命令的作用,点击 vscode debug 之后快速调试,你右边编辑器打开的 php 文件的。

我们打开 test.php 测试一下吧!

Image

命中断点!同时各位写 js 的同学,看到这个结果,不免会心一笑,弱类型解释型之殇哈哈。

不懂这个梗的,可以去浏览器的开发者工具控制台,执行一下 0.1 + 0.2

不过现在 php 是可以强类型的,只是我这里没有显式声明罢了。

这样就初步完成了调试 php 脚本的工作。

安装 Symfony

去 symfony.com 按照教程安装一下

我们已经安装好了 php 了,现在就只需要安装 ComposerSymfony CLI 就可以了

安装 Composer

Composer 是一个安装 php 包的工具,我就把它理解成 npm

来到 getcomposer.org 按照安装命令执行,就安装成功了

此时一个全局命令 composer 会被注册在你的 zsh,执行 composer --version 来看看是否安装成功吧!

composer --version
# 安装成功展示以下信息
Composer version 2.7.2 2024-03-11 17:12:18
PHP version 8.3.4 (/opt/homebrew/Cellar/php/8.3.4/bin/php)
Run the "diagnose" command to get more detailed diagnostics output.

我在有 composer.jsonphp 项目里执行 composer i,然后生成了 composer.lock 文件和 vendor, var 文件夹。

而你在有 package.jsonnodejs 项目里执行 npm i/yarn/pnpm i 不也是生成 lock 文件和 node_modules 文件夹吗?

不过 node_modules 是 “扭曲时间和立场的黑洞”,不知道 vendor 是不是,笑~

安装 Symfony CLI

同样使用 Homebrew:

brew install symfony-cli/tap/symfony-cli

安装完成之后执行:

symfony check:requirements

看到以下信息你就完成Symfony环境搭建的工作了!

Symfony Requirements Checker
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

> PHP is using the following php.ini file:
/opt/homebrew/etc/php/8.3/php.ini

> Checking Symfony requirements:

......................................


 [OK]
 Your system is ready to run Symfony projects


Note  The command console can use a different php.ini file
~~~~  than the one used by your web server.
      Please check that both the console and the web server
      are using the same PHP version and configuration.

创建 Symfony App

执行:

symfony new symfony-ms-demo --version="7.0.*"

创建了一个现代化的 symfony 应用,然后 cd & compose i 之后

执行 symfony server:start 开跑:

Image

访问对应页面出现:

Image

成功运行了,就是这么简单!

添加路由

按照教程在 src/Controller 添加一个 LuckyController.php:

<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;

class LuckyController
{
  #[Route('/lucky/number')]
  public function number(): Response
  {
    $number = random_int(0, 100);

    return new Response(
      '<html><body>Lucky number: ' . $number . '</body></html>'
    );
  }
}

嗯,看代码是返回一个 html 字符串,这种代码实在是太常见了,各个语言的 web 框架不都是这样的吗?接口那种 CRUD 也不过是做点事情返回点 json/xml啥的,

什么概念比如 Middleware,Pipe 什么 Controller,Service, Guard, Interceptor, Decorator , Module ,Provider,Inject,IOC/DI …早已经了然于胸,不都是这些玩意,或者那些架构嘛…

说远了,我们注册了这个路由之后,访问 symfony server:start host 路由的 /lucky/number 地址,就是返回上面那个 html 片段了,但是我们应该怎么调试呢?

调试路由

实际上也很简单,同样使用 Xdebug 即可

我们同样在 .vscode/launch.json 添加一种启动方式: (输入 php 自动感应生成)

{
  "configurations": [
    {
      "name": "Launch Built-in web server",
      "type": "php",
      "request": "launch",
      "runtimeArgs": [
        "-dxdebug.mode=debug",
        "-dxdebug.start_with_request=yes",
        "-S",
        "localhost:0",
      ],
      "program": "",
      // 只需要设置下一行的 cwd,指向你 symfony 应用的入口 index.php 即可
      "cwd": "${workspaceRoot}/symfony-ms-demo/public",
      "port": 9003,
      "serverReadyAction": {
        "pattern": "Development Server \\(http://localhost:([0-9]+)\\) started",
        "uriFormat": "http://localhost:%s",
        "action": "openExternally",
      },
    },
  ],
}

然后在 vscode 里面直接启动,访问对应的路由即可命中断点:

Image

结尾

不知不觉就水了这么长的文章了,看都看累了

本文主要在讲如何在 vscode 里面运行和调试 php 以及 php web 框架 Symfony,算是基础中的基础了。

至于其他的软件, 比如 XAMPP,Laragon 啥的,我个人感觉是没有必要的,因为这种都可以使用 Docker 作为代替,切换 php 版本不过也只是拉不同的 php 版本镜像拉下来,在容器里去进行开发和运行罢了。

不过随着开发的深入,我感觉 XAMPP,Laragon 啥的这种还是有必要的。

因为我内存不够用了!!!

所以奉劝各位,买 Macbook Pro 的时候,一定要买大点的内存,尤其是你要本地跑容器的,推荐 36GB 起。(不过苹果内存真的是贵啊)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/503356.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

tcpdump + wireshark 服务器抓包分析

tcpdump wireshark 服务器抓包分析 1.tcpdump安装2.tcpdump使用3.安装wireshark4.使用wireshark 本文用以总结使用tcpdump进行抓包&#xff0c;然后使用wireshark工具打开抓包出来的pacp文件进行分析。通过tcpdump可以实时监控到linux服务器中tcp和http、https等通讯的内容和信…

HarmonyOS 应用开发之FA模型访问Stage模型DataShareExtensionAbility

概述 无论FA模型还是Stage模型&#xff0c;数据读写功能都包含客户端和服务端两部分。 FA模型中&#xff0c;客户端是由DataAbilityHelper提供对外接口&#xff0c;服务端是由DataAbility提供数据库的读写服务。 Stage模型中&#xff0c;客户端是由DataShareHelper提供对外接…

【重学C语言】二、C语言简介和开发工具

【重学C语言】二、C语言简介和开发工具 C语言发展史C语言标准变迁C语言特点开发软件CLion安装步骤 VIsual Studio安装步骤 Clion 和 VS2022 绑定 VS 项目创建项目 Clion 项目(本博主主用)创建项目Clion 配置 构建类型构建模式 C语言发展史 1970年&#xff0c;美国 AT&T 公…

leetcode.209.长度最小的子数组

题目 给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组&#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0。 示例&#xff1a; 输入&#xff1a;s 7, nums [2,3,1,2,4,3] 输出&#…

JDK和IntelliJ IDEA下载和安装及环境配置教程

一、JDK下载&#xff08;点击下方官网链接&#xff09; Java Downloads | Oracle 选择对应自己电脑系统往下拉找到自己想要下载的JDK版本进行下载&#xff0c;我下的是jdk 11&#xff0c;JDK有安装版和解压版&#xff0c;我就直接下安装版的了。 .exe和.zip的区别&#xff1a…

设计模式10--适配器模式

定义 案例一 案例二 优缺点

稀碎从零算法笔记Day34-LeetCode:最小栈

感谢耶稣&#xff0c;笔者又过了一天“复活节”。月末斩杀一道Hard画上句号 题型&#xff1a;栈、模拟数据结构 链接&#xff1a;155. 最小栈 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 设计一个支持 push &#xff0c;pop &#xff0c;…

「Android高级工程师」BAT大厂面试基础题集合-下-Github标星6-5K

C、 com.android.provider.contact D、 com.android.provider.contacts 11.下面关于ContentProvider描述错误的是&#xff08;&#xff09;。 A、 ContentProvider可以暴露数据 B、 ContentProvider用于实现跨程序共享数据 C、 ContentProvider不是四大组件 D、 ContentP…

阿里云轻量应用服务器优惠价格表,61元和165元一年

阿里云轻量应用服务器2核2G和2核4G配置优惠价格表&#xff0c;轻量2核2G3M带宽61元一年&#xff0c;轻量2核4G4M带宽165元1年&#xff0c;均不限制月流量&#xff0c;阿里云活动链接 aliyunfuwuqi.com/go/aliyun 活动打开如下图&#xff1a; 阿里云轻量应用服务器价格 61元/年…

线程池详解、核心参数、拒绝策略

什么是线程池 线程池是一种池化技术&#xff0c;它预先创建一组线程&#xff0c;用于执行异步任务。当有新任务到来时&#xff0c;线程池可以立即分配一个线程来处理&#xff0c;而不需要临时创建。这样可以减少因为频繁创建和销毁线程而导致的开销。 线程池的应用场景 高并…

C++中使用虚函数实现多态

虚函数是C中用于实现多态&#xff08;Polymorphism&#xff09;的重要特性。下面是关于虚函数的讲解和代码示例&#xff1a;### 虚函数的定义&#xff1a; 虚函数是在基类中声明为 virtual 的成员函数。 在派生类中重写&#xff08;override&#xff09;这个虚函数&#xff0c;…

C语言分支循环探秘:解锁编程逻辑的无限可能 篇章1

目录 1.if语句 2.关系操作符 3.条件操作符 4.逻辑操作符&#xff1a;&&&#xff0c;||&#xff0c;&#xff01; 5.switch语句 6.while循环 7.for循环 8.do-while循环 9.break和continue语句 10.循环的嵌套 11.goto 导入 C语言是结构化的程序设计语言&…

STM32 | PWM脉冲宽度调制(第五天按键中断,控制电机正/反转、加速、减速、暂停与继续源码解析)

​ STM32 | PWM脉冲宽度调制(第五天)STM32 | PWM脉冲宽度调制(第五天呼吸灯源码解析)STM32 | PWM脉冲宽度调制(第五天电机速度控制源码解析)PWM 技术在以下其他机器学习领域和应用中也可以发挥作用: 自然语言处理 (NLP):调节文本生成模型(例如 GPT-3)的输出长度和多样…

简明Pytorch分布式训练 — DistributedDataParallel 实践

上一次的Pytorch单机多卡训练主要介绍了Pytorch里分布式训练的基本原理&#xff0c;DP和DDP的大致过程&#xff0c;以及二者的区别&#xff0c;并分别写了一个小样作为参考。小样毕竟还是忽略了很多细节和工程实践时的一些处理方式的。实践出真知&#xff0c;今天&#xff08;简…

微服务(基础篇-007-RabbitMQ)

目录 初识MQ(1) 同步通讯&#xff08;1.1&#xff09; 异步通讯&#xff08;1.2&#xff09; MQ常见框架&#xff08;1.3&#xff09; RabbitMQ快速入门(2) RabbitMQ概述和安装&#xff08;2.1&#xff09; 常见消息模型&#xff08;2.2&#xff09; 快速入门&#xff…

YARN集群 和 MapReduce 原理及应用

YARN集群模式 本文内容需要基于 Hadoop 集群搭建完成的基础上来实现 如果没有搭建&#xff0c;请先按上一篇: <Linux 系统 CentOS7 上搭建 Hadoop HDFS集群详细步骤> 搭建&#xff1a;https://mp.weixin.qq.com/s/zPYsUexHKsdFax2XeyRdnA 配置hadoop安装目录下的 etc…

docker 部署 nali 开源 IP 地理信息归属查询软件

前言 早前用到一个小巧开源的 IP 归属地查询软件&#xff0c;官方提供了 Dockerfile&#xff0c;使用了一段时间觉得还不错&#xff0c;非常简单便捷。 部署 docker 启动 由于该项目会在首次启动自动下载 IP 数据库,所以最好通过挂载目录的方式,将数据库目录挂在到本地,避免…

代码随想录 Day24 理论基础 77. 组合

理论基础 1. 回溯是配合递归算法进行使用的&#xff0c;一般是在递归的下面。回溯的算法是一种暴力的算法&#xff0c;虽然效率并不高&#xff0c;但是常常使用。因为很多时候使用多层for&#xff08;因为层数实在是套多了&#xff09;也不能将题目解答&#xff0c;这个时候就…

HCIP【GRE VPN、MGRE VPN与PPP验证综合实验】

目录 实验要求&#xff1a; 实验拓扑图&#xff1a; 实验思路&#xff1a; 实验步骤&#xff1a; 一、配IP地址 &#xff08;1&#xff09;配置所有设备接口的IP地址&#xff1a; &#xff08;2&#xff09;配置私网与公网接口的缺省路由使得公网可通&#xff1a; 二、P…

学习日记(SSM整合流程_SpringMVC_part_two)

目录 大致流程如下 1、创建工程 2、SSM配置类结构 3、功能模块 代码部分 整体结构 Jdbc.Config MyBatisConfig ServletConfig SpringConfig SpringMvcConfig BookController BookDao Book BusinessException SystemException Cord Result BookService BookserviceImpl jd…