$_SERVER['PHP_AUTH_USER'] пусто

РЕДАКТИРОВАТЬ: проблема не в PHP, я неправильно использовал cURL. Обновлен вопрос, чтобы показать проблему, с которой я столкнулся с XHR.

Резюме: не удается получить имя пользователя для PHP с помощью XHR:

var xhr = Ti.Network.createHTTPClient();
xhr.timeout = 1000000;
xhr.open("GET","http://myapi.com/test", false, 'user', 'pass');
xhr.send();

И в моем PHP-скрипте я пытаюсь получить доступ к имени пользователя следующим образом:

<?php print $_SERVER['PHP_AUTH_USER']; ?>

Что бы я ни пробовал, всегда пусто.

Есть ли какие-то настройки PHP, которые мне нужно настроить?

Дополнительная информация: версия PHP 5.2.13, Apache, MAMP.


person Ian McIntyre Silber    schedule 18.02.2011    source источник
comment
Вы пытались отправить заголовок WWW-Authenticate? См. пример на http://php.net/manual/en/features.http-auth.php   -  person Mark Eirich    schedule 18.02.2011
comment
Вы проверили, устанавливается ли $_SERVER['HTTP_AUTHORIZATION']?   -  person Mark Eirich    schedule 18.02.2011
comment
Вы также пробовали обычный запрос, чтобы убедиться, что ваш XHR вообще работает, верно? Я не вижу, чтобы вы вызывали xhr.send()   -  person Mark Eirich    schedule 18.02.2011
comment
Закрытие этого вопроса для лучшей версии здесь: stackoverflow.com/questions/5037405/   -  person Ian McIntyre Silber    schedule 18.02.2011


Ответы (1)


<script src="http://www.webtoolkit.info/djs/webtoolkit.base64.js"></script>
<script>
var xhr = Ti.Network.createHTTPClient();
xhr.timeout = 1000000;
xhr.onreadystatechange = function() {
    if (xhr.readyState != 4) return;
    alert('Server said: '+xhr.responseText);
};
xhr.open('GET', 'http://myapi.com/test', false);
xhr.setRequestHeader('Authorization', 'Basic ' + Base64.encode('user:pass') );
xhr.send('');
</script>

(Из соображений вежливости вам следует загрузить webtoolkit.base64.js и обслуживать его со своего собственного сервера.)

Имейте в виду, что вы не можете выполнять междоменные запросы с помощью XHR; ваш JavaScript и PHP должны обслуживаться из одного и того же домена.

person Mark Eirich    schedule 18.02.2011
comment
$_SERVER['PHP_AUTH_USER'] может быть пустым, если вы используете php как CGI. См. http://www.besthostratings.com/articles/http-auth-php-cgi.html - person shasi kanth; 18.02.2011
comment
@dskanth: Да, я также видел это в комментариях в документации по PHP. Но, видимо, в данном случае проблема была не в этом. Лично я считаю, что использование Basic Auth обычно является плохой стратегией — это угроза безопасности и, как правило, время от времени вызывает дополнительные головные боли. - person Mark Eirich; 18.02.2011