2012-04-06 81 views
2

我有一個腳本的「域1」中的「域2」像這樣在執行XML文件使用simplexml_load_file:PHP - 如何讀取私人XML文件?

$url = 'domain2.com/file.xml'; 
$xml = simplexml_load_file($url); 

$xmlEmail = $xml->xpath("//users/user/email"); 
$userEmail = implode(", ", (array) $xmlEmail); 

然而,這個XML文件包含有關用戶的私人信息。我不希望它可以直接訪問。根據用戶,域2也會有所不同,所以我不能通過實際的域或IP來過濾恐懼。

是否可以設置權限使其無法訪問公共,但通過simplexml調用還是可讀的?可能有其他方法嗎?

+0

我認爲要做到這一點的唯一方法是使用htaccess的:更改URL的XML文件中像這樣) – 2012-04-06 18:20:37

回答

1

添加下列內容.htaccess文件,駐留在同一文件夾中file.xml

<Files file.xml> 
    Order Deny,Allow 
    Deny from all 
    Allow from domain2.com 
</Files> 

這將告訴您的Web服務器,以禁止訪問該文件,除非請求來自domain2.com

UPDATE:

根據什麼問題老闆告訴,這個XML文件將被來自不同域的訪問。在這種情況下,我可能會想到的唯一合理的選擇是密碼。 galymzhan已經提供了答案,但我會嘗試擴展他的答案並提供一個工作解決方案。

添加下列內容.htaccess文件,駐留在同一文件夾中file.xml

的.htaccess

<Files file.xml> 
    AuthType Basic 
    AuthName "Protected Access" 
    AuthUserFile /full/path/to/.htpasswd 
    Require valid-user 
</Files> 

請注意,它不需要有對服務器的shell訪問。您可以通過ftp上傳.htpasswd文件,並更改它的權限,以便它不會被Web服務器組讀取/寫入。

有關密碼保護的更多信息,以及一些示例,可以找到here

+0

domain2.com將根據用戶不同而不同,因此不確定這是否可行。有沒有阻止直接訪問的方法?但允許通過外部腳本訪問? – tctc91 2012-04-06 18:36:37

+0

簡答題:不會。長答案:您也可以嘗試使用'.htaccess'來實現此目的,但可以使用第三方外部腳本下載您的文件。 – 2012-04-06 18:39:30

+0

私人信息只是電子郵件地址和網站URL的客戶,這就是爲什麼我寧願沒有免費提供,但在同一時間,這對任何人都沒有任何用處,所以如果使用第三方外部腳本是隻有訪問它的方式,這可能是答案。艱難的決定... – tctc91 2012-04-06 18:44:39

1

在「域2」上爲您的Web服務器設置HTTP基本認證。通過限制訪問到您選擇的一些IPS(在這種情況下,DOMAIN1的IP例如

$url = 'http://my_username:[email protected]/file.xml'; 
$xml = simplexml_load_file($url); 

mod_auth_basic for Apache

+0

「domain1」將超出我的控制範圍,所以在simplexml調用中會有點用戶名和密碼,因爲用戶只能閱讀純文本用戶/ pw – tctc91 2012-04-06 18:40:37