Lỗi cURL 60: Chứng chỉ SSL: không thể lấy chứng chỉ nhà phát hành địa phương


232

Tôi sử dụng WAMP trên môi trường phát triển cục bộ và đang cố gắng tính phí thẻ tín dụng nhưng nhận được thông báo lỗi:

Lỗi cURL 60: Sự cố chứng chỉ SSL: không thể nhận chứng chỉ nhà phát hành địa phương

Tôi đã tìm kiếm rất nhiều trên Google và rất nhiều người đề nghị tôi tải xuống tệp này: cacert.pem , đặt nó ở đâu đó và tham chiếu nó trong php.ini của tôi. Đây là một phần trong php.ini của tôi:

curl.cainfo = "C:\Windows\cacert.pem"

Tuy nhiên, ngay cả sau khi khởi động lại máy chủ của tôi nhiều lần và thay đổi đường dẫn, tôi vẫn nhận được thông báo lỗi tương tự.

Tôi sử dụng WAMP từ các Mô-đun Apache và kích hoạt ssl_module. Và từ các phần mở rộng PGP, tôi đã kích hoạt php_curl.

Vẫn là thông báo lỗi tương tự. Tại sao điều đó xảy ra?

Bây giờ tôi đang theo cách khắc phục này: Cách sửa lỗi PHP CURL Error 60 SSL

Điều đó cho thấy rằng tôi thêm các dòng này vào các tùy chọn cURL của mình:

curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, true);

Tôi phải thêm tùy chọn vào cURL ở đâu? Rõ ràng là không thông qua dòng lệnh, vì CLI của tôi không tìm thấy lệnh "curl_setopt"

BIÊN TẬP

Đây là mã tôi đang chạy:

public function chargeStripe()
{
    $stripe = new Stripe;
    $stripe = Stripe::make(env('STRIPE_PUBLIC_KEY'));

    $charge = $stripe->charges()->create([
        'amount'   => 2900,
        'customer' => Input::get('stripeEmail'),
        'currency' => 'EUR',
    ]);

    dd($charge);

    // echo $charge[Input::get('stripeToken')];


    return Redirect::route('step1');
}

Giả sử không có vấn đề với mã của bạn, nó có thể là tường lửa của bạn. Hãy thử vô hiệu hóa tường lửa của bạn để kiểm tra.
Waqar ul islam

Tôi đã không cho bạn câu trả lời cho câu hỏi này ở đây ? :)
Limon Monte

@limonte có thể, đã phải chuyển đổi dự án và có thể có cùng một vấn đề với dự án mới. Sẽ chuyển trở lại vấn đề khó khăn và có thể đó là cách khắc phục tương tự. BRB
LoveAndHappiness

1
Bạn đã thử phiên bản mới nhất của sọc chưa? Tôi thấy một thông điệp cam kết đã thay đổi một cái gì đó để làm với certs ... github.com/stripe/stripe-php/commit/ mẹo
thelastshadow

1
@LoveAndHappiness bạn đã có giải pháp cho vấn đề này chưa? Tôi đang đối mặt với cùng một lỗi với sọc. Xin vui lòng cho tôi biết nếu bạn có bất kỳ giải pháp.
Dev

Câu trả lời:


515

Giải pháp hoạt động giả định trên Windows của bạn bằng XAMPP:

Máy chủ XAMPP

  1. Tương tự cho môi trường khác
    • tải xuống và giải nén cho cacert.pem tại đây (định dạng / dữ liệu tệp sạch)

https://curl.haxx.se/docs/caextract.html

  1. Đặt nó ở đây trong thư mục sau.

C: \ xampp \ php \ extend \ ssl \ cacert.pem

  1. Trong php.ini của bạn, hãy đặt dòng này trong phần này ("c: \ xampp \ php \ php.ini"):
;;;;;;;;;;;;;;;;;;;;
; php.ini Options  ;
;;;;;;;;;;;;;;;;;;;;

curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
  1. Khởi động lại máy chủ web / apache của bạn

  2. Vấn đề được giải quyết!

(Tham khảo: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate )


