认识在 macOS 下使用 PHP-version 切换 PHP 版本的方法
本地环境是和公司项目环境保持一致的7.1,可是laravel6.0升级必须要求7.2,(组内有小伙伴的本地环境是7.2,然后push代码之后导致项目dev环境无法自动部署),想了想,还是得在本地弄一个方便切换php版本的东西。
方法一、 使用 valet use php@version
(使用valet搭环境的小伙伴看这里)
这个其实是属于我看文档不仔细- -,以前只大致学了valet的基本使用- -,如果看文档仔细点,就能少花这小半天时间了- -
Valet 允许你使用
valet use php@version
命令来切换 PHP 版本。如果指定版本尚未安装,Valet 将通过 Brew 来安装指定的 PHP 版本:
valet use php@7.2 valet use php@7.1
但是这个必须是valet新版本,要先升级,否则会报错,如下
[qian@bogon ~ ]$ valet use php@7.2 Command "use" is not defined.
valet 的升级:
你可以在终端使用 composer global update 命令来更新 Valet。升级后,如有需要,最好(实践发现,是必须)再次运行 valet install ,以便 Valet 对配置文件进行升级。composer global update valet installSalin selepas log masuk蓝后,就ok了
valet use php@7.2
[qian@bogon ~ ]$ valet use php@7.2 Stopping php@7.1... Unlinking current version: php@7.1 Linking new version: php@7.2 Updating PHP configuration... Restarting php@7.2... Restarting nginx... Valet is now using php@7.2.Salin selepas log masuk
方法二:安装php-version(如果没有用valet,这个应该是可以的)
step 1、使用brew安装多个php版本
brew install php71
// 原本有就不需要brew install php72
step 2、发现brew安转php-version的命令失效了,那就手动安装吧
[qian@bogon ~ ]$ mkdir $HOME/.local [qian@bogon ~ ]$ cd $HOME/.local [qian@bogon .local ]$ git clone https://github.com/wilmoore/php-version.git [qian@bogon .local ]$ source $HOME/.local/php-version/php-version.sh //测试 查看当前php版本 [qian@bogon .local ]$ php-version * 7.1.18 7.2.22
现在添加环境变量
[qian@bogon ~ ]$ echo "source $HOME/.local/php-version/php-version.sh" >> ~/.zshrc [qian@bogon ~ ]$ source ~/.zshrc
切换php版本
php-version 7.1 或 php-version 7.2
这样使用命令行敲 php -v
已经是切换后的版本。
踩坑记录
一、第一遍使用brew安装php72权限不够创建Frameworks目录
执行第一遍的时候报错
==> Pouring python-3.7.4_1.mojave.bottle.tar.gz Error: An unexpected error occurred during the `brew link` step The formula built, but is not symlinked into /usr/local Permission denied @ dir_s_mkdir - /usr/local/Frameworks Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks
然后自己去/usr/local/下新建了目录Frameworks,再执行一遍brew install php72
即可
二、使用brew安装php-version工具,命令失效
brew install php-version
给出了报错
[qian@bogon ~ ]$ brew install php-version Updating Homebrew... ==> Auto-updated Homebrew! Updated 1 tap (homebrew/core). ==> Updated Formulae atomist-cli webtorrent-cli Error: No available formula with the name "php-version" ==> Searching for a previously deleted formula (in the last month)... Warning: homebrew/core is shallow clone. To get complete history run: git -C "$(brew --repo homebrew/core)" fetch --unshallow Error: No previously deleted formula found. ==> Searching for similarly named formulae... Error: No similarly named formulae found. ==> Searching taps... ==> Searching taps on GitHub... Error: No formulae found in taps.
它说没有这个叫“php-version”的东西,我还把“homebrew/core”给拉了一下
git -C "$(brew --repo homebrew/core)" fetch --unshallow
三、执行php -v
时报dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylib
[qian@bogon ~ ]$ php -v dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylib Referenced from: /usr/local/bin/php Reason: image not found [1] 66728 abort php -v
反正我是重装大法好
brew uninstall --force php71 && brew install php71
四、php-version 在valet环境中不起作用
如果没有用valet的小伙伴,下面就不用看了~
如上方法一,php-version装好啦,php -v
也对着
但是。。。。不管使用sudo pkill -INT -o php-fpm
还是sudo kill -9 进程id
,
都不能杀死php-fpm进程,使用ps -ef | grep php
查看进程:
[qian@bogon ~ ]$ ps -ef |grep php 501 307 1 0 四09上午 ?? 51:34.33 /Applications/PhpStorm.app/Contents/MacOS/phpstorm -psn_0_90134 0 70900 1 0 2:33下午 ?? 0:00.11 /usr/local/opt/php@7.1/sbin/php-fpm --nodaemonize 501 70901 70900 0 2:33下午 ?? 0:00.00 /usr/local/opt/php@7.1/sbin/php-fpm --nodaemonize 501 70902 70900 0 2:33下午 ?? 0:00.00 /usr/local/opt/php@7.1/sbin/php-fpm --nodaemonize 501 70904 10409 0 2:33下午 ttys007 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn php
代码中打印phpinfo();依然是切换之前的php版本,得查找原因另想办法
使用sudo php-fpm
命令,发现报错中和valet相关
[qian@bogon ~ ]$ sudo php-fpm && php -v Password: [16-Sep-2019 18:27:08] ERROR: An another FPM instance seems to already listen on /Users/qian/.config/valet/valet.sock [16-Sep-2019 18:27:08] ERROR: FPM initialization failed [qian@bogon ~ ]$
相关学习推荐:PHP编程从入门到精通
Atas ialah kandungan terperinci 认识在 macOS 下使用 PHP-version 切换 PHP 版本的方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.

