本帖最后由 mrh111 于 2013-06-16 18:36:06 编辑
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; } }
下面是远程服务器上的代码
api.php
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);}
File类里面的move方法
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;}}
if (!file_exists($f)) 这里就找不到临时文件了,但是实际上临时文件夹是有对应图片文件存在的。
回复讨论(解决方案)
把一个及其简单的事情,弄得那么复杂?
把一个及其简单的事情,弄得那么复杂?
我以为这样能让人更明白
本文原创发布php中文网,转载请注明出处,感谢您的尊重!