通过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; } }
下面是远程服务器上的代码
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)) 这里就找不到临时文件了,但是实际上临时文件夹是有对应图片文件存在的。
回复讨论(解决方案)
把一个及其简单的事情,弄得那么复杂?
把一个及其简单的事情,弄得那么复杂?
我以为这样能让人更明白

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Alipay PHP ...

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Wie debugge ich den CLI -Modus in PhpStorm? Bei der Entwicklung mit PHPSTORM müssen wir manchmal den PHP im CLI -Modus (COMS -Zeilenschnittstellen) debuggen ...

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...
