2009-09-09 18 views
12

मैं एक PHP 5.2.4 पर कोड का निम्न भाग मिल गया है (कोई सेफ_मोड) Linux सर्वर:

mkdir($path, 0777, true); 

जब मैं की तरह एक पथ दर्ज:

'/path/to/create/recur/ively/' 

सभी निर्देशिकाओं पिछले एक ... के अलावा बनाई गई हैं जब मैं की तरह एक और निर्देशिका जोड़ें:

'/path/to/create/recur/ively/more/' 

फिर, सभी रास्तों पिछले एक को छोड़कर बनाई गई हैं ...

any1 मुझे यहाँ प्रबुद्ध कर सकते हैं कृपया दोनों के साथ और पीछे चल स्लैश

बिना की कोशिश की?

+0

कृपया उपयोग किए जा रहे PHP का सटीक संस्करण पोस्ट करें। साथ ही, क्या आपका होस्ट सुरक्षित_मोड सक्षम है? –

+0

आपकी त्रुटि_ रिपोर्टिंग स्तर क्या है? अगर कुछ गलत हो जाता है तो E_WARNING उठाया जाता है। सुरक्षित मोड बंद है, लेकिन क्या आपके PHP संस्करण में सुहोसिन की तरह कुछ है? कैसे (और कहां से) आपने php स्थापित किया? "वेनिला" php.net स्रोतों से संकलित? आपके वितरण के पैकेज प्रबंधक के माध्यम से (कौन सा है और पैकेज का सही नाम क्या है)? फ़ंक्शन php_plain_files_mkdir() (php फ़ंक्शन mkdir (x, y, true) के लिए ज़िम्मेदार) कुछ समय नहीं बदला है और मुझे http://bugs.php.net – VolkerK

+0

पर संबंधित बग नहीं मिला है, तो चलो मुझे सारांश है: सवाल यह है कि "रिकर्सिव एमकेडीआईआर ठीक से काम नहीं करता है", और जवाब है "ओह गॉली, मैंने गलती की और बाद में कोड को हटा दिया"। तो मुझे सच में आश्चर्य है कि इस उपयोगकर्ता को इस मूल्यवान जानकारी के लिए 26 अपवॉट क्यों मिले हैं? मुझे नहीं लगता कि 14 अन्य लोगों को एक ही समस्या थी ... – rob74

उत्तर

14

ठीक है समाधान निम्नानुसार है: कोई समस्या नहीं थी।

मैं अलगाव में कोड का परीक्षण नहीं किया है, लेकिन केवल निम्न कोड निर्देशिका संरचना करने के लिए कुछ नहीं कर रहा था ...

के रूप में मुझे पता चला निर्देशिका कोड अपने आप में बाद में हटा दिया गया ग्रहण किया।

वैसे भी, सबक सीखा ...

8

अपने पथ से पिछली स्लैश को हटाने का प्रयास करें।

कम से कम इस प्रकार इसका उपयोग mkdir दस्तावेज़ों के उदाहरणों में किया जा रहा है।

व्यक्तिगत रूप से मुझे समस्याएं याद नहीं आ रही हैं, लेकिन मैं आंतरिक रूप से पिछली स्लैश जोड़ नहीं पाता हूं, इसलिए जाएं और कोशिश करें।

अद्यतन:

मैं सिर्फ अपने कोड की कोशिश की और यह पिछले एक सहित हर निर्देशिका बनाया। मै मैक ओएस एक्स 10.5 चला रहा हूं। पता नहीं क्यों यह :-(

आप के लिए काम नहीं कर रहा कोड मैं प्रयोग किया जाता है यही कारण है कि:

<?php 
$path = '/Users/andre/test/bla/foo'; 
mkdir($path, 0777, true); 

क्षमा करें, लगता है जैसे मैं यहाँ कोई मदद नहीं की हूँ

+0

यह पहली चीज थी जो मैंने किया था, लेकिन यह अभी भी एक ही परिणाम उत्पन्न करता है ... – NDM

2

तुम सब कुछ करने की कोशिश की और यदि यह। काम नहीं कर रहा रखता है, तो जैसे पथ के अंत में कुछ पाठ जोड़ें:?

$path = '/path/to/create/recur/ively/more/this_wont_be_created_anyway'; 
+0

इस प्रकार मैंने इसे वर्तमान कोड में हल किया है ... लेकिन यह वास्तव में कोई समझ नहीं आता है ... – NDM

+0

एक गंदे काम के आसपास है और सवाल पूछने में मदद नहीं करता है ... > क्या कोई मुझे यहां प्रबुद्ध कर सकता है? – Gnark

+1

आपको कभी भी उस कोड का उपयोग नहीं करना चाहिए जिसे आप समझ में नहीं आते। –

1

अपने PHP संस्करण है क्या है सेफ_मोड

चालू?

यदि ऐसा है, तो हो सकता है कि आप http://bugs.php.net/bug.php?id=43276

+0

5.2.4 को सुरक्षित_मोड के बिना पोस्ट किया था, इसलिए यह लागू नहीं है, मैंने स्लेश के पीछे और बिना कोशिश की भी कोशिश की है .... – NDM

0

मध्यवर्ती बनाई निर्देशिका वर्तमान umask के आधार पर स्थापित कर रहे हैं। आप इस

umask(0777); 
mkdir($path, 0777, true); 
0

समारोह है कि दिए गए पथ के सभी निर्देशिका (फ़ोल्डर) बनाने की तरह कुछ करना चाहते हैं। कोड लिखने की कोई ज़रूरत नहीं है पथ के प्रत्येक निर्देशिका (फ़ोल्डर) बनाएँ। यह सभी निर्देशिकाएं (फ़ोल्डर्स) बनाएगा।

की तरह: आप निर्देशिका संरचना बनाने के लिए की तरह
संगठनों/1/उपयोगकर्ताओं/1/

तो तुम केवल
$ directories_path = 'संगठनों की तरह निर्देशिका पथ के साथ इस समारोह कॉल करने की आवश्यकता चाहते हैं/1/उपयोगकर्ताओं/1/';
createUploadDirectories ($ directory_path);

/* 
* Method Name : createUploadDirectories 
* Parameter : null 
* Task : Loading view for create directries for upload 
*/ 

if (! function_exists('createUploadDirectories')){ 
    function createUploadDirectories($upload_path=null){ 
     if($upload_path==null) return false; 
     $upload_directories = explode('/',$upload_path); 
     $createDirectory = array(); 
     foreach ($upload_directories as $upload_directory){ 
      $createDirectory[] = $upload_directory; 
      $createDirectoryPath = implode('/',$createDirectory); 
      if(!is_dir($createDirectoryPath)){ 
       $old = umask(0); 
       mkdir($createDirectoryPath,DIR_WRITE_MODE);// Create the folde if not exist and give permission 
       umask($old); 
      }    
     } 
     return true; 
    } 
} 
0

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

mkdir($path, "0777", true); // BAD - only creates /a/b 

mkdir($path, 0777, true); // GOOD - creates /a/b/c/d 
संबंधित मुद्दे