2016-07-21 23 views
1

我有一個關於非常奇怪的問題...爲什麼xls文件,我用php創建,不一樣,當我從linux服務器下載它時當我從Windows服務器下載它?xls從linux下載不一樣從windows下載

使用js解析一個html表格,過濾一些列並將表格推送到一個表格並提交給php腳本。在腳本中,我使用特定的頭文件回顯一個xml文件。當我使用xampp在windows上執行此操作並下載並打開文件時,我收到了來自excel的內容和文件類型不匹配的消息,但是我可以打開它。當我從linux服務器下載相同的文件(具有相同內容的新生成的文件)時,我無法打開該文件 - 甚至沒有消息出現。

文件大小,內容,編碼 - 全部相同...

爲什麼會發生這種情況?

EDIT: 當我打開該文件(我從Linux下載)與記事本++,改變一個線,撤消並保存此,Excel可以打開該文件(與該消息的內容和文件類型不匹配) 。

下面是一些代碼的理解:

JS-部分:

// 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-部分:

<?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>"; 
?> 

感謝您的幫助!

+0

你不寫與代碼 –

+0

@Dagon XLS文件前面提到的更新:也許不是「真正的「xls文件,但一種類型的excel可以打開並解釋它(從Windows Server/xampp下載時)。 – Theo

回答

0

它可能是來自Linux的文件被「阻止」,因爲該文件來自未知的計算機。如果您在Windows中查看該文件的屬性,則可能會有一條關於安全性和「解除阻止」能力的消息。由於您編輯並保存了Linux文件,因此Excel現在認爲它是Windows計算機上的安全文件,因此不會被阻止。

文章https://superuser.com/questions/1103241/excel-no-longer-receive-the-option-to-open-files-in-a-different-format解釋說,最近的「補丁」,微軟已經推出了這個限制(Windows更新KB3115130的Excel 2010和Windows更新KB3115262爲Excel 2013),以及下列選項的幫助:

選項1

  • 控制面板> Internet選項
  • 安全選項卡>可信站點
  • 添加你所下載的網站從到受信任站點列表

**您需要重新下載Excel文件,一旦此更改。文件以前下載的不信任時,仍可能會打開空白**

選項2

  • 走進您保存到計算機中的文件的屬性(右鍵單擊它,然後左鍵單擊屬性)
  • 點擊阻止
  • 單擊應用
  • 打開文件

選項3

  • 打開Excel轉到文件選項
  • 單擊信任中心 - >信任中心設置
  • 轉到受保護的視圖。有3個選項顯示所有點擊。取消選中讀取第一個選項 - 「啓用受保護的視圖 從互聯網上發起文件」

選項4

  • 打開Excel轉到文件選項
  • 單擊信任中心 - >信任中心設置
  • 轉到文件阻止設置
  • 取消選中網頁和Excel 2003 XML電子表格

選項5

  • 卸載適用於您的Office版本
+0

謝謝!我會在工作中嘗試一下! – Theo

+1

非常感謝!該文件確實被阻止。我嘗試了選項2,它爲我工作! – Theo