Php 是否忽略Zend Framework文件上载的空实例?文件没有上载,因为它

Php 是否忽略Zend Framework文件上载的空实例?文件没有上载,因为它,php,javascript,jquery,zend-framework,file-upload,Php,Javascript,Jquery,Zend Framework,File Upload,我正在尝试在ZF1中上载几个文件 上传有两个选项;音频或图像。当我尝试上载图像时,只有file_audio的空实例有问题 这是我的打印$\u文件 Array ( [image_file] => Array ( [name] => boss.jpg [type] => image/jpeg [tmp_name] => C:\WINDOWS\Temp\phpA01.tmp

我正在尝试在ZF1中上载几个文件

上传有两个选项;音频或图像。当我尝试上载图像时,只有file_audio的空实例有问题

这是我的打印$\u文件

Array
(
    [image_file] => Array
        (
            [name] => boss.jpg
            [type] => image/jpeg
            [tmp_name] => C:\WINDOWS\Temp\phpA01.tmp
            [error] => 0
            [size] => 37246
            [options] => Array
                (
                    [ignoreNoFile] => 
                    [useByteString] => 1
                    [magicFile] => 
                    [detectInfos] => 1
                )

            [validated] => 
            [received] => 
            [filtered] => 
            [validators] => Array
                (
                    [0] => Zend_Validate_File_Upload
                )

        )

    [audio_file] => Array
        (
            [name] => 
            [type] => 
            [tmp_name] => 
            [error] => 4
            [size] => 
            [options] => Array
                (
                    [ignoreNoFile] => 
                    [useByteString] => 1
                    [magicFile] => 
                    [detectInfos] => 1
                )

            [validated] => 
            [received] => 
            [filtered] => 
            [validators] => Array
                (
                    [0] => Zend_Validate_File_Upload
                )
        )
)
这是我的Zend代码,它只有在两个文件都被选中时才能工作

if (! empty ( $post ['type'] )) {

    $adapter = new Zend_File_Transfer ();

//  echo "<pre>"; print_r($_FILES);   "</pre>"; exit;

    if ($post ['type'] == 'Image' && ! empty ( $_FILES ['image_file'] ['name'] )) {

        $files = $adapter->getFileInfo();


        echo "<pre>"; print_r($files);   "</pre>"; exit;
        $files = $adapter->getFileInfo();

        $files_path = $config->topic_images->path; 

        // Limit the MIME type of all given files to gif and jpeg images
//      $adapter->addValidator ( 'MimeType', false, array ('image/jpeg', 'image/png', 'image/jpg' ) );

//      $adapter->addValidator ( 'Extension', false, 'png,jpeg,jpg' );

//      $adapter->addValidator ( 'FilesSize', false, array ('min' => '1kB', 'max' => '5MB' ) );

//      $adapter->addValidator ( 'ImageSize', false, array ('minwidth' => 0, 'maxwidth' => 800, 'minheight' => 0, 'maxheight' => 800 ) );

// Limit the size of a image to a height of 100-200 and a width of 40-80 pixel


    }elseif($post ['type'] == 'Audio' && ! empty ( $_FILES ['audio_file'] ['name'] )) {

        $files_path = $config->topic_audio->path;

    }elseif($post ['type'] == 'Video' && ! empty ( $post ['video_file'] )) {

    }


$files = $adapter->getFileInfo ();

$file_name = null;
$tmpArr = null;

$fname = null;
$fext = null;


        foreach ( $files['image_file'] as $file => $info ) {
    if (! empty ( $info ['name'] )) {
        $fname = substr ( $info ['name'], 0, strrpos ( $info ['name'], "." ) );
        $fext = substr ( $info ['name'], strrpos ( $info ['name'], "." ) );
    }
}


    if (! empty ( $fname )) {

    $file_name = $fname . "-" . $post ['topic_id'] . $fext;

    $horrible_chars = array ("~", "@", "#", "$", "%", "^", "&", "*", "(", ")", " " );
echo     $cleanfilename = str_replace ( $horrible_chars, "", $file_name );


    $adapter->setDestination ( $files_path );

//  $adapter->addFilter ( 'Rename', array ('target' => $files_path . DS . $cleanfilename, 'overwrite' => true ) );



    if ($adapter->receive ()) {

    //  echo "xxx"; exit;

        $post ['filename'] = $cleanfilename;
        $result = $TopicModel->updateTopicassociation ( $post );
        $old_file = $files_path . DS . $post ['existing_file'];

        if (file_exists ( $old_file )) {
            if ($file_name != $post ['existing_file']) {
                @unlink ( $old_file );
            }
        }

        $this->_flashMessenger->addMessage ( 'Topic '.$post['type'].'added successfully' );
    } else {


    $errors = $adapter->getErrors();
    print_r($errors); exit;

        $post ['filename'] = null;
        $res_delete = $TopicModel->updateTopicassociation ( $post ['topic_id'] );
        $this->_flashMessenger->addMessage ( 'Error(s) encountered. File Association not updated.' );
    }
}

//    else {
//      if (! empty ( $post ['chkDelete'] ) && $post ['chkDelete'] == 1) {
//          $post ['filename'] = null;
//          $result = $jobModel->updateJobLogo ( $post );
//          $old_file = $files_path . DS . $post ['c_image_name'];
//          
//          if (file_exists ( $old_file )) {
//              @unlink ( $old_file );
//          }
//      }
//    }
}
if(!empty($post['type'])){
$adapter=new Zend_File_Transfer();
//回显“;打印($文件);”;退出;
if($post['type']='Image'&&&!empty($\u FILES['Image\u file']['name'])){
$files=$adapter->getFileInfo();
回显“;打印($files);”;退出;
$files=$adapter->getFileInfo();
$files\u path=$config->topic\u images->path;
//将所有给定文件的MIME类型限制为gif和jpeg图像
//$adapter->addValidator('MimeType',false,数组('image/jpeg','image/png','image/jpg');
//$adapter->addValidator('Extension',false,'png,jpeg,jpg');
//$adapter->addValidator('FilesSize',false,数组('min'=>'1kB','max'=>'5MB');
//$adapter->addValidator('ImageSize',false,数组('minwidth'=>0,'maxwidth'=>800,'minheight'=>0,'maxheight'=>800));
//将图像大小限制为100-200的高度和40-80像素的宽度
}elseif($post['type']='Audio'&&!empty($\u FILES['Audio\u file']['name'])){
$files\u path=$config->topic\u audio->path;
}elseif($post['type']=='Video'&&&!empty($post['Video_file'])){
}
$files=$adapter->getFileInfo();
$file_name=null;
$tmpArr=null;
$fname=null;
$fext=null;
foreach($files['image\u file']作为$file=>$info){
如果(!empty($info['name'])){
$fname=substr($info['name',0,strrpos($info['name',”);
$fext=substr($info['name'],strrpos($info['name'],”);
}
}
如果(!空($fname)){
$file_name=$fname.-“$post['topic_id']。$fext;
$sorbible_chars=数组(“~”、“@”、“#”、“$”、“%”、“^”、“&”、“*”、“(“,”、”)、“);
echo$cleanfilename=str_replace($sorbible_chars,“,$file_name);
$adapter->setDestination($files\u path);
//$adapter->addFilter('Rename',array('target'=>$files\u path.DS.$cleanfilename,'overwrite'=>true));
如果($adapter->receive()){
//回声“xxx”;退出;
$post['filename']=$cleanfilename;
$result=$TopicModel->updateTopicassociation($post);
$old_file=$files_path.DS.$post['existing_file'];
如果(文件_存在($old_文件)){
如果($file\u name!=$post['existing\u file'])){
@取消链接($old_文件);
}
}
$this->_flashMessenger->addMessage('Topic'.$post['type'.'added successfully');
}否则{
$errors=$adapter->getErrors();
打印($errors);退出;
$post['filename']=null;
$res_delete=$TopicModel->updateTopicassociation($post['topic_id']);
$this->_flashMessenger->addMessage('遇到错误。文件关联未更新');
}
}
//否则{
//如果(!empty($post['chkDelete'])和&$post['chkDelete']==1){
//$post['filename']=null;
//$result=$jobModel->updateJobLogo($post);
//$old_file=$files_path.DS.$post['c_image_name'];
//          
//如果(文件_存在($old_文件)){
//@unlink($old_文件);
//          }
//      }
//    }
}
我花了一整天的时间试图只上传一个图像或音频文件。有人知道问题出在哪里吗

使用表单输入更新 baseUrl()。"/" . $此->模块名称;?>/主题/行动);?>“>


尝试将
ignoreNoFile
选项设置为true,以便在没有文件时适配器不会抛出错误:

$('#cmdSubmit').click(
        function(){

var selection = $("#type").val(); 


     if( selection == 'Image'){
         $('#videomodule').remove();
         $('#audiomodule').remove();

      }else if(selection == 'Audio'){
          $('#imagemodule').remove();
          $('#videomodule').remove();

      }else if(selection == 'Video'){
          $('#imagemodule').remove();
          $('#audiomodule').remove();

      }else{
          $('#imagemodule').remove();
          $('#videomodule').remove();
          $('#audiomodule').remove();
      }

        });


尝试将
ignoreNoFile
选项设置为true,以便在没有文件时适配器不会抛出匹配:

$('#cmdSubmit').click(
        function(){

var selection = $("#type").val(); 


     if( selection == 'Image'){
         $('#videomodule').remove();
         $('#audiomodule').remove();

      }else if(selection == 'Audio'){
          $('#imagemodule').remove();
          $('#videomodule').remove();

      }else if(selection == 'Video'){
          $('#imagemodule').remove();
          $('#audiomodule').remove();

      }else{
          $('#imagemodule').remove();
          $('#videomodule').remove();
          $('#audiomodule').remove();
      }

        });


我用jquery解决了这个问题

因为我可以选择上传音频、视频和图像

我只是检查了提交按钮下拉列表中的值,并删除了文件上传的空实例

因为zend有问题

我在下面使用的代码非常简单


它解决了我的问题,现在其他人可以试试或者试试上面的rockfors答案。

我用jquery解决了它

因为我可以选择上传音频、视频和图像

我只是检查了提交按钮下拉列表中的值,并删除了文件上传的空实例

因为zend有问题

我在下面使用的代码非常简单


它解决了我的问题,现在其他人可以试试或者试试上面的rockfors答案。

显示您的表单代码。它看起来像
Zend\u Validate\u File\u Upload
已附加到两个元素,因此空元素将失败。@RockyFord只是一个简单的表单,我将更新我的question@RockyFord我已经更新了我的问题,请帮助..展示你的表单代码。看起来两个元素都附加了
Zend\u Validate\u File\u Upload
,因此空元素将失败。@RockyFord这是一个简单的表单,我将更新我的question@RockyFord我已经更新了我的问题,请帮助。我现在用jquery解决了它,但是下次我会试试。我现在用jquery解决了它,但是n下次我会试试的。
$adapter = new Zend_File_Transfer ();
$adapter->setOptions(array('ignoreNoFile'=>true))
$('#cmdSubmit').click(
        function(){

var selection = $("#type").val(); 


     if( selection == 'Image'){
         $('#videomodule').remove();
         $('#audiomodule').remove();

      }else if(selection == 'Audio'){
          $('#imagemodule').remove();
          $('#videomodule').remove();

      }else if(selection == 'Video'){
          $('#imagemodule').remove();
          $('#audiomodule').remove();

      }else{
          $('#imagemodule').remove();
          $('#videomodule').remove();
          $('#audiomodule').remove();
      }

        });