Zend_File_Transfer_Adapter_Http を使用してアップロードする一連のファイルの名前を変更するときに問題が発生します。コードのある時点で、奇妙な構文に遭遇しました。アップロードしようとしている複数のファイルに対して一連の検証があるとします。クラスメソッドを呼び出した後、 foreach ループを使用してファイルを反復処理していますgetFileInfo()
。基本的に、各ファイルが検証に合格しないかどうかを確認し、その後、検証に合格した場合は、次のコードを実行しようとしています。
else {
$reconocido=TRUE;
$sin_espacios=str_replace(' ','_', $nombre_file, $renombrado);
$reconocido=FALSE;
$uploader->addValidator('Extension', FALSE, 'gif, jpg, png, pdf');
if($uploader->isValid($archivo)) {
$reconocido=TRUE;
} else {
$mime = $uploader->getMimeType($archivo);
$aceptados = array('jpg'=>'image/jpeg', 'png'=>'image/png', 'gif'=>'image/gif', 'pdf'=>'application/pdf');
$clave = array_search($mime, $aceptados);
if(!$clave) {
$messages[]="Tipo de archivo no reconocido.";
} else {
$sin_espacios = "$sin_espacios.$clave";
$reconocido=TRUE;
$renombrado=TRUE;
}
}
if($reconocido) {
$existe = scandir($destino);
if(in_array($sin_espacios, $existe)) {
$punto = strrpos($sin_espacios, '.');
$base = substr($sin_espacios, 0, $punto);
$extension = substr($sin_espacios, $punto);
$i = 1;
do {
$sin_espacios=$base.'_'.$i++.$extension;
} while (in_array($sin_espacios, $existe));
$renombrado=TRUE;
}
$uploader->clearValidators();
$uploader->addFilter('Rename', array('target'=>$sin_espacios, $info['tmp_name']));
$exito=$uploader->receive($archivo);
私が抱えているように見える問題は、最後の行の直前の行にあります。つまり$uploader->addFilter('Rename', array('target'=>$sin_espacios, $info['tmp_name']));
、奇妙な構文のように見えるためです (配列のキー値の中にコンマを含めるのはなぜですか?そして、たまたま、コードを実行するとファイルがアップロードされます、名前を変更しても問題ありませんが、次の警告が引き続き表示されます。
Warning: Illegal string offset 'source' in C:\Zend_FW\ZendFramework-1.11.12-minimal\library\Zend\Filter\File\Rename.php on line 145
Warning: Illegal string offset 'target' in C:\Zend_FW\ZendFramework-1.11.12-minimal\library\Zend\Filter\File\Rename.php on line 145
また、
File 'C:\Windows\Temp\php97CA.tmp' could not be renamed. It already exists.
明らかなはずの質問をしている場合はご容赦ください。事実、私が話している構文は正しいと述べているドキュメントがありますが、ZendFramework サイトではそのようなものは見つかりませんでした。では、これを行うための正しい構文は何でしょうか? また、ZendFramework の使用は、おそらく私の現在のレベルでは非常に複雑であることも認識していますが、複数のアップロードを試みるまでは機能していました。ここで、Zend を使用したファイルのアップロードに関する非常に詳細な説明を読みました:
PHP: Zend_Form_Element_File でアップロードされたファイルの名前を変更する方法?
しかし、これは Web ページの管理セクションであるため、ファイルが上書きされる心配はあまりありません。どんなアイデアにも感謝します。
より正確に言うと、適用しようとしている新しい名前をフィルターが認識できないことが問題であると思われます。Rename フィルタの 'target' オプションを問題なく使用したことがあります。マニュアルによると、次のとおりです。 target: 新しいディレクトリ、またはファイルのファイル名。私はそれを正しくやっていると思います。ここでファイルへの完全なパスを使用する必要があるかどうかは疑問ですが、前に述べた構文を使用する必要がある理由はまだわかりませんが、正しい構文は何ですか?