2009-09-09 93 views
12

我有下面的代碼在PHP 5.2.4(無safe_mode設置)Linux服務器:

mkdir($path, 0777, true); 
當我進入像路徑

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

所有目錄除了最後一個...... 創建當我添加其他目錄,如:

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

再次,是除了最後一個創建的所有路徑...

試圖既沒有結尾的斜槓

能ANY1開導我在這裏嗎?

+0

請發佈您正在使用的PHP的確切版本。另外,您的主機是否在啓用safe_mode的情況下運行? – 2009-09-09 12:01:41

+0

什麼是您的error_reporting級別?如果出現問題,則提出E_WARNING。安全模式關閉,但您的PHP版本是否包含suhosin?你如何(以及從哪裏)安裝PHP?從「香草」php.net源代碼編譯?通過你的發行版的包管理器(它是哪一個,包的確切名稱是什麼)?函數php_plain_files_mkdir()(負責PHP函數mkdir(x,y,true))並沒有改變很長一段時間,我還沒有在http://bugs.php.net找到相關的錯誤 – VolkerK 2009-09-09 13:42:27

+0

因此,讓我總結:問題是「遞歸mkdir無法正常工作」,答案是「哦,我犯了一個錯誤,並在代碼中稍後刪除了該目錄」。那麼我真的很想知道爲什麼這個用戶有26個upvotes這個有價值的信息?我不認爲其他人有同樣的問題... – rob74 2018-03-08 16:43:49

回答

14

好的解決方案如下:沒有問題。

我沒有隔離測試的代碼,但只承擔了下面的代碼沒有做任何的目錄結構...

,因爲我發現了目錄得到了由代碼本身刪除以後。

無論如何,課程了...

8

嘗試從路徑中刪除尾部斜線。

至少這就是它在mkdir文檔的例子中的使用方式。

就我個人而言,我不記得有問題,但我通常不會追加尾部的斜槓,所以去試試吧。

UPDATE

我只是想你的代碼,它創建的每個目錄,包括最後一個。 我正在運行Mac OS X 10.5。不知道爲什麼它不工作了:-(

這是我使用的代碼:

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

對不起,好像我沒有幫助在這裏

+0

這是關於我做的第一件事,但它仍然產生相同的結果... – NDM 2009-09-09 11:48:25

2

如果你想盡一切和它。一直沒有工作,再加入一些文字類的路徑的末尾:

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

這就是我在當前代碼中'解決'它... 但它沒有任何意義...... – NDM 2009-09-09 12:06:38

+0

這是一個骯髒的解決方法,並沒有幫助問題... >請問任何1在這裏請賜教? – Gnark 2009-09-09 12:16:21

+1

你永遠不應該使用你不明白的代碼。 – 2009-09-09 12:33:05

1

什麼是你的PHP版本的safe_mode開啓

如果是這樣,那麼它可能是你正在經歷http://bugs.php.net/bug.php?id=43276

+0

5.2.4沒有safe_mode,所以它不適用,我也嘗試過和沒有尾隨斜線,所以.... – NDM 2009-09-09 12:25:21

0

創建的中間目錄是基於當前的umask設置。你想要這樣的東西

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

創建給定路徑的所有目錄(文件夾)的函數。不需要編寫代碼來創建給定路徑的每個目錄(文件夾)。它會創建所有目錄(文件夾)。

一樣:如果你要創建的目錄結構像
組織/ 1 /用戶/ 1/

所以,你只需要調用與目錄的路徑該功能類似
$ directories_path =「組織/ 1 /用戶/ 1 /';
createUploadDirectories($ directories_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