2012-06-17 26 views
7

Chúng tôi có một url như http://site.s3.amazonaws.com/images/some image @name.jpg bên $stringURLEncode và file_get_contents

Những gì tôi đang cố gắng để làm (vâng, có một khoảng trắng xung quanh url):

$string = urlencode(trim($string)); 
$string_data = file_get_contents($string); 

Những gì tôi nhận được (@ là cũng thay thế):

file_get_contents(http%3A%2F%2Fsite.s3.amazonaws.com%2Fimages%[email protected])[function.file-get-contents]: failed to open stream: No such file or directory

Nếu bạn sao chép/dán http://site.s3.amazonaws.com/images/some image @name.jpg vào thanh địa chỉ của trình duyệt, hình ảnh sẽ op vi.

Điều gì là xấu và cách khắc phục điều đó?

+2

Vì vậy, bạn chuyển URL thành URL không hợp lệ và sau đó bạn tự hỏi rằng URL này không hoạt động? Câu hỏi đó là gì? Xin hãy giải thích. – hakre

+1

Và ai đã nói với bạn rằng 'file_get_contents' trong PHP hoặc trình bao bọc dòng http trong PHP hoạt động chính xác như thanh địa chỉ trình duyệt của bạn? Bạn có thể muốn đọc về các đặc tả kỹ thuật đầu tiên trước khi sử dụng tính năng đó trong PHP. Tôi đề nghị bạn nên bắt đầu đọc hướng dẫn. – hakre

+0

Tôi không thể quấn quanh đầu. Bạn có thể cung cấp cho tôi/chúng tôi với mã đầy đủ của bạn không? –

Trả lời

1

URL bạn đã chỉ định không hợp lệ. file_get_contents mong đợi một URI http hợp lệ (chính xác hơn, trình bao bọc http cơ bản). Vì URI không hợp lệ của bạn không phải là URI hợp lệ, file_get_contents không thành công.

Bạn có thể sửa lỗi này bằng cách biến URI không hợp lệ thành URI hợp lệ. Thông tin về cách viết URI hợp lệ có sẵn trong RFC3986. Bạn cần phải quan tâm rằng tất cả các ký tự đặc biệt được biểu diễn chính xác. ví dụ. dấu cách cho dấu cộng và dấu thương mại tại dấu phải được mã hóa URL. Ngoài ra khoảng trắng thừa ở đầu và cuối cần phải được loại bỏ.

Khi hoàn tất, máy chủ web sẽ cho bạn biết rằng quyền truy cập bị cấm. Sau đó, bạn có thể cần phải thêm các tiêu đề yêu cầu bổ sung thông qua các tùy chọn ngữ cảnh HTTP cho trình bao bọc tệp HTTP để giải quyết điều đó. Bạn tìm thấy thông tin trong hướng dẫn sử dụng PHP: http:// -- https:// — Accessing HTTP(s) URLs

+0

Ví dụ làm việc: http://codepad.viper-7.com/jkJjgW – hakre

9

Sử dụng hàm urlencode() cho toàn bộ URL, sẽ tạo URL không hợp lệ. Rời khỏi URL vì nó cũng không chính xác, vì ngược lại với các trình duyệt, hàm file_get_contents() không thực hiện URL normalization. Trong ví dụ của bạn, bạn cần thay thế khoảng trắng bằng %20:

$string = str_replace(' ', '%20', $string); 
+0

hoạt động, nhưng nó là một cách giải quyết rất bẩn – s3v3n

+1

cuối cùng một cái gì đó hoạt động, nhờ – nowhere

+0

Đây là một câu trả lời tuyệt vời -: http://stackoverflow.com/questions/8260564/php-file-get-contents-downloads-files-với-dấu cách-in-the-filename-not-work/8260942 # 8260942 –

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