Heim >Backend-Entwicklung >PHP-Tutorial >通过curl组件远程上传附件,代码报错找不到临时文件
yii curl 文件上传
求大牛解决,系统用的是yii框架搭建的。找了好久都没找到原因,新增可以,编辑的时候添加新的图片就是不成功if ($waitSave) { $files = array(); foreach ($waitSave as $r) $files[] = $r['url']; // 将文件移动到正式目录下... $rs = Attachment::connect(Yii::app()->params['key'], Yii::app()->params['secret'])->move($files); //$files 参数是一个图片绝对临时路径 的数组
static public function move($files = '') { if (!$files && !self::$files) return ; if (self::$files) $files = self::$files; $filesData['files'] = serialize($files); $post = self::getPostData($filesData); $rs = self::$curlInstance->send_post_data( self::ATTACHMENT_URL . self::API_FILENAME . 'move', $post ); return self::resultToObject($rs); }
function send_post_data($url, $postdata, $ip=null, $timeout=10) { curl_setopt($this->ch, CURLOPT_URL, $url); curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true); if ($ip) { if ($this->debug) { echo "Binding to ip $ip\n"; } curl_setopt($this->ch, CURLOPT_INTERFACE, $ip); } curl_setopt($this->ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($this->ch, CURLOPT_POST, true); $post_array = array(); if (is_array($postdata)) { foreach ($postdata as $key => $value) { $post_array[] = urlencode($key) . "=" . urlencode($value); } $post_string = implode("&", $post_array); if ($this->debug) { echo "Url: $url\nPost String: $post_string\n"; } } else { $post_string = $postdata; } curl_setopt($this->ch, CURLOPT_POSTFIELDS, $post_string); $result = curl_exec($this->ch); if (curl_errno($this->ch)) { if ($this->debug) { echo "Error Occured in Curl\n"; echo "Error number: " . curl_errno($this->ch) . "\n"; echo "Error message: " . curl_error($this->ch) . "\n"; } return false; } else { return $result; } }
elseif ($action == 'move') { // 请求移动文件 $files = (isset($_POST['files'])) ? unserialize(str_stripslashes($_POST['files'])) : ''; if (is_array($files)) { foreach ($files as $k => $v) $files[$k] = str_ireplace(AM_URL, '', $v); } else { $files = str_ireplace(AM_URL, '', $files); } $rs = $s->move($files, BASE_UPLOAD_DIR . date('Ym/d') . '/');
static public function move($file, $newfile) { return File::move($file, $newfile); }
static public function move($file = '', $filePath = '') { if (!$file or !$filePath) throw new ParametersException('未获取到请求移动的文件或者文件目标位置'); // 判断路径是否"/"结尾 $filePath = self::path($filePath); // 判断文件是否存在 if (is_array($file)) { foreach ($file as $f) { if (!file_exists($f)) throw new FileNotFoundException('源文件数组中包含不存在的文件'); } // 构造目标位置的绝对路径 foreach ($file as $key => $f) { $fileBaseName = basename($f); $newfiles[$key] = $filePath . $fileBaseName; } }
把一个及其简单的事情,弄得那么复杂?
把一个及其简单的事情,弄得那么复杂?
我以为这样能让人更明白