In diesem Artikel wird hauptsächlich die Funktion zum Hochladen von cURL-Dateien vorgestellt, die mit PHP5 und PHP7 kompatibel ist. Er analysiert die relevanten Beurteilungen und spezifischen Bedienungsfähigkeiten bei der Verwendung von Curl zum Hochladen von Dateien für PHP5- und PHP7-Versionen anhand von Beispielen . Das folgende
Das Beispiel in diesem Artikel beschreibt die cURL-Datei-Upload-Funktion, die mit PHP5 und PHP7 kompatibel ist. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Warum sollte ich dieses Beispiel schreiben?
Ein Projekt muss sein Kürzlich über cURL hochgeladen.
Ich erinnerte mich, dass ich schon einmal eine ähnliche Implementierung durchgeführt hatte, also habe ich den vorherigen Code herausgekramt und das „@“-Präfix verwendet.
Aber die gleiche Methode funktioniert jetzt nicht! Später stellte sich heraus, dass es sich um ein Versionskompatibilitätsproblem handelte.
Im Sinne des Open-Source-Sharings und um ein Vergessen zu vermeiden, habe ich das folgende Beispielprogramm geschrieben.
Beispielprogramm
Besonderer Hinweis:
Insgesamt 3 Dateien, alle im Testverzeichnis des Webs abgelegt Stammverzeichnis und stellen Sie sicher, dass das Verzeichnis beschreibbar ist. Auch hochgeladene Bilder werden in diesem Verzeichnis gespeichert.
Wenn Sie die Programmdatei in einem anderen Verzeichnis ausführen möchten, müssen Sie die entsprechende URL im PHP-Code ändern, sonst läuft das Beispiel möglicherweise nicht.
<html> <head> <title>上传示例</title> </head> <body> <p>下面上传文件到中间脚本:</p> <br /> <form action="upload.php" method="post" enctype="multipart/form-data"> 选择文件: <input type="file" name="file" /> <input type="submit" value="上传" /> </form> </body> </html>
<?php /** * 接收通过浏览器上传的文件 * * @author Straiway<straiway@qq.com> * @site http://straiway.sinaapp.com */ if (empty($_FILES['file'])) { exit('没有上传指定名称的文件'); } // 先保存到本地,再上传 $file = $_FILES['file']; $file_name = __DIR__ . "/{$file['name']}"; move_uploaded_file($_FILES['file']['tmp_name'], $file_name); // 本地测试时,可能需要更改下面的URL $ch = curl_init('http://localhost/test/upload_via_curl.php'); // 从php5.5开始,反对使用"@"前缀方式上传,可以使用CURLFile替代; // 据说php5.6开始移除了"@"前缀上传的方式 if (class_exists('CURLFile')) { $file = new CURLFile($file_name); // 禁用"@"上传方法,这样就可以安全的传输"@"开头的参数值 curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true); } else { $file = "@{$file_name}"; } // 从php5.2开始,要上传文件,必须给CURLOPT_POSTFIELDS传递数组,而不是字符串。 // 也只有传递数组,http头部的"Content-Type"才会设置成"multipart/form-data" curl_setopt($ch, CURLOPT_POSTFIELDS, array('file_via_curl' => $file)); // 将传输结果作为curl_exec的返回值,而不是直接输出 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); $error = curl_error($ch); if ($result) { $result_array = json_decode($result, true); if ($result_array) { if ($result_array['status']) { exit("上传成功!curl返回图片地址:{$result_array['data']['url']}<br /><img src='{$result_array['data']['url']}' />"); } else { exit("curl上传失败!错误信息:{$result['info']}"); } } else { exit("发生错误,curl返回结果:{$result}"); } } else { exit('curl请求发生错误' . var_export($error, true)); }
<?php /** * 接受通过curl上传的文件。 * * @author Straiway<straiway@qq.com> * @site http://straiway.sinaapp.com */ if (empty($_FILES['file_via_curl'])) { $return = array('status' => 0, 'info' => '没有上传指定名称的文件'); } else { // 保存文件 $file = $_FILES['file_via_curl']; // 重命名文件,便于识别 $base_name = explode('.', $file['name']); $base_name[0] .= '_upload_var_curl'; $base_name = implode('.', $base_name); $file_name = __DIR__ . "/{$base_name}"; if (move_uploaded_file($file['tmp_name'], $file_name)) { // 本地测试时,可能需要更改下面的URL $url = "http://localhost/test/{$base_name}"; $return = array('status' => 1, 'info' => '上传成功', 'data' => array('url' => $url)); } else { $return = array('status' => 0, 'info' => '上传失败'); } } exit(json_encode($return));
Verwandte Empfehlungen:
Analyse der PHP-Blockabfrage-Implementierungsmethode
Das obige ist der detaillierte Inhalt vonKompatibel mit der cURL-Datei-Upload-Funktion von PHP5 und PHP7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!