2013-09-25 92 views
2

我看到一些相關的問題,但沒有具體到這種情況。PHP - 使用`file_get_contents()`來插入javascript

這個問題是在Magento的背景下提出的,但絕不僅限於此。

我有一個<head>模板,其中包括各種Javascript文件。

有一個腳本,出於一般原因,我寧願包括作者的CDN。不幸的是,作者沒有通過HTTPS提供一個版本,這會導致用戶在加載這個腳本時(並且取決於瀏覽器,無法運行代碼)看到「不安全的內容」。

據我所知,我可以簡單地將該文件保存到我的本地域,它將通過HTTPS提供,但正如我所說的,我更願意從CDN獲取此腳本。

作爲工作的時候,我已經使用(模板):

<script type="text/javascript"> 
    <?php echo file_get_contents('http://path.to/the/file.js' ?> 
</script> 

這使得因爲它包含生活中沒有一個HTTPS版本的文件時,PHP的解析,而不是作爲加載單獨的資源在運行時在瀏覽器中。

假設我在模板中留下了一條評論,說明爲什麼使用這種方法,有沒有可能通過這種方式發現任何重大的反響?

+0

只是確保來源是值得信賴的。 – ihsan

+1

不知道你想要抓取什麼文件,但如果它是這裏列出的許多文件之一https://cdnjs.com/,它們都支持https。 –

+1

我會**很多**更傾向於將文件保存到您的網站並通過HTTPS提供。你的「一般原因」是什麼? –

回答

1

有兩個缺點:這種方法:

  • 用戶無法緩存的Javascript(這導致較慢的加載時間)
  • 您可以使用額外的帶寬和額外的連接下載來自其他來源的內容(再次加載時間較慢)。如果它是一個高流量的網站,它會有很大的性能影響。

假設您想直接從CDN下載的原因是因爲您總是希望更新腳本。您可以先下載腳本的內容並將其放到您的服務器上。有一個cron作業每天一次重新從CDN下載腳本。這將幫助您獲得更新的腳本以及更好的性能。

+0

這似乎是非常有效的,雖然在我的情況下,Magento已經在緩存這個模板,所以它不需要下載每一個命中。 – pspahn

0

我不知道我們在這裏談論什麼樣的JavaScript文件。如果它是受歡迎的,那麼你有可能已經擁有一個CDN。如果這是一個隨機的JavaScript文件,你可以這樣做:

  1. 通過curl抓取javascript文件。
  2. 推送JavaScript文件到您的個人CDN。
  3. 鏈接您的視圖文件,指向託管在CDN上的JavaScript文件。
  4. 設置一個CRON任務來檢查javascript源代碼的更新。如果找到,重複過程1-2-3。

它可能太多了,但它是一個選項。

您使用的缺點之一是流量。您將使用入站和出站流量,因爲您每次都會請求並提供JavaScript。你應該緩存它(這是CDN的原因之一)並從那裏提供服務。