Maison  >  Article  >  développement back-end  >  Que faire si le nom du fichier téléchargé par PHP IE est tronqué

Que faire si le nom du fichier téléchargé par PHP IE est tronqué

藏色散人
藏色散人original
2020-10-23 09:10:162115parcourir

Solutions aux noms de fichiers tronqués téléchargés par PHP IE : 1. Résolvez les caractères tronqués via la méthode d'en-tête ; 2. Grâce à la fonction "remote_filesize($uri,$user='',$pw='') {... }" et d'autres méthodes pour résoudre les caractères tronqués.

Que faire si le nom du fichier téléchargé par PHP IE est tronqué

Recommandé : "Tutoriel vidéo PHP"

téléchargement du fichier php nom du fichier IE tronqué Problème

J'utilise le navigateur Chrome et je n'ai rencontré aucun problème. J'ai utilisé IE6 aujourd'hui et j'ai découvert que le nom du fichier était tronqué lors du téléchargement du fichier, et que le nom du fichier téléchargé depuis Thunder sous IE était également tronqué. J'ai vérifié en ligne et j'ai dit que je devais utiliser urlencode pour l'encoder dans IE. J'ai essayé

header('Content-Disposition: attachment; filename='. rawurlencode($file_name);) et le résultat était toujours. tronqué lorsque je l'ai téléchargé. Le fichier php lui-même est codé en gbk/gb2312, j'ai donc d'abord converti $file_name en encodage utf-8, puis urlencode

header('Content-Disposition: attachment; filename='. rawurlencode (iconv("GBK" ,"UTF-8",$file_name))); De cette façon, il n'y a aucun problème lors du téléchargement avec IE. Le code urlencode peut-il échapper uniquement à l'encodage pour utf-8 ? également le problème d'obtenir la taille du fichier distant ? , la fonction filesize en PHP ne peut traiter que les fichiers locaux. Le traitement des fichiers distants échouera et émettra un avertissement, et les paramètres transmis sur la plate-forme Windows doivent être encodés en gbk/gb2312. L'utilisation de l'encodage UTF-8 ne permettra pas d'accéder aux ressources

J'ai trouvé quatre façons d'obtenir la taille du fichier distant sur Internet. Merci aux seniors pour leur partage :

Méthode 1 : en-tête

<?php get_headers($url,true); //返回结果 Array ( [0] => HTTP/1.1 200 OK [Date] => Sat, 29 May 2004 12:28:14 GMT [Server] => Apache/1.3.27 (Unix) (Red-Hat/Linux) [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT [ETag] => "3f80f-1b6-3e1cb03b" [Accept-Ranges] => bytes [Content-Length] => 438 [Connection] => close [Content-Type] => text/html ) ?>

Ici, vous pouvez suivre Content-Length pour obtenir directement la taille

Méthode 2 : curl

function remote_filesize($uri,$user=&#39;&#39;,$pw=&#39;&#39;) { // start output buffering ob_start(); // initialize curl with given uri $ch = curl_init($uri); // make sure we get the header curl_setopt($ch, CURLOPT_HEADER, 1); // make it a http HEAD request curl_setopt($ch, CURLOPT_NOBODY, 1); // if auth is needed, do it here if (!emptyempty($user) && !emptyempty($pw)) { $headers = array(&#39;Authorization: Basic &#39; . base64_encode($user.&#39;:&#39;.$pw)); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); } $okay = curl_exec($ch); curl_close($ch); // get the output buffer $head = ob_get_contents(); // clean the output buffer and return to previous // buffer settings ob_end_clean(); echo &#39;<br>head-->&#39;.$head.&#39;<----end <br>&#39;; // gets you the numeric value from the Content-Length // field in the http header $regex = &#39;/Content-Length:\s([0-9].+?)\s/&#39;; $count = preg_match($regex, $head, $matches); // if there was a Content-Length field, its value // will now be in $matches[1] if (isset($matches[1])) { $size = $matches[1]; } else { $size = &#39;unknown&#39;; } //$last=round($size/(1024*1024),3); //return $last.&#39; MB&#39;; return $size; } 方法三:fsock
function getFileSize($url) { $url = parse_url($url); if($fp = @fsockopen($url[&#39;host&#39;],emptyempty($url[&#39;port&#39;])?80:$url[&#39;port&#39;],$error)) { fputs($fp,"GET ".(emptyempty($url[&#39;path&#39;])?&#39;/&#39;:$url[&#39;path&#39;])." HTTP/1.1\r\n"); fputs($fp,"Host:$url[host]\r\n\r\n"); while(!feof($fp)) { $tmp = fgets($fp); if(trim($tmp) == &#39;&#39;) { break; } elseif(preg_match(&#39;/Content-Length:(.*)/si&#39;,$tmp,$arr)) { return trim($arr[1]); } } return null; } else { return null; } } 方法四:file_get_contents
$fCont = file_get_contents("http://www.cnmiss.cn/"); echo strlen($fCont)/1024;
.

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