6
Thông báo này đến vì phiên bản PHP của bạn. Nếu nó cao hơn PHP 5.5 thì sẽ xuất hiện lỗi này do tính năng mới của 5.6 5.6. Kiểm tra chứng chỉ PHP 5.6 nếu bạn đang sử dụng cURL.
UWU_SANDUN

9
Cảm ơn câu trả lời! Mặc dù tôi sẽ khuyên bạn nên sử dụng cacert.pem từ trang curl chính thức: curl.haxx.se/docs/caextract.html
dieBeiden

6
Chỉ muốn chỉ ra cho bất kỳ ai không thể làm việc này - tôi đã sử dụng dấu gạch chéo về phía trước curl.cainfo = "C:/cacert.pem"và cũng phải khởi động lại máy tính của mình để làm cho nó hoạt động. Chỉ cần khởi động lại máy chủ web là không đủ. Hy vọng rằng sẽ giúp:]
space_food_ 20/1/18

1
và đừng quên uncomment curl.cainfo(facepalm)
Edmund Sulzanok

Làm việc như người ở! Cảm ơn
Jack

54

Chú ý Wamp / Wordpress / windows người dùng. Tôi đã gặp vấn đề này trong nhiều giờ và thậm chí không có câu trả lời chính xác nào cho tôi vì tôi đã chỉnh sửa tệp php.ini sai vì câu hỏi đã được trả lời cho XAMPP chứ không phải cho người dùng WAMP, mặc dù câu hỏi là dành cho WAMP.

đây là những gì tôi đã làm

Tải về gói chứng chỉ.

Đặt nó bên trong C:\wamp64\bin\php\your php version\extras\ssl

Hãy chắc chắn rằng tập tin mod_ssl.sonằm trongC:\wamp64\bin\apache\apache(version)\modules

Cho phép mod_sslvào httpd.confbên trong thư mục ApacheC:\wamp64\bin\apache\apache2.4.27\conf

Kích hoạt php_openssl.dlltrong php.ini. Lưu ý rằng vấn đề của tôi là tôi có hai tệp php.ini và tôi cần phải làm điều này trong cả hai tệp. Đầu tiên có thể được đặt bên trong biểu tượng thanh tác vụ WAMP của bạn ở đây.

nhập mô tả hình ảnh ở đây

và một cái khác nằm ở C:\wamp64\bin\php\php(Version)

tìm vị trí cho cả hai php.initệp và tìm dòng curl.cainfo =và cung cấp cho nó một đường dẫn như thế này

curl.cainfo = "C:\wamp64\bin\php\php(Version)\extras\ssl\cacert.pem"

Bây giờ hãy lưu các tệp và khởi động lại máy chủ của bạn và bạn sẽ thấy ổn


Sẽ ít hơn khi bạn phải thực hiện cả php.ini so với thực hiện cái bạn định sử dụng: nếu bạn đang sử dụng apache với tư cách là máy khách SAPI, sau đó sửa đổi một trong thư mục apache và / hoặc sửa đổi một trong ứng dụng khách dir nếu bạn đang dự định sử dụng php.exe làm SAPI.
Fabien Haddadi

3
"Tôi cần phải làm điều này trong cả hai" là lưu ý chính. Cảm ơn bạn
Jaroslav Klimčík

1
Điều này hoạt động cho Laravel 5.5 với "guzzthttp / guheads": "^ 6.3". Máy chủ ướt 3.1.3. Php 7.1 *
Deepesh Thapa

Điều này đã làm việc. Cảm ơn
user4906240 11/03/19

Cảm ơn bạn đã trả lời cho wamp
altoids

46

Nếu bạn đang sử dụng PHP 5.6 với Guheads, Guheads đã chuyển sang sử dụng tự động phát hiện thư viện PHP cho các chứng chỉ thay vì xử lý ( ref ). PHP phác thảo những thay đổi ở đây .

Tìm ra nơi PHP / Guheads đang tìm kiếm Chứng chỉ

Bạn có thể kết xuất nơi PHP đang tìm kiếm bằng cách sử dụng:

 var_dump(openssl_get_cert_locations());

Nhận gói chứng chỉ

Để kiểm tra OS X, bạn có thể sử dụng homebrew để cài đặt openssl brew install opensslvà sau đó sử dụng openssl.cafile=/usr/local/etc/openssl/cert.pemtrong cài đặt php.ini hoặc Zend Server của bạn (trong OpenSSL).

