Maison développement back-end tutoriel php Compatibilité PHP5.0 ~ 5.6 des différentes versions Fonction de téléchargement de fichiers cURL

Compatibilité PHP5.0 ~ 5.6 des différentes versions Fonction de téléchargement de fichiers cURL

Jun 01, 2018 am 11:51 AM
curl

Cet article présente principalement la fonction de téléchargement de fichiers cURL de la compatibilité des différentes versions de PHP5.0 ~ 5.6, et analyse les compétences et précautions d'implémentation pertinentes pour l'opération de téléchargement de fichiers curl de diverses versions courantes de PHP sous forme d'exemples. . Les amis dans le besoin peuvent s'y référer. Suivant

L'exemple de cet article analyse la compatibilité de la fonction de téléchargement de fichiers cURL de chaque version de PHP5.0~5.6. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Une exigence récente consiste à appeler cURL via PHP pour télécharger des fichiers au format multipart/form-data. Quelques écueils suffisent pour un article.

Avertissement important

Ne lisez pas la documentation officielle chinoise de PHP ! La version ne peut pas suivre et elle va vous tuer !

Différences de cURL entre les différentes versions de PHP

Le cURL de PHP prend en charge la transmission de tableaux associatifs (au lieu de chaînes) à CURL_POSTFIELDS pour générer un Demande POST pour multipart/form-data.

Traditionnellement, cURL de PHP prend en charge la pièce jointe de fichiers en utilisant la syntaxe "@+chemin d'accès complet au fichier" dans les données du tableau pour que cURL puisse lire et télécharger. Ceci est cohérent avec la syntaxe permettant d'appeler directement le programme cURL depuis la ligne de commande :

curl_setopt(ch, CURLOPT_POSTFIELDS, array(
  'file' => '@'.realpath('image.png'),
));
Copier après la connexion

equals

$ curl -F "file=@/absolute/path/to/image.png" <url>
Copier après la connexion

Mais PHP a introduit une nouvelle classe CURLFile depuis la version 5.5 pour pointer vers des fichiers. La classe CURLFile peut également définir en détail des informations supplémentaires telles que les types MIME, les noms de fichiers, etc. qui peuvent apparaître dans les données multipart/form-data. PHP recommande d'utiliser CURLFile pour remplacer l'ancienne syntaxe @ :

curl_setopt(ch, CURLOPT_POSTFIELDS, [
  &#39;file&#39; => new CURLFile(realpath(&#39;image.png&#39;)),
]);
Copier après la connexion

PHP 5.5 introduit également l'option CURL_SAFE_UPLOAD, qui peut forcer le module cURL de PHP pour rejeter l'ancienne syntaxe @, n'accepte que les fichiers de style CURLFile. La valeur par défaut est false pour 5,5 et true pour 5,6.

Mais le piège est le suivant : la syntaxe @ est obsolète dans la version 5.5 et a été directement supprimée dans la version 5.6 (une ErorException sera générée : l'utilisation de l'API @filename pour le téléchargement de fichiers est obsolète. Veuillez utilisez plutôt la classe CURLFile).

Pour PHP 5.6+, définir manuellement CURL_SAFE_UPLOAD sur false est inutile. Cela n'est pas littéralement compris comme "le définir sur false activera l'ancienne méthode non sécurisée" - l'ancienne méthode a complètement cessé d'exister en tant que syntaxe obsolète. PHP 5.6+ == CURLFile uniquement, ne vous faites pas d'illusions.

Mon environnement de déploiement est 5.4 (@Syntax uniquement), mais mon environnement de développement est 5.6 (CURLFile uniquement). Aucun des deux n'est axé sur la version 5.5, une version transitoire prise en charge par les deux. Par conséquent, deux ensembles de codes portant sur le jugement environnemental doivent être rédigés.

Maintenant, voici le problème...

Jugement environnemental : Attention au chiffre magique !

J'ai vu ce genre de code de jugement environnemental :

