PHP - 如何读取私有XML文件?

时间:2012-04-06 18:13:35

标签: php xml permissions simplexml

我在“域1”上有一个脚本,它在“域2”上的XML文件上执行simplexml_load_file,如下所示:

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

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

但是,此XML文件包含有关用户的私人信息。我不希望它可以直接访问。根据用户的不同,域2也会有所不同,所以我不能按实际域或IP来过滤。

是否可以设置权限以使公众无法访问它,但仍然可以通过simplexml调用读取?可能还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

将以下内容添加到.htaccess文件中,该文件与file.xml位于同一文件夹中:

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

这将告诉您的网络服务器禁止访问此文件,除非请求来自domain2.com

更新:

根据所有者告诉的问题,将从不同的域访问此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

答案 1 :(得分:1)

在“域2”上为您的Web服务器设置HTTP基本身份验证。像这样更改XML文件的URL:

$url = 'http://my_username:my_password@domain2.com/file.xml';
$xml  = simplexml_load_file($url);

mod_auth_basic for Apache