questions - php tutorial pdf




जब मैं file_put_contents() चलाता हूं तो एक फ़ोल्डर बनाना (2)

मैंने वेबसाइट से बहुत सारी छवियां अपलोड की हैं, और फ़ाइलों को बेहतर तरीके से व्यवस्थित करने की आवश्यकता है। इसलिए, मैं महीनों से एक फ़ोल्डर बनाने का निर्णय लेता हूं।

$month  = date('Yd')
file_put_contents("upload/promotions/".$month."/".$image, $contents_data);

जब मैंने इसे आज़माया, तो मुझे त्रुटि परिणाम मिला।

संदेश: file_put_contents (अपलोड / पदोन्नति / 201211 / ang232.png): स्ट्रीम खोलने में विफल: कोई फ़ाइल या निर्देशिका नहीं

अगर मैंने केवल फ़ाइल को मौजूद फ़ोल्डर में रखने की कोशिश की, तो यह काम कर गया। हालाँकि, यह एक नया फ़ोल्डर बनाने में विफल रहा।

क्या इस समस्या को हल करने का कोई तरीका है?


उपरोक्त उत्तर का संशोधन इसे थोड़ा अधिक सामान्य बनाने के लिए, (स्वचालित रूप से सिस्टम स्लैश पर मनमाने फ़ाइल नाम से फ़ोल्डर बनाता है)

ps पिछला जवाब कमाल का है

/**
 * create file with content, and create folder structure if doesn't exist 
 * @param String $filepath
 * @param String $message
 */
function forceFilePutContents ($filepath, $message){
    try {
        $isInFolder = preg_match("/^(.*)\/([^\/]+)$/", $filepath, $filepathMatches);
        if($isInFolder) {
            $folderName = $filepathMatches[1];
            $fileName = $filepathMatches[2];
            if (!is_dir($folderName)) {
                mkdir($folderName, 0777, true);
            }
        }
        file_put_contents($filepath, $message);
    } catch (Exception $e) {
        echo "ERR: error writing '$message' to '$filepath', ". $e->getMessage();
    }
}

मैंने एक फ़ंक्शन लिखा है जो आपको पसंद आ सकता है। इसे फोर्सडिर () कहा जाता है। यह आधारभूत जाँच करता है कि क्या आप चाहते हैं कि अस्तित्व मौजूद है। यदि हां, तो यह कुछ नहीं करता है। यदि नहीं, तो यह निर्देशिका बनाएगा। केवल mkdir के बजाय इस फ़ंक्शन का उपयोग करने का एक कारण यह है कि यह फ़ंक्शन अगले फ़ोल्डर को भी बना सकता है .. उदाहरण के लिए ('अपलोड / प्रचार / जनुअरी / firstHalfOfTheMonth')। बस इच्छित dir_path के लिए पथ जोड़ें।

function forceDir($dir){
    if(!is_dir($dir)){
        $dir_p = explode('/',$dir);
        for($a = 1 ; $a <= count($dir_p) ; $a++){
            @mkdir(implode('/',array_slice($dir_p,0,$a)));  
        }
    }
}




php