2012-04-06 82 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