2009-02-06 66 views
5

我正在使用此行從URL獲取並保存圖像。file_put_contents的錯誤子句

file_put_contents("./images/".$pk.".jpg", file_get_contents($PIC_URL)) 

我不確定什麼是處理錯誤的最佳方法。目前它失敗了,因爲沒有許可,很快就會得到補救,但我希望它能夠處理PIC_URL爲空或不是圖像的情況。我應該死在這個級別的錯誤(可能是更好的權限相關的事情),或者我應該檢查更高,如果PIC_URL是空的,或兩者?

哪種方法最好?

+0

我會成爲這裏唯一的評論是,如果allow_fopen_url =關設置你的服務器的php.ini(因爲它可能是在一些共享主機上下文中),上面的代碼將失敗。 – 2009-02-06 11:34:20

回答

5

我不是聲稱這是最好的方法足夠的天賦,但我只想沿途測試:

$imageDir = "/path/to/images/dir/"; 
$imagePath = "$imageDir$pk.jpg"; 
if (!is_dir($imageDir) or !is_writable($imageDir)) { 
    // Error if directory doesn't exist or isn't writable. 
} elseif (is_file($imagePath) and !is_writable($imagePath)) { 
    // Error if the file exists and isn't writable. 
} 

$image = file_get_contents(urlencode($PIC_URL)); 
if (empty($image)) { 
    // Error if the image is empty/not accessible. 
    exit; 
} 

file_put_contents($imagePath, $image); 
+0

你可能也想檢查從file_put_contents() – 2009-02-06 11:46:21

0

兩個,據我的關注。特別是對於那些危險的文件處理功能,雙重檢查不會造成傷害。 ($pk來自哪裏?)

通常,請檢查較高級別以獲得更好的用戶反饋,並在執行安全性檢查之前進行檢查。僅在低水平檢查時,很難給用戶提供良好的反饋。另一方面,很難在高級和通用級別檢查所有可能的錯誤(如那些文件系統權限)。

0

試着爲此做一個功能。

<?php 
define('OK', 0); 
deinfe('URL_EMPTY', 1); 
define('WRITING_PROBLEMS',2); 
define('OTHER_PROBLEM', 3); 


function save_pic($pic_url) { 

    $imageDir = '/path/to/images/dir/'; 

    if (!strlen($pic_url)) 
    return URL_EMPTY; 

    if (!is_dir($imageDir) || !is_writable($imageDir)) { 
    return WRITING_PROBLEMS; 
    } 

    $image = file_get_contents(urlencode($pic_url)); 

    $pk = time(); // or whatever you want as key 


    $r = file_put_contents($imagePath.$pk.".jpg", $pic_url); 

    if ($r) 
    return OK; 
    else 
    return OTHER_PROBLEM; 

} 
?> 
0

嗯不能也只是做

file_put_contents($file, $str) or die("Unable to write file!");