2009-02-06 8 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 पर सेट कर दिया जाता है कि है कुछ साझा होस्टिंग संदर्भों में), उपरोक्त आपका कोड विफल हो जाएगा। –

उत्तर

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() –

+0

से वापसी मूल्य भी देखना चाहते हैं, यदि मैं गलत हूं, तो मुझे सही करें, लेकिन फ़ाइल_get_contents अभी भी कुछ त्रुटि स्तर फेंक नहीं पाएंगे अगर यह फ़ाइल नहीं खोल सका? यह घातक नहीं हो सकता है लेकिन यह अभी भी एक त्रुटि है। –

+0

मुझे इस तरह के माइक पर विश्वास नहीं है, या कम से कम यह दस्तावेज़ीकरण में सूचीबद्ध नहीं है: http://www.php.net/manual/en/function.file-get-contents.php दुर्भाग्यवश, मैं नहीं करता एक टाइमआउट सेट करने के तरीके के बारे में जानें ताकि अनुरोधित यूआरएल लटकने पर स्क्रिप्ट वापसी मूल्य के लिए प्रतीक्षा कर रहा हो। – chuckg

0

मैं is_writable का प्रयोग करेंगे(), यह फ़ोल्डर नाम गुजर यदि छवि नहीं करता है छवि लिखने का प्रयास करने से पहले, यह पहले से मौजूद नहीं है, या फ़ाइल नाम अगर ऐसा करता है।

http://uk3.php.net/manual/en/function.is-writable.php

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!");

संबंधित मुद्दे