Dalam Php8, ungkapan perlawanan adalah struktur kawalan baru yang mengembalikan hasil yang berbeza berdasarkan nilai ungkapan. 1) Ia sama dengan pernyataan suis, tetapi mengembalikan nilai dan bukannya blok pernyataan pelaksanaan. 2) Ekspresi perlawanan secara ketat (===), yang meningkatkan keselamatan. 3) Ia mengelakkan kemungkinan ketinggalan dalam penyataan suis dan meningkatkan kesederhanaan dan kebolehbacaan kod.

Multithreading dalam bahasa dapat meningkatkan kecekapan program. Terdapat empat cara utama untuk melaksanakan multithreading dalam bahasa C: Buat proses bebas: Buat pelbagai proses berjalan secara bebas, setiap proses mempunyai ruang ingatan sendiri. Pseudo-Multithreading: Buat pelbagai aliran pelaksanaan dalam proses yang berkongsi ruang memori yang sama dan laksanakan secara bergantian. Perpustakaan multi-threaded: Gunakan perpustakaan berbilang threaded seperti PTHREADS untuk membuat dan mengurus benang, menyediakan fungsi operasi benang yang kaya. Coroutine: Pelaksanaan pelbagai threaded ringan yang membahagikan tugas menjadi subtask kecil dan melaksanakannya pada gilirannya.

Konfigurasikan tugas masa Apscheduler sebagai perkhidmatan di platform macOS, jika anda ingin mengkonfigurasi tugas masa Apscheduler sebagai perkhidmatan, sama dengan Ngin ...

Dalam PHP, anda boleh mencegah serangan CSRF dengan menggunakan token yang tidak dapat diramalkan. Kaedah khusus termasuk: 1. Menjana dan membenamkan token CSRF dalam bentuk; 2. Sahkan kesahihan token semasa memproses permintaan.

Dalam PHP, kata kunci akhir digunakan untuk mencegah kelas daripada diwarisi dan kaedah ditimpa. 1) Apabila menandakan kelas sebagai muktamad, kelas tidak boleh diwarisi. 2) Apabila menandakan kaedah sebagai muktamad, kaedah itu tidak boleh ditulis semula oleh subkelas. Menggunakan kata kunci akhir memastikan kestabilan dan keselamatan kod anda.
