2015-08-16 36 views
1

我想執行一個PHP腳本並創建一個XML文件。 PHP腳本包含一組'echo'命令。如何從PHP回顯內容創建文件?

$name = strftime('xml_%m_%d_%Y.xml'); 
header('Content-Disposition: attachment;filename=' . $name); 
header('Content-Type: text/xml'); 

echo '<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL; 
echo '<lager>'.PHP_EOL; 
foreach ($product_array as $product) { 
    echo "<product>".PHP_EOL; 
    echo "<code>", $product->var_code, "</code>".PHP_EOL; 
    echo "<group>", $product->var_group, "</group>".PHP_EOL; 
    echo "<manu>", $product->var_manufacturer, "</manu>".PHP_EOL; 
    echo "<product>".PHP_EOL; 
} 
echo '</lager>'.PHP_EOL; 

我已經做了,但是通過這個腳本,瀏覽器開始下載文件。 取而代之的是,我希望腳本創建文件並保留在服務器上。

+2

確實是一個重複。使用輸出緩衝[http://stackoverflow.com/a/5870612/2286722](這個答案)。 –

+0

@MartenKoetsier我的輸出大約是8-9MB,我試過這個,但是在5-6分鐘後我得到** Internal Server Error **消息。是增加max_execuction_time的解決方案嗎? – SlavisaPetkovic

+0

@Caci:假設這運行一些服務器,你能檢查服務器的錯誤日誌嗎?如果這給出了最大執行時間的錯誤,它也會記錄最大值是多少。通常這是30秒(apache默認)。在這種情況下,這可能會解決您的問題。 –

回答

2
  1. 如果您不需要將文件發送給用戶(/瀏覽器),則不需要標題功能。這些標題僅用於告訴瀏覽器服務器提供的內容的類型。
  2. 如果要將文件保存在服務器中 - 您可以使用file_put_contentsfopen + fwrite函數中的任何一個來執行此操作。

這是您正在查找的代碼。我也固定</product>

$name = strftime('xml_%m_%d_%Y.xml'); 
// Open the file for writing 
$fp = fopen($name, 'w'); 
fwrite($fp, '<?xml version="1.0" encoding="UTF-8"?>'); 
fwrite($fp, '<lager>'); 
foreach ($product_array as $product) { 
    fwrite($fp, "<product>"); 
    fwrite($fp, "<code>{$product->var_code}</code>"); 
    fwrite($fp, "<group>{$product->var_group}</group>"); 
    fwrite($fp, "<manu>{$product->var_manufacturer}</manu>"); 
    fwrite($fp, "</product>"); 
} 
fwrite($fp, '</lager>'); 
fclose($fp); 

(加入你錯過了有斜線,感謝@Marten Koetsier)既然你將它保存爲XML,你並不真的需要PHP_EOL。如果你真的想要,我可以把你放回去......