2012-11-30 69 views
2

在Windows以下工作:PHP Mkdir沒有遞歸執行?

mkdir('../my/folder/somewhere/on/the/server', 0777, true); 

我談論PHP mkdir

它工作完美,並遞歸創建子文件夾。但是,如果我在Linux服務器上運行相同的命令,則不會創建文件夾。

此前我通過分解路徑和逐個創建每個文件夾來解決此問題。但我不想這樣做,因爲它應該將「resurive」標誌設置爲true。爲什麼它不工作?

+0

PHP,NOT命令行。 – coderama

+0

閱讀手冊頁非常有用 - http://linux.die.net/man/1/mkdir –

+0

適合我(在Linux內部)。 – arkascha

回答

3

對不起,但除了mkdir命令本身之外,一定會有一些問題。

這個小例子按預期工作和遞歸在Linux上運行,我創建的目錄:

#!/usr/bin/php 
<?php 
mkdir ('testdir/testdir2/testdir3',0777,TRUE); 
?> 
1

這是發現

  • 確保根路徑存在
  • 確保根路徑是可寫的
  • 不要使用..總是使用真實路徑的東西...

$fixedRoot = __DIR__; 
$recusivePath = 'my/folder/somewhere/on/the/server'; 

if (is_writable($fixedRoot) && is_dir($fixedRoot)) { 
    mkdir($fixedRoot . DIRECTORY_SEPARATOR . $recusivePath, 0, true); 
} else { 
    trigger_error("can write to that path"); 
} 
+0

沒有工作。使用爆炸創建每個文件夾,一個接一個。 – coderama

+0

請加'error_reporting(E_ALL); ini_set(「display_errors」,「On」);'也'var_dump'我想看到輸出.... – Baba

1

確保你的PHP用戶(例如www-data)具有寫權限的任何文件夾的父文件夾它正在努力創造。 PHP需要能夠寫入已經存在的最低版本。

例如,在../my/folder/somewhere/on/the/server的情況下,如果../my已經存在和PHP是能夠寫入..但不mymkdir將失敗。

如果您的用戶是www-data,則可以使用sudo chown -R www-data:www-data ../mymy及其所有子文件夾提供寫入權限。