原本是習慣用 MacPorts 管理套件,然後升上 macOS 15 後,跑了 MacPorts migration 後,發現 php74 不見了,細追才發現沒裝起來 XD 努力研究了一下:
---> Configuring php74Warning: Configuration logfiles contain indications of -Wimplicit-function-declaration; check that features were not accidentally disabled:gethostbyname_r: found in php-7.4.33/config.log_controlfp: found in php-7.4.33/config.log_controlfp_s: found in php-7.4.33/config.logWarning: Configuration logfiles contain indications of -Wimplicit-int; check that features were not accidentally disabled:found in php-7.4.33/config.log---> Building php74Error: Failed to build php74: command execution failedError: See /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php74/main.log for details.Error: Follow https://guide.macports.org/#project.tickets if you believe there is a bug.Error: Processing of port php74 failed---> Some of the ports you installed have notes:db48 has the following notes:The Java and Tcl bindings are now provided by the db48-java anddb48-tcl subports.===:info:build ld: warning: ignoring duplicate libraries: '-largon2', '-lxml2', '-lz':info:build Undefined symbols for architecture arm64::info:build "_res_9_dn_expand", referenced from::info:build _php_parserr in dns.o:info:build _php_parserr in dns.o:info:build _php_parserr in dns.o:info:build _php_parserr in dns.o:info:build _php_parserr in dns.o:info:build _php_parserr in dns.o:info:build _php_parserr in dns.o:info:build ...:info:build "_res_9_dn_skipname", referenced from::info:build _zif_dns_get_record in dns.o:info:build _zif_dns_get_mx in dns.o:info:build _zif_dns_get_mx in dns.o:info:build "_res_9_init", referenced from::info:build _zif_dns_check_record in dns.o:info:build _zif_dns_get_record in dns.o:info:build _zif_dns_get_mx in dns.o:info:build "_res_9_search", referenced from::info:build _zif_dns_check_record in dns.o:info:build _zif_dns_get_record in dns.o:info:build _zif_dns_get_mx in dns.o:info:build ld: symbol(s) not found for architecture arm64:info:build clang: error: linker command failed with exit code 1 (use -v to see invocation):info:build make: *** [sapi/cli/php] Error 1:info:build make: *** Waiting for unfinished jobs....:info:build ld: warning: ignoring duplicate libraries: '-largon2', '-lxml2', '-lz':info:build Undefined symbols for architecture arm64::info:build "_res_9_dn_expand", referenced from::info:build _php_parserr in dns.o:info:build _php_parserr in dns.o:info:build _php_parserr in dns.o:info:build _php_parserr in dns.o:info:build _php_parserr in dns.o:info:build _php_parserr in dns.o:info:build _php_parserr in dns.o:info:build ...:info:build "_res_9_dn_skipname", referenced from::info:build _zif_dns_get_record in dns.o:info:build _zif_dns_get_mx in dns.o:info:build _zif_dns_get_mx in dns.o:info:build "_res_9_init", referenced from::info:build _zif_dns_check_record in dns.o:info:build _zif_dns_get_record in dns.o:info:build _zif_dns_get_mx in dns.o:info:build "_res_9_search", referenced from::info:build _zif_dns_check_record in dns.o:info:build _zif_dns_get_record in dns.o:info:build _zif_dns_get_mx in dns.o:info:build ld: symbol(s) not found for architecture arm64:info:build clang: error: linker command failed with exit code 1 (use -v to see invocation):info:build make: *** [sapi/phpdbg/phpdbg] Error 1:info:build make: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php74/work/php-7.4.33':info:build Command failed: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php74/work/php-7.4.33" && /usr/bin/make -j8 -w all:info:build Exit code: 2:error:build Failed to build php74: command execution failed:debug:build Error code: CHILDSTATUS 94983 2:debug:build Backtrace: command execution failed:debug:build while executing:debug:build "system {*}$notty {*}$callback {*}$nice $fullcmdstring":debug:build invoked from within:debug:build "command_exec -callback portprogress::target_progress_callback build":debug:build (procedure "portbuild::build_main" line 10):debug:build invoked from within:debug:build "$procedure $targetname":error:build See /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_php/php74/main.log for details.
因此,主要是 _res_9_dn_* 等等的問題,問 AI 說,解方若還要繼續用 MacPorts 管理,只能裝個肥滋滋的 bind9
% sudo port install bind9% sudo port clean php74% sudo port install php74 configure.cflags="-I/opt/local/include" configure.ldflags="-L/opt/local/lib -lbind9 -ldns -lisc"
但這樣跑也失敗了
接著又試了
% brew install php@7.4Warning: No available formula with the name "php@7.4". Did you mean php@8.2, php@8.1 or php@8.0?==> Searching for similarly named formulae and casks...==> Formulaephp@8.2 php@8.1 php@8.0To install php@8.2, run:brew install php@8.2
雖然繼續深入問 AI 可以得到要做 php-7.4 patch 檔案,但這樣搞下去維護太累了,等於自己編譯 php74 跟改 code 了
最終,取個平衡,未來需要 php74 的環境,就靠 Docker 吧 XD 就單純這樣用即可:
% docker run -it -v ~/projects/:/projects -p 8080:8080 -p 8000:8000 -p 8443:8443 --rm php:7.4-cli bash
如此在 Docker 內部用 `php -S 0.0.0.0:8000` 就可以在 Host 端存取查看運行結果了
若還是想直接裝在系統,可以參考 github.com/shivammathur/homebrew-php