Tạm dừng phát triển trong một hoặc hai ngày và nâng cấp máy tính xách tay của tôi lên Catalina có vẻ là một cách hay để bắt đầu năm mới
Catalina nâng cấp phiên bản System PHP từ 7. 2. x đến 7. 3. 9, đây là sự thay đổi mà tôi mong muốn nhận được dưới dạng PHP 7. 2 không còn được hỗ trợ tích cực bởi cộng đồng nhà phát triển PHP. Tuy nhiên, quá trình nâng cấp OS X luôn bao gồm một vài điều bất ngờ cho các nhà phát triển
Một bất ngờ lớn trong bản nâng cấp này là Catalina cải thiện tính bảo mật bằng cách thêm hệ thống tệp chỉ đọc cho các tệp hệ thống quan trọng mà bạn không muốn bị giả mạo. Điều đó rất có ý nghĩa, nhưng nó cũng phức tạp khi sử dụng PECL hoặc phpize, bởi vì các đường dẫn bên dưới /usr mà chúng tham chiếu hiện ở chế độ chỉ đọc
Sau khi nâng cấp, các trang web dành cho nhà phát triển của tôi nói chung hoạt động tốt, nhưng trên một trang web, tôi gặp phải lỗi sau
Error: Class 'ZipArchive' not found
Hóa ra là PHP 7. 3 đi kèm với Catalina không bao gồm hỗ trợ zip/ZipArchive. Dự án này yêu cầu ZipArchive, vì vậy tôi có thể chuyển sang một phương pháp cài đặt PHP khác, chẳng hạn như sử dụng môi trường brew hoặc Docker hoặc Lando hoặc tôi có thể tìm ra cách kích hoạt lại hỗ trợ zip trong hệ thống PHP
Tôi đã đi với cách tiếp cận sau
Cá nhân tôi thích Lando cho các phiên bản PHP phụ nhưng tôi nhận thấy hình phạt về hiệu suất khi chạy Docker trên máy Mac quá cao để sử dụng nó cho môi trường chính của mình. Ví dụ: dự án này yêu cầu xây dựng lại trang web thường xuyên, giúp tăng hiệu quả từ việc thực hiện quy trình đó trong 10 phút thay vì gần một giờ, điều quan trọng đối với năng suất của tôi
Rất nhiều nhà phát triển tại Affinity Bridge sử dụng brew để chạy nhiều phiên bản PHP trên máy tính xách tay của họ. Tôi cũng đã sử dụng phương pháp đó nhưng đã đau đầu khi quản lý các thành phần phụ thuộc theo cách đó, với dự định là một thay đổi nhỏ đối với ngăn xếp AMP của tôi sẽ kích hoạt các bản cập nhật của các công cụ có vẻ không liên quan như python3 gây ra sự cố ở những nơi khác trong môi trường của tôi. Vì vậy, nếu tôi có thể tránh cách tiếp cận này, tôi sẽ
Tôi đã thu thập thông tin từ một số nhà phát triển khác, những người đã gặp sự cố tương tự và tôi đã nghĩ ra một giải pháp
Bước 1. Cài đặt hỗ trợ PEAR/PECL
cd /tmp
curl -s -O //pear.php.net/install-pear-nozlib.phar
sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin
[tín dụng]Bước 2. Tải xuống nguồn tiện ích mở rộng zip
Tôi đã thử cài đặt zip với pecl, nhưng không thành công vì thiếu các tệp tiêu đề PHP. Vì vậy, tôi đã tải xuống nguồn cho tiện ích mở rộng zip từ pecl
pecl download //pecl.php.net/get/zip
tar -xzvf zip
Bước 3. Tải xuống các tệp src/tiêu đề PHP
Để xây dựng các phần mở rộng PHP, bạn cần các tệp tiêu đề cho phiên bản PHP mà bạn đang nhắm mục tiêu. Trên OS X, điều này được thực hiện với XCode [tín dụng]
xcode-select --install
Để xác minh rằng các tệp tiêu đề hiện có sẵn và tìm đường dẫn của chúng. $ sudo find /Library -name php.h
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/php/main/php.h
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/php/main/php.h
Bước 4. Sao chép/sửa đổi phpsize và php-config
Để tạo phpize và php-config, hãy tìm các tệp tiêu đề PHP ở vị trí mà XCode đặt chúng thay vì trong /usr/include/php -- hiện tại là vị trí chỉ đọc -- Tôi đã theo dõi, sao chép và sửa đổi phpize và php-
cp /usr/bin/phpize /usr/local/bin/phpize
cp /usr/bin/php-config /usr/local/bin/php-config
Sau đó, tôi đã chỉnh sửa đường dẫn bao gồm trong mỗi người trong số họ. Đây là những khác biệt
local:/tmp/zip-1.15.5/modules $ diff /usr/bin/phpize /usr/local/bin/phpize
8c8
< includedir="`eval echo ${prefix}/include`/php"
---
> includedir="`eval echo /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include`/php"
local:/tmp/zip-1.15.5/modules $ diff /usr/bin/php-config /usr/local/bin/php-config
9c9
< include_dir="${prefix}/include/php"
---
> include_dir="/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/php"
Bước 5. Xây dựng phần mở rộng zip PHP
Với tất cả những thay đổi đó, giờ đây tôi có thể tạo tiện ích mở rộng zip
cd zip-1.15.5
phpize
./configure -with-php-config=/usr/local/bin/php-config
make
Bước 6. Cài đặt tiện ích mở rộng zip PHP
thực hiện cài đặt không thể cài đặt tiện ích mở rộng, một lần nữa do hệ thống tệp chỉ đọc. Vì vậy, thay vào đó tôi đã tạo một thư mục mở rộng trong /usr/local/php
________số 8_______Bước 7. Cập nhật PHP của bạn. ban đầu
Cuối cùng, chúng ta cần yêu cầu PHP tải tiện ích mở rộng này
sudo vim /etc/php.ini
Thêm dòng sau. cd /tmp
curl -s -O //pear.php.net/install-pear-nozlib.phar
sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin
0Khởi động lại apache với sudo apachectl restart và bạn sẽ thấy tiện ích zip đang được tải ngay bây giờTôi hy vọng cộng đồng phát triển PHP và Mac sẽ giải quyết các vấn đề với hệ thống tệp chỉ đọc khiến quá trình tạo và cài đặt PECL không thành công, nhưng biết cách biên dịch các phần mở rộng PHP của riêng bạn và sử dụng chúng với hệ thống PHP trên OS X là cực kỳ hữu ích. Có lẽ quy trình này có thể được sử dụng cho các tiện ích mở rộng PHP hữu ích khác như xdebug