如果导出队列能成功执行(队列不执行看这里)但是并未生成文件,那么原因大部份可能是出在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方法