Téléchargement fichier xlsx à l'aide de php
J'ai besoin de faire xlsx
téléchargement de fichier à partir de mon site (mais pas à partir d'ouvrir directement le fichier de l'url comme ceci: http://site.com/file.xlsx
)
Donc, c'est du code php
$file = "somefile.xlsx";
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
fichier est téléchargé, son extension est .xlsx
, mais lorsque j'essaie d'ouvrir ce fichier dans ms excel, ce fichier n'est ouvert et je suis d'erreur : excel cannot open the file.xlsx because the file format or file extension is not valid
Dire s'il vous plaît, pourquoi c'est arrivé? où je me trompe?
- Quel est le fichier téléchargé contient-il?
- Si Excel plaintes que le fichier ne contient pas valide feuille de calcul, nous devons supposer qu'il sait de quoi il parle. Il y a deux possibilités:
somefile.xlsx
n'est pas valide pour commencer, ou de l'ordure est ajoutée dans le processus de téléchargement. Si vous enregistrez le fichier téléchargé sur le disque et l'ouvrir avec un éditeur de texte (pas d'Excel), vous pourriez être en mesure de repérer ce qui n'appartient pas à là. - Pekka 웃 , Álvaro --- Merci beaucoup, j'obtiens l'erreur.
- Veuillez également noter que si vous ne voulez que le fichier soit accessible via un lien direct vous devez placer ce fichier à l'extérieur de la racine de serveur web ou de configurer votre serveur web pour interdire que le type de fichier à télécharger.
Vous devez vous connecter pour publier un commentaire.
Supprimer:
Ajouter à la fin du code:
Le problème est que la méthode flush() sera également jeter dans votre *.xlsx fichier contenu certains ordures qu'il a en lui et qui corupt votre fichier, même si vous utilisez ob_clean();
Pour une meilleure compréhension, allez à php.net et de lire la différence entre la méthode flush(), ob_flush() et de trouver que vous n'avez même pas besoin d'eux dans le premier cas. Par conséquent, vous n'aurez pas besoin d'ob_clean() aussi.
Vous devez utiliser ce code dans le milieu d'un autre fichier.
Le problème avec les en-têtes est qu'ils doivent d'abord être définies sur une page. Ils ne fonctionneront pas si vous avez encore 1 seul espace écho avant eux. Si vous avez besoin de ob_clean() [nettoyer le tampon] avant de régler les en-têtes
Essayer
flush()
encore abouti à une erreur. À l'aide deob_clean()
par lui-même avant de définir les en-têtes de a fonctionné pour moi.Cela fonctionne pour moi: