PHP: Как переименовать файл, загруженный с помощью Zend_Form_Element_File?
Форма:
//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);
контроллер://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();
}
}
Вопросы:Когда я звоню$form->file->getFileName()
он возвращает полный путь, а не только имя файла. Как я могу вывести только имя файла?
//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'];
Как я могу переименовать имя файла в то, что я хочу? Можно ли это сделать сRename
фильтр? Я'Я уже устанавливаю пункт назначения в форме, поэтому все, что я хочу сделать, это изменить имя файла. Может быть, я не долженне установить пункт назначения в форме? Или, может быть, это можетне может быть сделано с фильтром. Может быть, я должен делать это с помощью функции PHP? Что я должен делать?
//Answer: Use the rename filter:
$form->file->addFilter('Rename', 'new-file-name-goes-here.txt');
Окончательное решение:Это то, что я в итоге сделал:
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)
}
}