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




hindi tutorial (4)

मैंने एक फ़ंक्शन लिखा है जो आपको पसंद आ सकता है। इसे फोर्सडिर () कहा जाता है। यह आधारभूत जाँच करता है कि क्या आप चाहते हैं कि अस्तित्व मौजूद है। यदि हां, तो यह कुछ नहीं करता है। यदि नहीं, तो यह निर्देशिका बनाएगा। केवल 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)));  
        }
    }
}

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

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

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

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

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

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


file_put_contents() निर्देशिका संरचना नहीं बनाता है। केवल फ़ाइल।

यदि महीने निर्देशिका मौजूद है, तो आपको अपनी स्क्रिप्ट में तर्क जोड़ने की आवश्यकता होगी। यदि नहीं, तो पहले mkdir() उपयोग करें।

if (!is_dir('upload/promotions/' . $month)) {
  // dir doesn't exist, make it
  mkdir('upload/promotions/' . $month);
}

file_put_contents('upload/promotions/' . $month . '/' . $image, $contents_data);

अद्यतन: mkdir() $recursive तीसरे पैरामीटर को स्वीकार करता है जो किसी भी लापता निर्देशिका संरचना का निर्माण करेगा। यदि आपको कई निर्देशिकाएं बनाने की आवश्यकता हो तो यह उपयोगी हो सकता है।

777 पर सेट पुनरावर्ती और निर्देशिका अनुमतियों के साथ उदाहरण:

mkdir('upload/promotions/' . $month, 0777, true);

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

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();
    }
}

Notice: Array to string conversion

This simply happens if you try to treat an array as a string:

$arr = array('foo', 'bar');

echo $arr;  // Notice: Array to string conversion
$str = 'Something, ' . $arr;  // Notice: Array to string conversion

An array cannot simply be echo 'd or concatenated with a string, because the result is not well defined. PHP will use the string "Array" in place of the array, and trigger the notice to point out that that's probably not what was intended and that you should be checking your code here. You probably want something like this instead:

echo $arr[0];  // displays foo
$str = 'Something ' . join(', ', $arr); //displays Something, foo, bar

Or loop the array:

foreach($arr as $key => $value) {
    echo "array $key = $value";
    // displays first: array 0 = foo
    // displays next:  array 1 = bar
}

If this notice appears somewhere you don't expect, it means a variable which you thought is a string is actually an array. That means you have a bug in your code which makes this variable an array instead of the string you expect.





php