Gói chứng chỉ cũng có sẵn từ curl / Mozilla trên trang web curl: https://curl.haxx.se/docs/caextract.html

Nói với PHP nơi các chứng chỉ

Khi bạn có một gói, hãy đặt nó ở nơi PHP đang tìm kiếm (mà bạn đã tìm thấy ở trên) hoặc cập nhật openssl.cafiletrong php.ini. (Nói chung, /etc/php.inihoặc /etc/php/7.0/cli/php.inihoặc /etc/php/php.initrên Unix.)


3
ĐÚNG. Sau khi thấy quá nhiều người đề xuất cách tiếp cận rõ ràng là hạ cấp bởi nhiều số phiên bản, đây là cách tiếp cận đúng. Tôi đã làm theo lời khuyên của người khác về quán cà phê nhưng không có phương tiện kiểm tra tại sao nó vẫn không tải. Hàm openssl_get_cert_locations () này thực sự đã làm công việc xác định vấn đề của tôi. Cảm ơn!
Web và Flow

1
Cảm ơn bạn đã cung cấp openssl_get_cert_locations, nó làm cho việc gỡ lỗi dễ dàng hơn nhiều. Có vẻ như WAMP sử dụng tệp ini khác nhau cho php apache so với php console. Trong trường hợp của tôi, tôi đã phải thêm openssl.cafile="c:/_/cacert.pem"cho php dựa trên giao diện điều khiển. Lần trước, khi sử dụng nó thông qua apache, tôi cần curl.cainfo="c:/_/cacert.pem"phải làm cho nó hoạt động.
tâm lý brm

16

Guzz, được sử dụng bởi cartalyst / sọc , sẽ làm như sau để tìm một kho lưu trữ chứng chỉ phù hợp để kiểm tra chứng chỉ máy chủ đối với:

  1. Kiểm tra nếu openssl.cafileđược đặt trong tệp php.ini của bạn.
  2. Kiểm tra nếu curl.cainfođược đặt trong tệp php.ini của bạn.
  3. Kiểm tra xem /etc/pki/tls/certs/ca-bundle.crtcó tồn tại không (Red Hat, CentOS, Fedora; được cung cấp bởi gói chứng chỉ ca)
  4. Kiểm tra xem /etc/ssl/certs/ca-certificates.crtcó tồn tại không (Ubuntu, Debian; được cung cấp bởi gói chứng chỉ ca)
  5. Kiểm tra xem /usr/local/share/certs/ca-root-nss.crtcó tồn tại không (FreeBSD; được cung cấp bởi gói ca_root_nss)
  6. Kiểm tra xem /usr/local/etc/openssl/cert.pem(OS X; được cung cấp bởi homebrew)
  7. Kiểm tra nếu C:\windows\system32\curl-ca-bundle.crttồn tại (Windows)
  8. Kiểm tra nếu C:\windows\curl-ca-bundle.crttồn tại (Windows)

Bạn sẽ muốn đảm bảo rằng các giá trị cho hai cài đặt đầu tiên được xác định chính xác bằng cách thực hiện một thử nghiệm đơn giản:

echo "openssl.cafile: ", ini_get('openssl.cafile'), "\n";
echo "curl.cainfo: ", ini_get('curl.cainfo'), "\n";

Ngoài ra, hãy thử ghi tệp vào các vị trí được chỉ định bởi # 7 hoặc # 8.


12

Nếu bạn không thể thay đổi php.ini, bạn cũng có thể trỏ đến tệp cacert.pem từ mã như thế này:

$http = new GuzzleHttp\Client(['verify' => '/path/to/cacert.pem']);
$client = new Google_Client();
$client->setHttpClient($http);

8

Những gì tôi đã làm là sử dụng var_dump(openssl_get_cert_locations()); die;trong bất kỳ tập lệnh php nào, nó cung cấp cho tôi thông tin về các mặc định mà php cục bộ của tôi đang sử dụng:

