ftp 传文件完整代码(二)
一、数据库查询数据 根据要求生成文件
/** * 根据$date参数,生成账单文件名。 * * @param DateTime $date 日期。 * * @return string */ protected function _billFileName($date) { # 账单文件名规范:DZ+[渠道ID]+[八位日期 YYYYMMDD],渠道代码由BOSS系统提供。例如:DZ800020110916 return sprintf('DGDZ%s%s', $this->appId, date('Ymd', strtotime($date))); } /** * 根据$fileName参数,生成路径。 * * @param string $fileName 文件名。 * * @return string */ protected function _billRealFileName($fileName) { return SKIHAT_PATH_APP_MODULES . '/docs/' . $fileName; //return SKIHAT_PATH_APP_PUBLICS . '/youjia/' . $fileName; }
二 、上传ftp
/** * @const string 渠道代码 */ public $appId = 'test00000096868'; /** * @const string ftp密码 */ public $ftpUser = 'ftp://172.16.84.26/'; /** * @const string ftp密码 */ public $ftpPWD = 'yjpt:yjpt2018.'; /** * 将$fileName参数,将指定的对账文件上传到FTP地址。 * * @param string $fileName 文件名。 * * @return bool */ public function uploadComboBillFile($fileName) { # 获取真实文件名。 $realFile = $this->_billRealFileName($fileName); if (is_file($realFile) == false) { return $this->error($this->errorBillFile); } $fileRes = fopen($realFile, 'r'); if ($fileRes == false) { return $this->error($this->errorBillFile); } # 使用curl上传文件到FTP目录。 $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $this->ftpUser . $fileName); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); # 设置超时时间 curl_setopt($curl, CURLOPT_TIMEOUT, 300); curl_setopt($curl, CURLOPT_USERPWD, $this->ftpPWD); # 设置上传参数。 curl_setopt($curl, CURLOPT_UPLOAD, 1); curl_setopt($curl, CURLOPT_INFILE, $fileRes); curl_setopt($curl, CURLOPT_INFILESIZE, filesize($realFile)); # 执行上传业务 $rtn = curl_exec($curl); $error = curl_error($curl); fclose($fileRes); curl_close($curl); return $error ? $this->error($error) : true; }