2016-05-26 5 views
0

In einer Controller-Aktion, ich mit der Datei-Upload wie folgt (kurz):rekursive Funktion in CakePHP

$originalFileName = $meetingsTask['submitted_file']['name'];  

$file = $meetingsTask['submitted_file']; 

    $ext = substr(strtolower(strrchr($file['name'], '.')), 1); 

    $arr_ext = array('jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx', 'xlsx', 'xls', 'xlt', 'xlm', 'ods','ppt', 'pot', 'pps'); 

     if(!in_array($ext, $arr_ext)){ 
     ...code omitted... 
     } 

    $newFileName = $this->generateFileName($originalFileName); 

    ...logic continues... 

Das Problem ist, dass generateFileName Funktion immer leer zurückzugibt, wenn Dateiname bereits vorhanden ist. Hier ist die Funktion selbst:

public function generateFileName($fileName){ 

    if($this->Tasks->checkFileName($fileName)){ 

     $prefix = rand(1, 1000); 

     $fileName = $prefix . '_' . $fileName; 

     $this->generateFileName($fileName); 

    }else{ 

     return $fileName; 

    } 

} 

checkFileName() liefert nur wahr/falsch in Abhängigkeit von der Existenz von Dateinamen in der Datenbank.

Was könnte den Ärger verursachen?

Jede Hilfe oder Anleitung wird sehr geschätzt.

Antwort

1

Wenn ich richtig verstehe, was Sie wollen, in der Rekursion benötigt nicht

public function generateFileName($fileName) { 
    // Start with source filename 
    $new = $fileName; 
    while($this->Tasks->checkFileName($new)) { 
     // If file exist try new prefix 
     $prefix = rand(1, 1000); 
     $new = $prefix . '_' . $fileName; 
    } 
    return $new; 
} 
+0

Vielen Dank für solch eine schnelle Antwort. Das löst das Problem und Sie haben sogar Kommentare eingefügt. – WpDoe

+0

@WpDoe Froh, ich könnte helfen. Viel Glück! – splash58