2012-07-24 77 views
1

我已經編寫了一個腳本,通過從源磁盤選擇它並通過按鈕submital上傳它,將數據從xml文件導入到mysql數據庫中。但是如果使用第三方應用程序來自動執行此導入呢?檢查xml路徑的get參數是否存在並獲取它的內容並導入與我以前相同的方式是否合適?還是有更好的方法?什麼是自動化xml導入的正確方法

通過GET參數我的意思是這樣的:

http://domain.com/import.php?path=externaldomain.com/xml/page.xml 
+0

如果您可以獲取JSON格式的數據。相信我會更順暢。想象一下,把JSON對象變成一個帶有PHP的'json_encode($ a,true)'的關聯數組。然後,你所要做的就是使用mysql語句來插入或者爲電子商務網站添加任何 – 2012-07-24 17:28:38

回答

1

這取決於你導入什麼樣的數據。如果你從rss feed導入數據,這個方法沒問題。但是如果你要導入個人數據,這可能不是一個好方法。

如果您正在處理其他人不應該看到的關鍵數據,我會建議一些更安全的方法。您可以開始考慮通過ftp導入xml文件,從服務器保護的文件夾後面下載它們。要求第三方應用程序將xml文件上傳到您選擇的安全位置。任何在某種安全背後發生的事情都比建議的個人數據方法更好。

+0

,並且它與產品庫存信息(如數量)有關。 xml文件有大約35k條數據記錄。如果get方法是實現自動化的正常方式,那麼我就會這樣做。謝謝 – 2012-07-24 18:05:19

0

首先我會建議你使用cURL。無論你的XML有多大,你的內存問題都會減少。

$fp = fopen('/var/www/vhosts/my.com/xml/feed.xml', 'w'); // opening file handler to write feed in 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://domain.com/xml/page.xml'); // setting URL to take XML from 
curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); // If result is gziped 
curl_setopt($ch, CURLOPT_SSLVERSION, 3); // OpenSSL issue 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Wildcard certificate 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); // disabling buffer output, bec. we want to write XML to the file first and don't need it to be returned into variable 
curl_setopt($ch, CURLOPT_FILE, $fp); // here we should transfer opened file handler to the cURL and it should be writable! 
$result = curl_exec($ch); // executing download 
$reponse_code = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); // retrieving HTTP return code for our request. Was it successful or not. 

因此,您可以直接將文件下載/保存到XML Feed,即使它位於SSL和GZIPed後面。

使用curl_getinfo()您可以獲得有關您的請求的各種信息。如果程序應該是自動化的,比如果請求失敗時決定該怎麼做很好。

比,如果文件不是很大(我是說真的大文件200以上 - 300 MB),你可以只使用SimpleXML只因爲PHP5)庫和分析你的數據。如果您處於PHP4(,今天仍有可能)試圖找到libXML,這也是非常有用的。

如果你檢索的文件是相當巨大的:) MySQL數據庫與FILE權限是你的朋友。

相關問題