2010-02-19 28 views
12

Tôi đang tạo một ứng dụng web bằng PHP và muốn đọc nội dung từ một miền khác. Có vẻ như các tùy chọn chính của tôi là fopencurl.Sự khác biệt lớn nhất giữa fopen và curl là gì?

Sự khác nhau chính giữa hai phương pháp này, đặc biệt là về bảo mật và các tùy chọn có sẵn là gì?

Có quan trọng nếu url là trang web http hoặc https không?

+0

Câu hỏi không quá nhiều về những gì 'fopen' có thể làm, nhưng những gì mà trình bao bọc luồng HTTP/HTTPS có thể thực hiện. Kiểm tra http://de.php.net/manual/en/wrappers.http.php – Gordon

Trả lời

16

Curl sử dụng thư viện bên ngoài và có nhiều quyền lực hơn để tùy chỉnh yêu cầu - tiêu đề tùy chỉnh, tạo yêu cầu POST, tải tệp lên. Mọi thứ bạn cần tôi phải nói.

Fopen bị giới hạn chỉ thực hiện yêu cầu GET của url mà không cần tùy chỉnh thêm.

Đối với bảo mật CURL không bị ảnh hưởng bởi cấu hình bảo mật trong PHP (như fensen bị cấm của URL từ xa và như vậy).

Cả hai khả năng sẽ trả về dữ liệu mà bạn có thể sử dụng theo mọi cách có thể bạn muốn. Nếu bạn thực hiện một lỗ hổng bảo mật trong dự án của bạn, sau khi nhận được dữ liệu là lỗi của bạn sau khi tất cả.

Ngoài ra tôi không hoàn toàn chắc chắn nhưng tôi nghĩ rằng fopen không thể xử lý các kết nối SSL (https). Cả hai fopen và hỗ trợ CURL SSL (như được ghi nhận bởi Andy Shellam trong một bình luận dưới đây).

+2

fopen hỗ trợ HTTPS cung cấp bạn đã biên dịch PHP chống lại OpenSSL. –

+0

Cảm ơn bạn đã lưu ý, Andy! Bây giờ tôi biết một điều nữa về PHP :) – bisko

+0

Có thể thực hiện yêu cầu POST với fopen quá. Ví dụ http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/ Theo ý kiến ​​của tôi curl được sử dụng nơi mọi người muốn nhận được xung quanh các thiết lập bảo mật PHP, cá nhân tôi đã sử dụng chỉ fopen và không có vấn đề cho đến nay. –

2

Xem What are the important differences between using fopen($url) and curl in PHP? đối với một số cài đặt bảo mật ảnh hưởng đến fopen cụ thể là allow_url_include.

Ngoài ra, hãy lưu ý rằng với curl nếu bạn thiết lập CURLOPT_FOLLOWLOCATION thì curl sẽ chuyển hướng sau sang tệp: // để tìm nạp dữ liệu (vẫn phải chịu open_basedir). Chuyển hướng đến các lược đồ khác như ftp: // có thể tồi tệ hơn (chưa được kiểm tra ftp: //). Nếu không có curl setopt đó không theo chuyển hướng nào cả. fopen dường như hoạt động với 302 theo mặc định nhưng chỉ http: // -> http: // và không phải http: // -> tệp: //.

Các vấn đề liên quan