如果导出队列能成功执行(队列不执行看这里)但是并未生成文件,那么原因大部份可能是出在FTP上。

ECSTORE2.0采用了PHP的FTP模块,所以先确认你的环境是否安装了FTP模块,如果没有,安装并在PHP.INI中配置好模组路径。

功能文件:\app\importexport\lib\policy\ftp.php ,程序中使用 ftp_nb_put() 异步上传,这里告诉大家一个调试方法:在适当的位置加入 logger::info('debug info');  

然后查看 /data/logs/queue/日期.php 的日志输出,可以直接ssh用 tail -f  /data/logs/queue/日期.php 

【原理】利用PHP的 tempnam() 函数上传临时文件至 服务器的 /tmp目录,再用 ftp_nb_put() 将文件上传至FTP服务器。

【原因】有的FTP服务器需要使用被动模式PASV连接。

【解决方法】

  修改 \app\importexport\lib\policy\ftp.php 文件

/**
     * 连接FTP服务器,并且登录
     *
     * @params array $params ftp服务器配置信息
     */
    public function connect($params,&$msg){

        if( !$params['host'] ){
            $msg = app::get('importexport')->_('FTP地址必填');
            return false;
        }

        $params['port'] = $params['port'] ? $params['port'] : 21;
        $params['timeout'] = $params['timeout'] ? $params['timeout'] : 30;
        if( $this->ftp_extension ) {
            $connect = ftp_connect($params['host'], $params['port'], $params['timeout']);
            $this->conn = $connect;
        } else {
            $connect = $this->ftpclient->connect($params['host'], $params['port'], $params['timeout']); 
        }
        
        if( !$connect ) {
            $msg = app::get('importexport')->_('连接FTP失败,请检查FTP地址或FTP端口');
            return false;
        }
        
        
        if( !$this->_login($params,$msg) ){            
            return false; 
        }
        
        ftp_pasv($connect,true); //新增被动模式
        
        //ftp_pasv($connect,true);
        $this->changeDirectory($params['dir']);
        
        

        return true;
    }

如果以上方法还是提示正在导出,请检查相应代码

1、/app/importexport/lib/tasks/runexport.php

2、/app/importexport/lib/type/csv.php

我的问题就出在csv.php没有fileHeader和fileFoot方法

posted on 2017-11-15 09:02  limonyun  阅读(249)  评论(0编辑  收藏  举报