2011-10-05 54 views
2

有人可以告訴我在這段代碼中我做錯了什麼嗎?php ftp檢查文件夾是否存在總是返回錯誤創建文件夾

if($id != '') { 
    if(is_dir("../public_html".$tem_pasta['path']."/pics/".$id)) { 
     echo "pasta já existia"; 
     $destination_file = "../public_html".$tem_pasta['path']."/pics/".$id."/".$myFileName; 
    } else { 
     //pasta nao existia 
     if (ftp_mkdir($conn_id, "../public_html".$tem_pasta['path']."/pics/".$id)) { 
      $destination_file = "../public_html".$tem_pasta['path']."/pics/".$id."/".$myFileName; 
     //echo "pasta criada<br>"; 
     } else { 
      echo "erro, não criou a pasta<br>"; 
     } 
    } 
} else { 
    $destination_file = "../public_html".$tem_pasta['path']."/pics/".$myFileName; 
} 

它檢查我的圖片目錄中是否有文件夾($ id),如果沒有,腳本會創建一個新文件夾。 做工不錯,但如果我嘗試上傳其他文件到先前創建的文件夾返回它的錯誤,聲稱自己無法創建文件夾...

感謝

+0

是我awnser好?如果是這樣,請選擇它作爲正在搜索這個人的正確awnser! – Wesley

回答

5

is_dir僅適用於本地文件系統。如果你想檢查一個ftp目錄已經存在試試這個:

function ftp_is_dir($ftp, $dir) 
{ 
    $pushd = ftp_pwd($ftp); 

    if ($pushd !== false && @ftp_chdir($ftp, $dir)) 
    { 
     ftp_chdir($ftp, $pushd); 
     return true; 
    } 

    return false; 
} 

if($id != '') { 
    if(ftp_is_dir($conn_id, "../public_html".$tem_pasta['path']."/pics/".$id)) { 
    // and so on... 
+0

好的,謝謝你,我會在2小時內檢查(現在不在辦公室),並讓你知道結果。謝謝 – Pluda

+0

完美!非常感謝你,這個小功能讓我的一天變得如此:-) – Pluda

+1

5年後的快速更新> _ <,從PHP 5.0.0開始,這個is_dir也可以用於一些URL包裝器。即'is_dir('ftp:// user:[email protected]/path/to/check')'。人們都知道 – user1318677

5

我不認爲你可以在FTP資源上使用is_dir,你應該做的是檢查dir/file的大小是否爲-1和ftp_size。

因爲我認爲現在發生的事情是:您正試圖再次創建相同的文件夾,這就是錯誤發生的原因。

編輯: 或與ftp_chdir檢查!

<?php 
function ftp_directory_exists($ftp, $dir) 
{ 
    // Get the current working directory 
    $origin = ftp_pwd($ftp); 

    // Attempt to change directory, suppress errors 
    if (@ftp_chdir($ftp, $dir)) 
    { 
     // If the directory exists, set back to origin 
     ftp_chdir($ftp, $origin);  
     return true; 
    } 

    // Directory does not exist 
    return false; 
} 
?> 

應該工作!

+0

感謝您的回覆,它確實有效,但我只能提出一個正確答案。 – Pluda

+0

我知道,我是第一個,但多數民衆贊成在:) – Wesley

+0

謝謝,它適合我! –

1

使用ftp_nlist和in_array

$ftp_files = @ftp_nlist($this->connection, $directory); 

if ($ftp_files === false) { 
    throw new Exception('Unable to list files. Check directory exists: ' . $directory); 
} 

if (!in_array($directory, $ftp_files)) { 
    $ftp_mkdir = @ftp_mkdir($this->connection, $directory); 

    if ($ftp_mkdir === false) { 
     throw new Exception('Unable to create directory: ' . $directory); 
    } 
} 
相關問題