PHP: Wie benenne ich eine mit Zend_Form_Element_File hochgeladene Datei um?

Bilden:
//excerpt
$file = new Zend_Form_Element_File('file');
$file->setLabel('File to upload:')
    ->setRequired(true)
    ->addValidator('NotEmpty')
    ->addValidator('Count', false, 1)
    ->setDestination(APPLICATION_UPLOADS_DIR);
$this->addElement($file);
Regler:
//excerpt
if ($form->isValid($request->getPost()) {
    $newFilename = 'foobar.txt';
    //how should I rename the file?
    //When should I rename the file? Before or after receiving?
    try {
        $form->file->receive();
        echo 'filename: '. $form->file->getFileName();
    }
}
Fragen:

Wenn ich anrufe$form->file->getFileName() es gibt den vollständigen Pfad zurück, nicht nur den Dateinamen. Wie kann ich nur den Namen der Datei ausgeben?

//Answer: First, get an array of the parts of the filename:
$pathparts = pathinfo($form->file->getFileName());
//then get the part that you want to use
$originalFilename = $pathparts['basename'];

Wie kann ich den Dateinamen umbenennen? Kann das mit dem gemacht werden?Rename Filter? Ich habe das Ziel bereits im Formular festgelegt, daher möchte ich nur den Dateinamen ändern. Vielleicht sollte ich das Ziel nicht im Formular festlegen? Oder vielleicht geht das nicht mit einem Filter. Vielleicht sollte ich das mit einer PHP-Funktion machen? Was soll ich machen?

//Answer: Use the rename filter:
$form->file->addFilter('Rename', 'new-file-name-goes-here.txt');
Endgültige Lösung:

Dies ist, was ich getan habe:

public function foobarAction()
{
    //...etc...

    if (!$form->isValid($request->getPost())) {
        $this->view->form = $form;
        return;
    }

    //the following will rename the file (I'm setting the upload dir in the form)
    $originalFilename = pathinfo($form->file->getFileName());
    $newFilename = 'file-' . uniqid() . '.' . $originalFilename['extension'];
    $form->file->addFilter('Rename', $newFilename);

    try {
        $form->file->receive();
        //upload complete!
        $file = new Default_Model_File();
        $file->setDisplayFilename($originalFilename['basename'])
            ->setActualFilename($newFilename)
            ->setMimeType($form->file->getMimeType())
            ->setDescription($form->description->getValue());
        $file->save();
    } catch (Exception $e) {
        //error: file couldn't be received, or saved (one of the two)
    }
}

Antworten auf die Frage(7)

Ihre Antwort auf die Frage