奇妙なタイトルですが、問題は単純です。単に集約します。Zend_Formを使用せずに作成したフォームがあり、2つのファイルアップロードがあります。
<input name="image" type="file" />
<input name="file" type="file" />
これが、アップロードを処理しているコントローラーからのコードのチャンクです。実際にはもう少しありますが、これは関連する部分です:
$data['image'] = (isset($_FILES["image"]) && $_FILES["image"]["name"] ? $_FILES["image"]["name"] : NULL);
$data['file'] = (isset($_FILES["file"]) && $_FILES["file"]["name"] ? $_FILES["file"]["name"] : NULL);
$options = array('ignoreNoFile' => TRUE);
$upload = new Zend_File_Transfer();
$upload->setOptions($options)
->addFilter('Rename', array('target' => RESOURCES_IMG . $data['image'], 'overwrite' => TRUE), 'image')
->addFilter('Rename', array('target' => RESOURCES_FILES . $data['file'], 'overwrite' => TRUE), 'file')
->addValidator('ImageSize', false, array('minwidth' => 100,
'maxwidth' => 100,
'minheight' => 100,
'maxheight' => 100), 'image')
->addValidator('Extension', false, 'jpg', 'image');
if (!$upload->isValid())
{
echo '<h1>Oops</h1><p>Please correct the following errors: <hr /></p>';
foreach ($upload->getMessages() as $key => $val)
{
echo '<p><strong>' . $key . '</strong><br />' . $val . '</p>';
}
die;
}
else
{
$upload->receive();
} // if (!$upload->isValid())
それはかなり簡単です。$ dataのものは、ファイル名が存在する場合はそれを取得するか、変数をNULLに設定するだけです。addFilter()とaddValidator()をセグメント化して、関連するファイル(この場合は「image」または「file」(フォームフィールドの名前)のみに影響を与える)を使用しています。
「ファイル」のアップロードは常に機能します。ただし、「画像」のアップロードは行われず、さらに一時ファイルがRESOURCES_FILESディレクトリに配置されます。これはまったく意味がありません。そのため、そのディレクトリには、php8TJT13、phpXmOzQMなどのファイルに加えてPDFなどが含まれます。
私はこのコードをじっと見つめ、Stack Overflowを検索していて、Googleが表示するものは何でも検索しましたが、この問題を抱えている人は見つかりませんでした。ヘルプ!