array (size=8)
  'default_cert_file' => string 'c:/openssl-1.0.1c/ssl/cert.pem' (length=30)
  'default_cert_file_env' => string 'SSL_CERT_FILE' (length=13)
  'default_cert_dir' => string 'c:/openssl-1.0.1c/ssl/certs' (length=27)
  'default_cert_dir_env' => string 'SSL_CERT_DIR' (length=12)
  'default_private_dir' => string 'c:/openssl-1.0.1c/ssl/private' (length=29)
  'default_default_cert_area' => string 'c:/openssl-1.0.1c/ssl' (length=21)
  'ini_cafile' => string 'E:\xampp\php\extras\ssl\cacert.pem' (length=34)
  'ini_capath' => string '' (length=0)

Như bạn có thể nhận thấy, tôi đã đặt ini_cafile hoặc tùy chọn ini curl.cainfo. Nhưng trong trường hợp của tôi, curl sẽ cố gắng sử dụng "default_cert_file" không tồn tại.

Tôi đã sao chép tệp từ https://curl.haxx.se/ca/cacert.pem vào vị trí cho "default_cert_file" (c: /openssl-1.0.1c/ssl/cert.pem) và tôi đã có thể lấy nó làm việc.

Đây là giải pháp duy nhất cho tôi.


Tôi có vấn đề tương tự và vị trí của tôi là một cái gì đó như c: /usr/local/ssl/cert.pem nhưng vị trí này không tồn tại, bạn có biết nó là gì không, hơn nữa, dự án tương tự được sử dụng bởi máy coluge của tôi trên máy mac có thể đó là lý do, tôi đã thử mọi thứ khác, đó là thêm vị trí chứng chỉ trong tệp .ini nhưng nó không hoạt động, có vẻ như giải pháp của bạn sẽ hoạt động vì nó hợp lý nhưng không thể thay đổi vị trí đó và không thể đặt chứng chỉ ở vị trí không tồn tại.
AbdulMue

Bạn có thể thử tạo thư mục và đặt chứng chỉ tại đường dẫn đã chỉ định của mình không?
George Donev

7

Một ngày nọ, tôi gặp phải vấn đề này, khi một tập lệnh Gu khó (5) đang cố gắng kết nối với máy chủ qua SSL. Chắc chắn, tôi có thể vô hiệu hóa tùy chọn XÁC MINH trong Guheads / Curl, nhưng rõ ràng đó không phải là cách chính xác để đi.

Tôi đã thử mọi thứ được liệt kê ở đây và trong các luồng tương tự, sau đó cuối cùng đã đi đến terminal với openssl để kiểm tra tên miền mà tôi đang cố gắng kết nối:

openssl s_client -connect example.com:443 

... và nhận được vài dòng đầu tiên cho biết:

CONNECTED(00000003)
depth=0 CN = example.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = example.com
verify error:num=21:unable to verify the first certificate
verify return:1 

... Trong khi mọi thứ hoạt động tốt khi thử các điểm đến khác (ví dụ: google.com, v.v.)

Điều này đã thôi thúc tôi liên hệ với tên miền mà tôi đã cố gắng kết nối và thực sự, họ đã gặp sự cố trên THEIR END đã xuất hiện. Nó đã được giải quyết và kịch bản của tôi đã trở lại làm việc.

Vì vậy, ... nếu bạn đang nhổ tóc của mình, hãy chụp opensl và xem liệu có bất cứ điều gì xảy ra với phản hồi từ vị trí bạn đang cố gắng kết nối không. Có lẽ đôi khi vấn đề không phải là "cục bộ".


6

Tôi tìm thấy một giải pháp làm việc cho tôi. Tôi đã hạ cấp từ phiên bản mới nhất xuống phiên bản ~ 4.0 và nó đã hoạt động.

Trong composer.json, thêm "guzzthttp / guheads": "~ 4.0"

Hy vọng nó sẽ giúp được ai đó


Điều đó cũng sẽ ngăn bạn sử dụng bất kỳ phiên bản 5/6 tính năng nào. Thay vào đó, chỉ cần đặt xác minh thành false trong một mảng param (phương thức yêu cầu thứ 3): $ client-> request ('GET', '/', ['verify' => false]);
S ..

3

Hãy chắc chắn rằng bạn mở php.initệp trực tiếp bằng Window Explorer. (trong trường hợp của tôi C:\DevPrograms\wamp64\bin\php\php5.6.25:).

