Xin chào,
Tôi vừa thử nghiệm nó và có thể cài đặt tiện ích mở rộng ssh2 php trong Rocky Linux 8
root@rocky ~]# php -m |grep ssh
ssh2
[root@rocky ~]#
Tôi đã sử dụng bước dưới đây
dnf cài đặt libssh2-devel. x86_64
pecl tìm kiếm ssh2
cài đặt pecl -a ssh2-1. 3. 1
tiếng vang “tiện ích mở rộng = ssh2. vậy” > /etc/php. d/40-ssh2. ban đầu
Tôi đang sử dụng php7. 4
[root@rocky ~]# php -v
PHP 7.4.19 [cli] [built: May 4 2021 11:06:37] [ NTS ]
Copyright [c] The PHP Group
Zend Engine v3.4.0, Copyright [c] Zend Technologies
with Zend OPcache v7.4.19, Copyright [c], by Zend Technologies
[root@rocky ~]#
Bài viết này mô tả sự cố mà tôi gặp phải khi phát triển ứng dụng SSH với PHP 8. 0 trên Windows 10 và giải pháp
Môi trường
- Windows 10 Chuyên nghiệp
- XAMPP 8. 0. 6 – 2021-05-11
- PHP8. 0. 6
Mã ví dụ
1
2
3
4
5
6
7
8
9
10
11
12
13
$kết nối = ssh2_connect[$host, $port, array['hostkey'=>'ssh-rsa']];
if [ssh2_auth_pubkey_file[
$kết nối,
$tên người dùng,
$filename_pub,
$filename_prv,
$filename_pwd]]
{
echo "Xác thực khóa công khai thành công\n";
} khác {
chết['Xác thực khóa công khai không thành công'];
}
Dòng mã có vấn đề
1
$kết nối = ssh2_connect[$host, $port, array['hostkey'=>'ssh-rsa']];
Tạo ra lỗi này
1
2
3
4
Lỗi nghiêm trọng. Không phát hiện được Lỗi. Gọi đến hàm không xác định ssh2_connect . [] in ssh-copy-id.php. 17
Ngăn xếp dấu vết.
#0 {chính}
ném vào ssh-copy-id.php trên dòng 17
Sau đó tôi đã kiểm tra php. ini để xác minh rằng phần mở rộng PHP extension=php_ssh2. dll đã được tải. Nó không phải là
Tôi đã bỏ ghi chú [đã bật] dòng này và kiểm tra kỹ rằng php_ssh2. dll nằm trong thư mục ext
Sau đó, tôi nhận được một lỗi khác
1
Cảnh báo. PHP Khởi động. Không thể to tải thư viện động . dll' 'php_ssh2.dll' [đã thử. C. \xampp\php\ . ext\php_ssh2.dll [Mô-đun được chỉ định . could not be found], C:\xampp\php\ . ext\php_php_ssh2.dll. dll [Mô-đun được chỉ định module could not be found]] in Unknown on line 0
Hmm, DLL ở đó, nhưng tôi không biết DLL đó đến từ đâu hoặc phiên bản của nó
Tôi đã mở thư mục trong Windows Explorer, nhấp chuột phải vào tệp và chọn Thuộc tính. Tab chi tiết hiển thị như sau
Phiên bản Sản phẩm DLL là 7. 4. 13
Một phương pháp khác sử dụng PowerShell
1
2
3
4
powershell '[Nhận vật phẩm ". /php_ssh2. dll"]. Thông tin phiên bản. Phiên bản sản phẩm'
Đầu ra.
7. 4. 13
Cái nào cũng hiển thị phiên bản là 7. 4. 13. PHP 8 có lẽ cần một phiên bản mới hơn
Ghi chú. sau này trong bài viết này, tôi khám phá ra lý do tại sao. PHP có phiên bản API mở rộng
Giải pháp
Vào trang tải xuống PECL cho SSH2, tôi đã tải xuống phiên bản gói mới nhất, 1. 3. 1 cho 64-bit An toàn luồng VS16. Tôi chọn VS16 vì XAMPP phiên bản 8. 0. 6 chỉ định VS16. VS16 có nghĩa là trình biên dịch được đóng gói với Visual Studio 2019. []
Sử dụng các phương pháp trước đó, tôi đã kiểm tra phiên bản. Gói SSH2 phiên bản 1. 3. 1 chứa phiên bản DLL 8. 0. 0. Cần làm việc. Đã tải xuống tệp zip, giải nén và sao chép thủ công tệp DLL và PDB vào thư mục ext
Sau đó tôi đã thử lại chương trình của mình và thành công
1
2
php ssh-bản sao-id.php
Khóa Công khai Xác thực Thành công
Thông tin chi tiết
XAMPP Phiên bản 8. 0. 6
Vì sự cố xảy ra trên hệ thống sử dụng XAMPP 8. 0. 6, tôi muốn kiểm tra lại xem XAMPP có vấn đề gì không. Điều này có nghĩa là tạo một hệ thống mới và cài đặt XAMPP
Tôi đã tạo một máy ảo với Windows 10 Professional và cài đặt XAMPP 8. 0. 6. Sau đó tôi đã kiểm tra C. thư mục \xampp\php\ext. php_ssh2. không tìm thấy dll. Điều này có nghĩa là ai đó đã sao chép DLL theo cách thủ công từ bản cài đặt cũ hơn sang hệ thống có vấn đề của tôi
XAMPP không phải là nguồn gốc của vấn đề. Lỗi của con người rất có thể là nguồn gốc của vấn đề
Phát hiện tiện ích mở rộng
Đoạn mã sau sẽ phát hiện nếu tiện ích mở rộng được cài đặt
1
2
3
4
nếu [. extension_loaded['ssh2']] {
echo 'Lỗi. Chương trình này yêu cầu phần mở rộng PHP ssh2' . PHP_EOL;
thoát[1];
}
Tuy nhiên, ví dụ này không ngăn thông báo cảnh báo PHP nếu tiện ích mở rộng được cài đặt nhưng không tải đúng cách
1
Cảnh báo. PHP Khởi động. Không thể to tải thư viện động . 'ssh2' [tried: C. \xampp\php\ . ext\ssh2 [The specified module could not be found], C:\xampp\php\ . ext\php_ssh2.dll [Mô-đun được chỉ định module could not be found]] in Unknown on line 0
Tệp PHP INI
Để xác định php. ini, hãy thực hiện lệnh này
1
php --ini
Ghi chú. Nếu bạn đã cấu hình Apache với PHP, bạn sẽ có hai hoặc nhiều php. vị trí ini. Một cho CLI và một cho Apache. Trong trường hợp của tôi, tôi cài đặt PHP-FPM, vì vậy có một phần ba
Đối với Apache, tạo một tệp PHP “không dễ tìm” với nội dung sau
1
2
20200930 Tôi không biết về phiên bản API. Chi tiết lỗi từ PHP 8. 1 Cảnh báo. Khởi động PHP. ssh2. Không thể khởi tạo mô-đun Chuỗi TS,VS16 có nghĩa là Thread-Safe Visual Studio 2019. Điều đó giúp xác định cách biên dịch và xây dựng php_ssh2. dll CLI có thể tải tiện ích mở rộng PHP bằng tùy chọn dòng lệnh 1 2 3 php -d tiện ích mở rộng=C:/xampp/php/ . ext/php_ssh2 test.php php -d tiện ích mở rộng=php_ssh2 test.php Điều này hữu ích khi phát triển ngoại lệ và xử lý lỗi cho tiện ích mở rộng Windows 10 Chuyên nghiệp Ubuntu 20. 04 thẻ. PHP, PHP8, SSH Để cài đặt các ràng buộc LIBSSH2 cho PHP 8 trên Windows 10, hãy hoàn thành các bước sau Phát triển phần mềm không chỉ là viết mã. Chúng ta cần biết cách định cấu hình hệ thống và ghi lại các quy trình đó. Ngoài ra, điều quan trọng là chúng ta cần viết mã hoặc tập lệnh để định cấu hình và kiểm tra môi trường của mình. Không có gì tệ hơn là làm việc nhiều giờ, phát hành một sản phẩm tuyệt vời mà sau đó trở thành cơn ác mộng hỗ trợ khách hàng Tôi viết bài miễn phí về công nghệ. Gần đây, tôi đã biết về Pexels. com cung cấp hình ảnh miễn phí. Hình ảnh trong bài viết này được cung cấp bởi Pixabay tại Pexels
Mô-đun được biên dịch với API mô-đun=20200930
PHP được biên dịch với API mô-đun=20210902Đang tải tiện ích mở rộng khi chạy
câu hỏi chưa được giải quyết
Thêm thông tin
Thẻ bài viết
Tóm lược
Tín dụng nhiếp ảnh
John Hanley
Tôi thiết kế phần mềm cho các hệ thống cấp doanh nghiệp và trung tâm dữ liệu. Nền tảng của tôi là hơn 30 năm về ảo hóa lưu trữ [SCSI, FC, iSCSI, mảng đĩa, hình ảnh]. Hơn 20 năm trong lĩnh vực nhận dạng, bảo mật và pháp y
Trong hơn 14 năm qua, tôi đã làm việc trong lĩnh vực đám mây [AWS, Azure, Google, Alibaba, IBM, Oracle] để thiết kế các giải pháp phần mềm lai và đa đám mây. Tôi là một MVP/GDE với một số