ホームページ  >  記事  >  バックエンド開発  >  Curl コンポーネントを使用して添付ファイルをリモートでアップロードしますが、コードは一時ファイルが見つからないというエラーを報告します。

Curl コンポーネントを使用して添付ファイルをリモートでアップロードしますが、コードは一時ファイルが見つからないというエラーを報告します。

WBOY
WBOYオリジナル
2016-06-23 14:13:15973ブラウズ

この投稿は mrh111 によって最終編集されました: 2013-06-16 18:36:06

yiicurl ファイルのアップロード

システムは 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') . '/'); 



File クラスの move メソッド
	static public function move($file, $newfile) {		return File::move($file, $newfile);	}


if (!file_exists($f)) ここには一時ファイルが見つかりませんが、実際には、対応する画像ファイルが一時フォルダーに存在します。

ディスカッションへの返信(解決策)

とても単純なものをこんなに複雑にしてしまいますか?


とても単純なことをこんなに複雑にするのですか?


これで人々の理解が深まると思いました

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。