Không sử dụng phím tắt php.initrong menu của biểu tượng Wamp / Xamp trong Khay hệ thống. Phím tắt này không hoạt động trong trường hợp này.

Sau đó chỉnh sửa php.ini:

curl.cainfo ="C:/DevPrograms/wamp64/bin/php/cacert.pem" 

openssl.cafile="C:/DevPrograms/wamp64/bin/php/cacert.pem"

Sau khi lưu, php.inibạn không cần "Khởi động lại tất cả các dịch vụ" trong biểu tượng Wamp hoặc đóng / mở lại CMD.


2

Bạn đã thử chưa ..

curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);

Nếu bạn đang tiêu thụ một nguồn đáng tin cậy thì bạn không cần phải xác minh chứng chỉ SSL.


2

Tôi đã dành quá nhiều thời gian để tìm ra vấn đề này cho tôi.

Tôi đã có phiên bản PHP 5.5 và tôi cần nâng cấp lên 5.6.

Trong các phiên bản <5.6 Guheads sẽ sử dụng tệp cacert.pem của riêng nó, nhưng trong các phiên bản cao hơn của PHP, nó sẽ sử dụng tệp cacert.pem của hệ thống.

Tôi cũng đã tải xuống tệp từ đây https://curl.haxx.se/docs/caextract.html và đặt nó trong php.ini.

Câu trả lời được tìm thấy trong tập tin Guzzles StreamHandler.php https://github.com/guzzle/guzzle/blob/0773d442aa96baf19d7195f14ba6e9c2da11f8ed/src/Handler/StreamHandler.php#L437

        // PHP 5.6 or greater will find the system cert by default. When
        // < 5.6, use the Guzzle bundled cacert.

2

Tất cả các câu trả lời là chính xác ; nhưng điều quan trọng nhất là Bạn phải tìm đúng tệp php.ini. kiểm tra lệnh này trong cmd "php --ini" không phải là câu trả lời đúng cho việc tìm đúng tệp php.ini.

nếu bạn chỉnh sửa

curl.cainfo ="PATH/cacert.pem"

và kiểm tra

var_dump(openssl_get_cert_locations()); 

thì curl.cainfo nên có một giá trị. nếu không thì đó không phải là tập tin php.ini;

* Tôi khuyên bạn nên tìm kiếm * .ini trong wamp / bin hoặc xxamp / bin hoặc bất kỳ máy chủ nào bạn sử dụng và thay đổi từng cái một và kiểm tra nó. *


1

Tôi vừa trải qua vấn đề tương tự với khung php Laravel 4 sử dụng guzzlehttp/guzzlegói soạn thảo. Vì một số lý do, chứng chỉ SSL cho mailgun đột nhiên dừng xác nhận và tôi nhận được thông báo "lỗi 60" tương tự.

Nếu, giống như tôi, bạn đang ở trên một lưu trữ được chia sẻ mà không có quyền truy cập php.ini, các giải pháp khác là không thể. Trong mọi trường hợp, Guheads có mã khởi tạo ứng dụng khách này rất có thể sẽ vô hiệu hóa các php.inihiệu ứng:

// vendor/guzzlehttp/guzzle/src/Client.php
    $settings = [
        'allow_redirects' => true,
        'exceptions'      => true,
        'decode_content'  => true,
        'verify'          => __DIR__ . '/cacert.pem'
    ];

Ở đây, Guheads buộc sử dụng tệp cacert.pem nội bộ của chính nó, hiện có thể đã hết hạn, thay vì sử dụng tệp được cung cấp bởi môi trường của cURL . Thay đổi dòng này (ít nhất là trên Linux) định cấu hình Gạc để sử dụng logic xác minh SSL mặc định của cURL và khắc phục sự cố của tôi:

        'verify'          => true

Bạn cũng có thể đặt điều này thành falsenếu bạn không quan tâm đến tính bảo mật của kết nối SSL, nhưng đó không phải là một giải pháp tốt.

Vì các tệp trong vendorkhông có nghĩa là bị giả mạo, nên một giải pháp tốt hơn là cấu hình máy khách Guheads khi sử dụng, nhưng điều này quá khó thực hiện trong Laravel 4.

Hy vọng điều này sẽ cứu người khác một vài giờ gỡ lỗi ...


