2016-07-21 4 views
1

J'ai une question à propos de quelque chose de très étrange ... Pourquoi le fichier xls, que je crée avec PHP, pas la même chose quand je le télécharge à partir d'un serveur linux comme quand je le télécharge depuis un serveur Windows? Avec js je parse une table html, filtre quelques colonnes et pousse la table dans un formulaire et la soumets à un script PHP. Dans le script, j'écho un fichier xml avec les en-têtes spécifiques. Lorsque je fais cela sur Windows avec xampp et télécharger et ouvrir le fichier, je reçois un message d'Excel que le contenu et le type de fichier ne correspondent pas, mais je peux l'ouvrir. Lorsque je télécharge le même fichier (nouveau fichier généré avec le même contenu) à partir d'un serveur Linux, je ne peux pas ouvrir le fichier - même pas le message apparaît.xls téléchargé à partir de Linux pas le même que téléchargé à partir de windows

La taille du fichier, le contenu, l'encodage - même ...

Pourquoi cela?

EDIT: Quand j'ouvre le fichier (qui j'ai téléchargé à partir de linux) avec notepad ++, changer une ligne, annuler et conserver ce, Excel peut ouvrir le fichier (avec le message que le contenu et filetype ne correspondent pas) .

est ici un code pour votre compréhension:

JS-Part:

// var filename = string 
// var this table = previously parsed html table 
$('<form target="_blank" action="download.php" method="post"><input type="hidden" name="filename" value="' + encodeURIComponent(filename) + '" /><input type="hidden" name="data" value="' + encodeURIComponent(thisTable) + '" /></form>').appendTo($('body')).submit().remove(); 

PHP-Part:

<?php 
header('P3P: CP="NOI NID ADMa CAO PSA OUR IND UNI COM NAV"'); 
header("Content-Type: application/ms-excel"); 
header("Content-Disposition: attachment; filename=\"".$_REQUEST['filename'].".xls\";"); 
echo "<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">"; 
echo "<head>"; 
echo "<!--[if gte mso 9]>"; 
echo "<xml>"; 
echo "<x:ExcelWorkbook>"; 
echo "<x:ExcelWorksheets>"; 
echo "<x:ExcelWorksheet>"; 
echo "<x:Name>".$_REQUEST['filename']."</x:Name>"; 
echo "<x:WorksheetOptions>"; 
echo "<x:Panes>"; 
echo "</x:Panes>"; 
echo "<x:PageSetup>"; 
echo "<x:Layout x:Orientation=\"Landscape\"/>"; 
echo "</x:PageSetup>"; 
echo "</x:WorksheetOptions>"; 
echo "</x:ExcelWorksheet>"; 
echo "</x:ExcelWorksheets>"; 
echo "</x:ExcelWorkbook>"; 
echo "</xml>"; 
echo "<![endif]-->"; 
echo '<style type="text/css">td{mso-number-format:"#\,##0\.00";} @page {mso-page-orientation:landscape;}</style>'; 
echo "</head>"; 
echo "<body>"; 
echo utf8_decode(urldecode($_REQUEST['data'])); 
echo "</body>"; 
echo "</html>"; 
?> 

Merci pour votre aide!

+0

Votre pas écrire un fichier xls avec ce code –

+0

@Dagon: Peut-être pas un " réel "fichier xls mais un type de sorte Excel peut ouvrir et interpréter (lorsqu'il est téléchargé à partir de Windows Server/xampp). – Theo

Répondre

0

Il se peut que le fichier de Linux soit "bloqué" car le fichier provient d'un ordinateur inconnu. Si vous regardez les propriétés du fichier dans Windows, en bas, il peut y avoir un message sur la sécurité et la possibilité de "débloquer". Parce que vous avez édité et enregistré le fichier Linux, Excel pense maintenant qu'il s'agit d'un fichier sécurisé de votre ordinateur Windows et donc pas bloqué.

article https://superuser.com/questions/1103241/excel-no-longer-receive-the-option-to-open-files-in-a-different-format explique qu'une récente "patch" de Microsoft a introduit cette restriction (Windows Update KB3115130 pour Excel 2010 et Windows Update KB3115262 pour Excel 2013), ainsi que les options suivantes pour aider:

Option 1

  • Panneau de configuration> options Internet
  • onglet sécurité> Sites de confiance
  • Ajouter le site que vous téléchargez à la liste des sites de confiance

** Vous devrez télécharger de nouveau les fichiers Excel une fois que cette modification aura été apportée.Les fichiers précédemment téléchargés lorsque untrusted peut encore ouvrir ** blanc

Option 2

  • Allez dans les propriétés du fichier que vous avez enregistré sur votre ordinateur (clic droit, puis cliquez sur Propriétés gauche)
  • Cliquez sur Débloquer
  • Cliquez sur Appliquer
  • Ouvrez le fichier

Option 3

  • Ouvrez Excel Aller au fichier Options
  • Cliquez sur Centre Trust -> Paramètres du Centre
  • Aller à la vue protégée. il y a 3 options qui montrent que tous ont été cliqués. Décochez la première option qui lit - "Activer l'affichage Protected pour les fichiers provenant d'Internet"

Option 4

  • Ouvrez Excel Aller au fichier d'options
  • Cliquez sur Centre -> Paramètres du Centre de gestion de la confidentialité
  • Accéder aux paramètres du bloc de fichiers
  • Désélectionner les pages Web et les feuilles de calcul Excel 2003

Option 5

  • Désinstallez la mise à jour a été mentionné précédemment qui s'applique à votre version de bureau
+0

Merci! Je vais essayer lundi au travail! – Theo

+1

Merci beaucoup! Le fichier était en effet bloqué. J'ai essayé l'option 2 et ça a marché pour moi! – Theo