2012-04-05 77 views
3

我在我的網站上有一個簡單的圖片上傳表單,用戶可以一次上傳多個圖片。我希望按以下格式在月份和年份中組織文件夾中的圖像:MONTH-YEAR,因此每次新上載開始時,首先檢查該文件夾是否存在,如果該文件夾不存在,則創建一個。在php/codeigniter中創建文件夾和上傳圖片

問題是,如果該文件夾在當前月份不存在,並且我嘗試上載圖像,則表示當前月份的文件夾已正確創建,但沒有上載圖像。但是如果該文件夾已經存在,所有的圖像都可以上傳,沒有任何問題。這裏是我的代碼:

$folderName = date('m-y'); 
    $pathToUpload = './uploads/photos/' . $folderName; 
    if (! file_exists($pathToUpload)) 
    { 
     $create = mkdir($pathToUpload, 0777); 
     $createThumbsFolder = mkdir($pathToUpload . '/thumbs', 0777); 
     if (! $create || ! $createThumbsFolder) 
     return; 
    } 

    $imgName= uniqid('', TRUE); 
    $config['upload_path'] = $pathToUpload; 
    $config['allowed_types'] = 'gif|jpg|png'; 
    $config['max_size'] = '9999'; 
    $config['file_name'] = $imgName . '.jpg'; 

    $this->upload->initialize($config); 
    $upload = $this->upload->do_upload("Filedata"); 

任何想法爲什麼上傳不能第一次工作?

+1

試試這個:'if!($ create && $ createThumbsFolder)' – hjpotter92 2012-04-05 21:11:31

回答

3

不要聽這些人。你的邏輯是好的 - 如果mkdir()任何時候都返回假,那麼它會失敗。

但是,正如mazzzzz所暗示的那樣,我會在這種情況下拋出異常,而不是返回false。

我也想做到這一點(而不是多次調用mkdir()):

<?php 
mkdir($pathToUpload . '/thumbs', 0777, TRUE); 

這將遞歸創建到文件夾中創建了大拇指所需的所有丟失的目錄,我懷疑是你們失敗反正。

如果情況並非如此,那麼您就沒有權限,如果您可以上傳文件,這似乎不大可能。

此外,您可能有stat緩存問題。嘗試運行clearstatcache()之前​​3210

0

爲了進一步跳轉青蛙的評論中的答案,它看起來像你可能會在上傳前返回,因爲你沒有拋出一個錯誤,但只是默默地失敗,如果它被認爲是沒有被創建的文件夾,即使他們是。

如果您認識到$create$createThumbsFolder應該都爲true才能繼續執行程序,那麼您可以測試if語句的邏輯。如果基本上說if (!true || !true),意思是if (false || false),可以簡化爲if (true),因爲如果其中任何一個都是假的,它將返回true。在青蛙的解決方案說if (!(true && true))簡化爲if (!true)簡化爲if (false),所以如果這兩個值是想要的(和預期)它不會返回。

希望能幫助解釋一下邏輯錯誤,祝你在上傳器上好運!

P.S.不要沉默失敗!