Maison  >  Article  >  développement back-end  >  Exemple d'analyse de la fonction de téléchargement de fichiers cURL compatible avec les compétences PHP php5 et php7

Exemple d'analyse de la fonction de téléchargement de fichiers cURL compatible avec les compétences PHP php5 et php7

jacklove
jackloveoriginal
2018-06-25 16:52:291723parcourir

Cet article présente principalement la fonction de téléchargement de fichiers cURL compatible avec php5 et php7. Il analyse les jugements pertinents et les compétences opérationnelles spécifiques lors de l'utilisation de curl pour télécharger des fichiers pour les versions php5 et php7 avec des exemples. . Ce qui suit

L'exemple dans cet article décrit la fonction de téléchargement de fichiers cURL compatible avec php5 et php7. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Pourquoi devrais-je écrire cet exemple ?

Un projet doit être téléchargé via cURL récemment.

Je me suis souvenu que j'avais déjà fait une implémentation similaire, alors j'ai extrait le code précédent et utilisé le préfixe "@".

Mais la même méthode ne fonctionne plus maintenant ! Plus tard, on a découvert qu'il s'agissait d'un problème de compatibilité de version.

Dans l'esprit du partage open source et en même temps pour éviter d'oublier, j'ai écrit l'exemple de programme suivant.

Exemple de programme

Note spéciale :

Un total de 3 fichiers, tous placés dans le répertoire de test du web répertoire racine et assurez-vous que le répertoire est accessible en écriture. Les images téléchargées seront également enregistrées dans ce répertoire.

Si vous souhaitez exécuter le fichier programme dans un autre répertoire, vous devez modifier l'URL correspondante dans le code php, sinon l'exemple risque de ne pas s'exécuter.


<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[&#39;file&#39;])) {
  exit(&#39;没有上传指定名称的文件&#39;);
}
// 先保存到本地,再上传
$file   = $_FILES[&#39;file&#39;];
$file_name = __DIR__ . "/{$file[&#39;name&#39;]}";
move_uploaded_file($_FILES[&#39;file&#39;][&#39;tmp_name&#39;], $file_name);
// 本地测试时,可能需要更改下面的URL
$ch = curl_init(&#39;http://localhost/test/upload_via_curl.php&#39;);
// 从php5.5开始,反对使用"@"前缀方式上传,可以使用CURLFile替代;
// 据说php5.6开始移除了"@"前缀上传的方式
if (class_exists(&#39;CURLFile&#39;)) {
  $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(&#39;file_via_curl&#39; => $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[&#39;status&#39;]) {
      exit("上传成功!curl返回图片地址:{$result_array[&#39;data&#39;][&#39;url&#39;]}<br /><img src=&#39;{$result_array[&#39;data&#39;][&#39;url&#39;]}&#39; />");
    } else {
      exit("curl上传失败!错误信息:{$result[&#39;info&#39;]}");
    }
  } else {
    exit("发生错误,curl返回结果:{$result}");
  }
} else {
  exit(&#39;curl请求发生错误&#39; . var_export($error, true));
}



<?php
/**
 * 接受通过curl上传的文件。
 *
 * @author Straiway<straiway@qq.com>
 * @site  http://straiway.sinaapp.com
 */
if (empty($_FILES[&#39;file_via_curl&#39;])) {
  $return = array(&#39;status&#39; => 0, &#39;info&#39; => &#39;没有上传指定名称的文件&#39;);
} else {
  // 保存文件
  $file = $_FILES[&#39;file_via_curl&#39;];
  // 重命名文件,便于识别
  $base_name = explode(&#39;.&#39;, $file[&#39;name&#39;]);
  $base_name[0] .= &#39;_upload_var_curl&#39;;
  $base_name = implode(&#39;.&#39;, $base_name);
  $file_name = __DIR__ . "/{$base_name}";
  if (move_uploaded_file($file[&#39;tmp_name&#39;], $file_name)) {
    // 本地测试时,可能需要更改下面的URL
    $url  = "http://localhost/test/{$base_name}";
    $return = array(&#39;status&#39; => 1, &#39;info&#39; => &#39;上传成功&#39;, &#39;data&#39; => array(&#39;url&#39; => $url));
  } else {
    $return = array(&#39;status&#39; => 0, &#39;info&#39; => &#39;上传失败&#39;);
  }
}
exit(json_encode($return));


Références

http://php.net/manual/fr / function.curl-setopt.php

//www.jb51.net/article/139950.htm


Articles qui pourraient vous intéresser :

Méthode de mise en œuvre de requête de bloc PHP analyse compétences php

Exemple d'algorithme de recherche PHP analyse compétences php

Exemple d'algorithme de recherche PHP moitié (bisection) analyse compétences php


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn