2012-03-21 35 views
15

Làm cách nào để sử dụng php để tải xuống hình ảnh từ URL (ví dụ: https://www.google.com/images/srpr/logo3w.png) sau đó lưu? Đây là những gì tôi đã đưa ra cho đến nay, nó mang lại cho tôi một lỗi trong 'file_put_contents' chức năng.Tải xuống hình ảnh từ URL bằng cách sử dụng mã php?

<form method="post" action=""> 
<textarea name="text" cols="60" rows="10"> 
</textarea><br/> 
<input type="submit" class="button" value="submit" /> 
</form> 

<?php 
    $img = "no image"; 
    if (isset($_POST['text'])) 
    { 
    $content = file_get_contents($_POST['text']); 
    $img_path = '/images/'; 
    file_put_contents($img_path, $content);  
    $img = "<img src=\"".$img_path."\"/>"; 
    } 
    echo $img; 
?> 

Nó mang lại cho tôi những lỗi:

[function.file-put-contents]: failed to open stream: No such file or directory in C:\wamp\www\img.php

Thư mục /images/ nằm trong cùng thư mục của file php và ghi.

+0

4 câu trả lời trong 1 phút !! Hy vọng vấn đề của bạn được giải quyết nhanh chóng. –

+0

bạn chưa bao giờ chấp nhận bất kỳ câu trả lời nào? Vui lòng upvote và chấp nhận các câu trả lời đã giúp bạn. –

+0

@Rohit Tôi rất tiếc, nhưng làm cách nào để tôi chấp nhận câu trả lời? – Sarah

Trả lời

30

Bạn không thể lưu hình ảnh bằng mã hiện tại của mình vì bạn không cung cấp tên tệp. Bạn cần phải làm một cái gì đó như:

$filenameIn = $_POST['text']; 
$filenameOut = __DIR__ . '/images/' . basename($_POST['text']); 

$contentOrFalseOnFailure = file_get_contents($filenameIn); 
$byteCountOrFalseOnFailure = file_put_contents($filenameOut, $contentOrFalseOnFailure); 
+0

Cảm ơn bạn đã trả lời. Tôi đã sử dụng 'file_get_contents' trong mã. Nó hoạt động tốt nhưng tôi không thể lưu hình ảnh. – Sarah

+0

@Sarah: Tệ của tôi, tôi đã đọc sai mã. Đã chỉnh sửa câu trả lời trong khi đó. – Jon

+0

Đây là lỗi tôi nhận được: '[function.file-put-contents]: không mở được luồng: Không có tệp hoặc thư mục nào trong C: \ wamp \ www \ img.php trên dòng 14' – Sarah

0

file_put_contents() đòi hỏi tham số đầu tiên là tên tập tin không phải là con đường.

1

Lỗi của bạn là gì? Nhưng bạn có đúng cách để làm những gì bạn muốn làm.

Chỉ cần quan tâm đến mã của bạn, tôi có thể thấy file_put_contents($img_path, nhưng $img_path là đường dẫn đến thư mục. Bạn cần phải viết một cái gì đó như:

dụ

$img_path="home/downloads/my_images"; 
file_put_contents($img_path."/flower.jpg"); 
+0

Cảm ơn bạn đã trả lời! Vì vậy, tôi cần phải chỉ định tên hình ảnh trong mã? – Sarah

+1

Có, bạn có thể sử dụng $ _POST ['văn bản'] của bạn nhưng nhận thức được nội dung xấu. Bạn cần phải khử trùng $ _POST của bạn và sau đó làm việc trên nó để có được tên của hình ảnh. Nhìn vào [basename] (http://ca3.php.net/manual/fr/function.basename.php) nó có thể giúp ích. – NeeL

+0

Nhìn vào câu trả lời của Jon;) – NeeL

0
file_put_contents($img_path, $content); 

Để anh đang đưa vào ?? tôi nghĩ bạn đã phạm sai lầm với getput. hoặc bỏ qua để xác định đường dẫn đầy đủ bao gồm tên tập tin và mở rộng

5

Nếu bạn đã allow_url_fopen thiết lập là true:

 $url = 'http://example.com/image.php'; 
    $img = '/my/folder/flower.gif'; 
    file_put_contents($img, file_get_contents($url)); 

Else sử dụng cURL:

 $ch = curl_init('http://example.com/image.php'); 
    $fp = fopen('/my/folder/flower.gif', 'wb'); 
    curl_setopt($ch, CURLOPT_FILE, $fp); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_exec($ch); 
    curl_close($ch); 
    fclose($fp); 
+0

Tôi đã cố gắng sử dụng cURL, nó không hoạt động. Thanks anyway :) – Sarah

+0

kiểm tra thời tiết u đã kích hoạt curl .. – Pushparaj

+6

Câu trả lời này trông quen thuộc http://stackoverflow.com/questions/724391/saving-image-from-php-url – Dan

0

tôi đã thêm một điều kiện để trả lời chấp nhận để kiểm tra loại hình ảnh như sau,

if (exif_imagetype($_POST['text']) == IMAGETYPE_PNG) { 
    $filename = './images/'.basename($_POST['text']); 
    file_put_contents($filename, $content); 
} 

từ ví dụ trên Tôi hiển thị w để kiểm tra hình ảnh png trước khi tải xuống các tệp và để có nhiều loại nội dung hơn, bạn có thể tìm thấy here.

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