1

Đây có thể là một trường hợp cạnh, nhưng trong trường hợp của tôi, vấn đề không phải là máy khách (tôi đã được curl.cainfocấu hình php.ini), mà là máy chủ từ xa không được cấu hình đúng:

Nó đã không gửi bất kỳ certs trung gian trong chuỗi. Không có lỗi khi duyệt trang web bằng Chrome, nhưng với PHP tôi đã gặp lỗi sau.

lỗi cURL 60

Sau khi bao gồm các Certs trung gian trong cấu hình máy chủ web từ xa, nó đã hoạt động.

Bạn có thể sử dụng trang này để kiểm tra cấu hình SSL của máy chủ của bạn:

https://whatsmychaincert.com/


1

Khi tôi chạy, 'var_dump(php_ini_loaded_file());' tôi nhận được kết quả này trên trang của mình 'C:\Development\bin\apache\apache2.4.33\bin\php.ini' (length=50)'

và để có được php để tải tệp chứng chỉ của tôi, tôi đã phải chỉnh sửa php.ini trong đường dẫn này 'C:\Development\bin\apache\apache2.4.33\bin\php.ini' và thêm vào openssl.cafile="C:/Development/bin/php/php7.2.4/extras/ssl/cacert.pem"nơi tôi đã tải xuống và đặt tệp chứng chỉ của mình từ https://curl.haxx.se/docs/caextract.html

sáng trên windows 10, sử dụng drupal 8, wamp và php7.2.4


0

Tôi có một giải pháp thích hợp cho vấn đề này, hãy thử và hiểu nguyên nhân gốc rễ của vấn đề này. Vấn đề này xảy ra khi ssl máy chủ từ xa không thể được xác minh bằng chứng chỉ gốc trong kho chứng chỉ hệ thống của bạn hoặc ssl từ xa không được cài đặt cùng với chứng chỉ chuỗi. Nếu bạn có một hệ thống linux có quyền truy cập ssh gốc, thì trong trường hợp này, bạn có thể thử cập nhật kho chứng chỉ của mình bằng lệnh dưới đây:

update-ca-certificates

Nếu vẫn không hoạt động thì bạn cần thêm chứng chỉ gốc và tạm thời của máy chủ từ xa trong cửa hàng chứng chỉ của bạn. Bạn có thể tải xuống các certs gốc và trung gian và thêm chúng vào thư mục / usr / local / share / ca-cert rồi chạy lệnh update-ca-certificates. Cái này cần phải dùng mẹo. Tương tự cho các cửa sổ, bạn có thể tìm kiếm cách thêm chứng chỉ gốc và chứng chỉ trung gian.

Một cách khác để bạn có thể giải quyết vấn đề này là yêu cầu nhóm máy chủ từ xa thêm chứng chỉ ssl dưới dạng một gói chứng chỉ gốc, chứng chỉ trung gian và chứng chỉ gốc.


-1

Khi bạn đang sử dụng Windows, tôi nghĩ rằng dấu tách đường dẫn của bạn là '\' (và '/' trên Linux). Hãy thử sử dụng hằng số DIRECTORY_SEPARATOR. Mã của bạn sẽ dễ mang theo hơn.

Thử:

curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cacert.pem');

EDIT: và viết đường dẫn đầy đủ. Tôi đã có một số vấn đề với các đường dẫn tương đối (có lẽ curl được thực thi từ một thư mục cơ sở khác?)


1
Điều này sẽ không tạo ra sự khác biệt, vì các cài đặt cURL thực tế nằm ngoài tầm kiểm soát của bạn khi bạn sử dụng thư viện Stripe cụ thể đó.
Ja͢ck

-1

nếu bạn sử dụng WAMP, bạn cũng nên thêm dòng chứng chỉ trong php.ini cho Apache (bên cạnh tệp php.ini mặc định):

[curl]
curl.cainfo = C:\your_location\cacert.pem

hoạt động cho php5.3 +


Đúng! Hãy cẩn thận để chỉnh sửa các tập tin php.ini apache và php. Đối với người dùng WAMP, câu trả lời này là cách duy nhất để giải quyết vấn đề của tôi: stackoverflow.com/questions/28858351/ Lời
MavBzh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.