http - Concernant le problème de définition de la longueur du contenu en PHP.
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 12:58:51
0
1
1140

1. Laissez-moi d'abord parler de mon scénario d'utilisation. Autrement dit, le client utilise l'interface du serveur pour télécharger des fichiers. Le côté serveur obtient directement le binaire et le génère. Existe-t-il une méthode de retour plus raisonnable que l'écho binaire ?

2. Utilisez PHP header('Content-Length: '.strlen($Download)); pour définir Content-Length. Ce paramètre est-il réellement invalide ? Car logiquement parlant, la requête http elle-même définira Content-Length en fonction de la taille de la sortie. Même si je modifie les paramètres, la longueur de contenu finale demandée est toujours basée sur la taille réelle.

3. Un autre problème est que je demande le binaire d'un fichier de 10M. Si vous le demandez avec un navigateur, aucun en-tête Content-Length ne sera renvoyé du tout. Lors de la demande du client, Content-Length peut être renvoyé normalement. Le retour de Content-Length est-il également lié à la méthode de requête ?

过去多啦不再A梦
过去多啦不再A梦

répondre à tous(1)
漂亮男人

Votre source est-elle un flux binaire ?

1. S'il s'agit d'un fichier, juste pour masquer le vrai chemin, vous pouvez essayer la méthode suivante :

readfile($filename) est plus efficace que echoreadfile($filename)echo效率高

或者使用 X-SendFile技术

如果的确是二进制流,也可以尝试先缓存成文件了 然后 X-SendFile

2, header设置Content-Length是有效的,返回真实的大小即可。这个在一些下载软件比较重要,比如迅雷。
它会检测最终大小是否符合Content-Length

3, 浏览器会以Content-Length为参照,
但是当网络很糟糕的时候,超时、断流了,浏览器也会停止下载,最终得到的是一个不完整的文件,这个下载国外软件的时候很常见。
如果实际大小超过了Content-Length,浏览器也接受。

4, 所以即使没有Content-Length

Ou utilisez la technologie X-SendFile🎜 🎜S'il s'agit bien d'un flux binaire, vous pouvez également essayer de le mettre en cache d'abord dans un fichier, puis X-SendFile🎜 🎜2, le paramètre header Content-Length est valide, renvoie simplement la taille réelle. Ceci est plus important dans certains logiciels de téléchargement, tels que Thunder.
Il vérifiera si la taille finale est conforme au Content-Length🎜 🎜3. Le navigateur utilisera Content-Length comme référence,
mais lorsque le réseau est très mauvais, qu'il expire ou qu'il est déconnecté, le navigateur arrêtera également le téléchargement, et c'est ainsi que vous terminerez. Le fichier téléchargé est incorrect, ce qui est très courant lors du téléchargement de logiciels étrangers.
Si la taille réelle dépasse Content-Length, le navigateur l'accepte également. 🎜 🎜4, Ainsi, même si aucun Content-Length n'est renvoyé, le navigateur peut toujours télécharger. Lorsque le serveur se déconnecte, le navigateur mettra fin au téléchargement. 🎜
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal