2012-04-06 6 views
2

У меня есть сценарий на «1 домен», который выполняет simplexml_load_file на файл XML на «домен 2», как так: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 путем ограничения доступа к некоторым изобрам вашего выбора (в данном случае IP в domain1 для примера) –

ответ

1

Добавить следующие строки в ваш файл .htaccess, который находится в той же папке, file.xml:

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

Это покажет ваш веб-сервер, чтобы запретить доступ к этому файлу, за исключением того, если запрос приходит от 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> 

Пожалуйста, обратите внимание, что это не требуется, чтобы иметь доступ к оболочке сервера. вы можете загрузить файл .htpasswd через ftp и изменить его разрешения, чтобы он не читался и не записывался группой веб-серверов.

Подробнее о защите паролем и некоторых примерах можно найти here.

+0

domain2.com будет отличаться в зависимости от пользователя, поэтому не уверен, что это сработает. Нет ли способа блокировать прямой доступ? но разрешить доступ через внешний скрипт? – tctc91

+0

Короткий ответ: Нет. Длинный ответ: вы можете попытаться достичь этого, используя '.htaccess', но вы сможете скачать файл, используя внешний скрипт сторонней стороны. –

+0

Личная информация - это только адреса электронной почты и URL-адреса сайтов для клиентов, поэтому я бы предпочел не иметь ее свободно доступной, но в то же время она никому не нужна, поэтому, если использовать сторонний внешний скрипт, это это может быть только ответ. Жесткий, чтобы принять решение ... – tctc91

1

Установите базовую аутентификацию HTTP для своего веб-сервера на «домен 2». Изменение URL для файла XML, как это:

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

mod_auth_basic for Apache

+0

«domain1» окажется вне моего контроля, поэтому в вызове simplexml будет точка с именем пользователя и паролем, так как пользователь может просто прочитать обычный текст user/pw – tctc91

Смежные вопросы