2010-12-27 60 views
8

Tôi đang truy cập hình ảnh từ một trang web khác. Tôi gặp lỗi "không thể mở luồng: yêu cầu HTTP không thành công! Lỗi HTTP/1.1 400 yêu cầu" khi sao chép 'một số (không phải tất cả)' hình ảnh. đây là mã của tôi.không thể mở luồng: Yêu cầu HTTP không thành công! Yêu cầu Xấu HTTP/1.1 400

$img=$_GET['img']; //another website url 
$file=$img; 

function getFileextension($file) { 
     return end(explode(".", $file)); 
} 
$fileext=getFileextension($file); 
if($fileext=='jpg' || $fileext=='gif' || $fileext=='jpeg' || $fileext=='png' || $fileext=='x-png' || $fileext=='pjpeg'){ 
if($img!=''){ 
$rand_variable1=rand(10000,100000); 
       $node_online_name1=$rand_variable1."image.".$fileext; 

       $s=copy($img,"images/".$node_online_name1); 

}

+0

Đây có phải là mã của bạn để tái tạo sự cố không? Có một dấu ngoặc nhọn không khép kín ở cuối. Ngoài ra, bạn đang thực sự gửi yêu cầu đến một máy chủ web ở đâu? Khi bạn gặp lỗi, yêu cầu là gì? – David

+0

tôi đang sao chép hình ảnh từ một trang web khác. khi bao giờ chức năng sao chép thực hiện sau đó tôi nhận được lỗi này. $ s = copy ($ img, "images /".$ node_online_name1); –

Trả lời

14

Tôi nghĩ preg_replace làm cho cảm giác tốt hơn nhiều vì nó sẽ làm việc với các phiên bản mới nhất của PHP như ereg_replace không làm việc cho tôi bị phản đối

$url = preg_replace("/ /", "%20", $url); 
4

Vấn đề duy nhất tôi có thể nghĩ đến là không gian là trong url, nhiều khả năng trong tên tập tin. Tất cả các khoảng trống trong url cần phải được chuyển đổi thành mã hóa thích hợp, là% 20.

Nếu bạn có một tên file như thế này:

"http://www.somewhere.com/images/img 1.jpg"

Bạn sẽ nhận được lỗi trên, nhưng với điều này:

"http://www.somewhere.com/images/img%201.jpg"

Bạn nên có vấn đề.

Chỉ cần sử dụng str_replace() để thay thế cho không gian (" ") cho mã hóa của họ thích hợp (" % 20")

Nó trông như thế này:

$url = str_replace(" ", "%20", $url); 

Để biết thêm thông tin trên tờ séc str_replace() ra The PHP Manual.

+1

Tốt hơn str_replace sẽ gọi urlencode trên chuỗi "img 1" – Yuliy

10

tôi đã cùng một vấn đề, nhưng nó đã được giải quyết bởi

$url = str_replace(" ", "%20", $url); 

Cảm ơn Cello_Guy cho bài viết.

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