if (version_compare(phpversion(), &#39;5.4.0&#39;) >= 0)
Copier après la connexion

Mon évaluation de ce genre de code Il n'y a qu'un seul mot : merde.

Ce jugement tombe dans un piège typique des nombres magiques. Le numéro de version apparaît inexplicablement dans le code. Sans vérifier longtemps le manuel PHP et l'historique des mises à jour, il est difficile de comprendre sur quel changement de fonction l'auteur est bloqué.

Le code doit retourner à ses racines. Nos besoins réels sont en fait : utiliser CURLFile en premier, sans régresser vers la syntaxe traditionnelle @. Voici donc le code :

if (class_exists(&#39;\CURLFile&#39;)) {
  $field = array(&#39;fieldname&#39; => new \CURLFile(realpath($filepath)));
} else {
  $field = array(&#39;fieldname&#39; => &#39;@&#39; . realpath($filepath));
}
Copier après la connexion

Des options de dégradation explicitement spécifiées sont recommandées

D'un point de vue fiable, il est recommandé de spécifier la valeur de CURL_SAFE_UPLOAD pour indiquer clairement à PHP s'il doit tolérer ou interdire l'ancienne syntaxe @. Notez que la constante CURLOPT_SAFE_UPLOAD elle-même peut ne pas exister dans les versions inférieures de PHP. Vous devez déterminer :

if (class_exists(&#39;\CURLFile&#39;)) {
  curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
} else {
  if (defined(&#39;CURLOPT_SAFE_UPLOAD&#39;)) {
    curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
  }
}
Copier après la connexion

la constante. ordre des paramètres des options cURL

Qu'il s'agisse curl_setopt() unique ou curl_setopt_array() lot, les options de cURL sont toujours définies pour prendre effet une par une, et les options définies affecteront immédiatement cURL lors de la définition des options suivantes.

Par exemple, CURLOPT_SAFE_UPLOAD est lié au comportement de CURLOPT_POSTFIELDS. Si CURLOPT_POSTFIELDS est défini en premier puis CURLOPT_SAFE_UPLOAD est défini, la contrainte de ce dernier ne prendra pas effet. Parce que lors de la configuration du premier, cURL a déjà terminé la lecture et le traitement proprement dit des données !

CURL propose plusieurs options qui présentent cet écueil, alors soyez prudent. Heureusement, il n'existe pas beaucoup d'options pour ce type de "dépendance", et le mécanisme n'est pas compliqué, il peut donc être géré simplement. Ma méthode consiste d'abord à définir toutes les options par lots, puis à utiliser des curl_exec()paramètres uniquescurl_setopt() jusqu'à juste avant CURLOPT_POSTFIELDS.

En effet, dans le tableau utilisé par curl_setopt_array(), il est garanti que la position de CURLOPT_POSTFIELDS est fiable à la fin. Les tableaux associatifs de PHP sont garantis séquentiellement. Nous pouvons également supposer que l'ordre d'exécution interne de curl_setopt_array() doit être dans l'ordre du début à la fin (enfin, je sais que supposer n'est pas une bonne chose, mais certains faits sont trop simples, laissez-moi vous expliquer. Ceci est une affirmation minimale), vous pouvez donc être rassuré.

Mon approche consiste simplement à ajouter une assurance supplémentaire aux performances du code, en soulignant l'importance de l'ordre pour éviter de futures tricheries.

Espace de noms

Les versions PHP 5.2 ou inférieures n'ont pas d'espaces de noms. Si le délimiteur d'espace est utilisé dans le code, une erreur d'analyse se produira. Il est en fait facile de penser à s'occuper de PHP 5.2, il suffit d'abandonner l'espace de noms.

Ce qu'il convient de noter, c'est que PHP 5.3+ a des espaces de noms. Que vous appeliez CURLFile ou que vous utilisiez class_exists() pour déterminer l'existence de CURLFile, il est recommandé d'écrire CURLFile pour spécifier clairement l'espace de niveau supérieur afin d'éviter que le code ne plante lorsqu'il est encapsulé dans l'espace de noms.

Recommandations associées :

Compatible avec la fonction de téléchargement de fichiers cURL de php5 et php7

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment réaliser la conversion mutuelle entre les requêtes CURL et python en python Comment réaliser la conversion mutuelle entre les requêtes CURL et python en python May 03, 2023 pm 12:49 PM

curl et Pythonrequests sont des outils puissants pour envoyer des requêtes HTTP. Alors que curl est un outil de ligne de commande qui vous permet d'envoyer des requêtes directement depuis le terminal, la bibliothèque de requêtes de Python fournit un moyen plus programmatique d'envoyer des requêtes à partir du code Python. La syntaxe de base pour convertir curl en commande Pythonrequestscurl est la suivante : curl[OPTIONS]URL Lors de la conversion de la commande curl en requête Python, nous devons convertir les options et l'URL en code Python. Voici un exemple de commande curlPOST : curl-XPOST https://example.com/api

Tutoriel sur la mise à jour de la version curl sous Linux ! Tutoriel sur la mise à jour de la version curl sous Linux ! Mar 07, 2024 am 08:30 AM

Pour mettre à jour la version curl sous Linux, vous pouvez suivre les étapes ci-dessous : Vérifiez la version actuelle de curl : Tout d'abord, vous devez déterminer la version de curl installée dans le système actuel. Ouvrez un terminal et exécutez la commande suivante : curl --version Cette commande affichera les informations sur la version actuelle de curl. Confirmer la version curl disponible : Avant de mettre à jour curl, vous devez confirmer la dernière version disponible. Vous pouvez visiter le site officiel de curl (curl.haxx.se) ou des sources de logiciels associées pour trouver la dernière version de curl. Téléchargez le code source de curl : à l'aide de curl ou d'un navigateur, téléchargez le fichier de code source pour la version curl de votre choix (généralement .tar.gz ou .tar.bz2).

Sortie de PHP8.1 : introduction de curl pour le traitement simultané de plusieurs requêtes Sortie de PHP8.1 : introduction de curl pour le traitement simultané de plusieurs requêtes Jul 08, 2023 pm 09:13 PM

PHP8.1 publié : présentation de curl pour le traitement simultané de plusieurs requêtes. Récemment, PHP a officiellement publié la dernière version de PHP8.1, qui a introduit une fonctionnalité importante : curl pour le traitement simultané de plusieurs requêtes. Cette nouvelle fonctionnalité offre aux développeurs un moyen plus efficace et plus flexible de gérer plusieurs requêtes HTTP, améliorant ainsi considérablement les performances et l'expérience utilisateur. Dans les versions précédentes, la gestion de plusieurs requêtes nécessitait souvent de créer plusieurs ressources curl et d'utiliser des boucles pour envoyer et recevoir des données respectivement. Bien que cette méthode puisse atteindre l'objectif

Du début à la fin : Comment utiliser l'extension php cURL pour effectuer des requêtes HTTP Du début à la fin : Comment utiliser l'extension php cURL pour effectuer des requêtes HTTP Jul 29, 2023 pm 05:07 PM

Du début à la fin : Comment utiliser l'extension php cURL pour les requêtes HTTP Introduction : En développement web, il est souvent nécessaire de communiquer avec des API tierces ou d'autres serveurs distants. Utiliser cURL pour effectuer des requêtes HTTP est un moyen courant et puissant. Cet article expliquera comment utiliser PHP pour étendre cURL afin d'effectuer des requêtes HTTP et fournira quelques exemples de code pratiques. 1. Préparation Tout d'abord, assurez-vous que l'extension cURL est installée sur php. Vous pouvez exécuter php-m|grepcurl sur la ligne de commande pour vérifier

Comment gérer la redirection 301 des pages web en PHP Curl ? Comment gérer la redirection 301 des pages web en PHP Curl ? Mar 08, 2024 am 11:36 AM

Comment gérer la redirection 301 des pages web dans PHPCurl ? Lorsque vous utilisez PHPCurl pour envoyer des requêtes réseau, vous rencontrerez souvent un code d'état 301 renvoyé par la page Web, indiquant que la page a été redirigée définitivement. Afin de gérer correctement cette situation, nous devons ajouter des options spécifiques et une logique de traitement à la requête Curl. Ce qui suit présentera en détail comment gérer la redirection 301 des pages Web dans PHPCurl et fournira des exemples de code spécifiques. Principe de traitement de la redirection 301 La redirection 301 signifie que le serveur renvoie un 30

qu'est-ce que Linux Curl qu'est-ce que Linux Curl Apr 20, 2023 pm 05:05 PM

Sous Linux, curl est un outil très pratique pour transférer des données vers et depuis le serveur. Il s'agit d'un outil de transfert de fichiers qui utilise des règles d'URL pour fonctionner sous la ligne de commande ; il prend en charge le téléchargement et le téléchargement de fichiers et constitue un outil de transfert complet. Curl fournit de nombreuses fonctions très utiles, notamment l'accès proxy, l'authentification des utilisateurs, le téléchargement et le téléchargement FTP, HTTP POST, la connexion SSL, la prise en charge des cookies, la reprise du point d'arrêt, etc.

Comment définir des cookies dans php curl Comment définir des cookies dans php curl Sep 26, 2021 am 09:27 AM

Comment définir les cookies dans php curl : 1. Créez un exemple de fichier PHP ; 2. Définissez les options de transmission cURL via la fonction "curl_setopt" ; 3. Transmettez les cookies dans CURL.

Solution à l'erreur fatale PHP : appel à une fonction non définie curl_setopt() Solution à l'erreur fatale PHP : appel à une fonction non définie curl_setopt() Jun 23, 2023 am 08:18 AM

PHP est un langage de script open source largement utilisé par de nombreux sites Web. Cependant, vous pouvez parfois rencontrer le problème PHPFatalerror:Calltoundefinedfunctioncurl_setopt(), qui peut empêcher votre site Web de fonctionner correctement. Alors, quelle est la cause exacte de ce problème ? En PHP, curl_setopt() est une fonction très importante, utilisée pour étendre la bibliothèque via curl

See all articles