PHP curl на Linux: в чем разница с curl на windows? - PullRequest
0 голосов
/ 22 марта 2012

Я пытаюсь запустить приложение php с сервера Ubuntu 11.10.Это приложение прекрасно работает под Apache + PHP в Windows.У меня есть другие приложения, которые я могу просто скопировать и вставить между двумя ОС, и они работают на обеих.

Однако это приложение использует тонику библиотеки php (веб-сервисы RESTful) и делает нас модулем php cURL.Проблема в том, что я не получаю сообщение об ошибке, из-за которого невозможно найти проблему.

Я (должен) использовать проверку подлинности NTLM, и это делается с помощью модуля Aphen AuthenNTLM:

Order allow,deny
Allow from all

PerlAuthenHandler Apache2::AuthenNTLM

AuthType ntlm

AuthName "Protected Access"

require valid-user

PerlAddVar ntdomain "domainName server"

PerlSetVar defaultdomain domainName

PerlSetVar ntlmsemtimeout 2

PerlSetVar ntlmdebug 1

PerlSetVar splitdomainprefix 0

Все файлы, которые cURL должен извлечь, переопределяют аутентификацию AuthenNTLM:

order deny,allow
deny from all
allow from 127.0.0.1
Satisfy any

Поскольку эти файлы только cURL передаются с одного сервера, доступ может быть ограничен localhost.

Возможные проблемы:

  • NTLM-аутентификация не переопределяется для файлов, запрашиваемых через cURL (даже если AllowOverride All установлен)

  • curl работает по-разному в linux

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_COOKIE, $strCookie);
    curl_setopt($ch, CURLOPT_URL, $baseUrl . $queryString);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    
    $html = curl_exec($ch);
    curl_close($ch);
    
  • прочее?

Журнал Apache сообщает:

[ошибка] Плохой / отсутствует NTLM / Базовый заголовок авторизации для /myApp / webservice / local / viewList.php

Но этот каталог должен переопределять проверку подлинности NTLM

EDIT:

с использованием командной строки curl из окон для доступа к тому же ресурсу, который я получаю:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
    <head>
        <title>406 Not Acceptable</title>
    </head>
    <body>
        <h1>Not Acceptable</h1>
        <p>An appropriate representation of the requested resource /myApp/webservice/myResource could not be found on this server.</p>
        Available variants:
        <ul>
        <li><a href="myResource.php">myResource.php</a> , type application/x-httpd-php</li>
        </ul>
        <hr>
        <address>Apache/2.2.20 (Ubuntu) Server at localhost Port 80</address>
    </body>
</html>

1 Ответ

1 голос
/ 23 марта 2012

Проблема в конфигурации Apache по умолчанию в Ubuntu:

Options Indexes FollowSymLinks MultiViews

MultiViews меняет request_uri с myResource на myResource.php.

Решения:

  • отключить MultiViews в .htaccess: Опции -MultiViews
  • удалить MultiViews из конфигурации по умолчанию
  • переименуйте файл в качестве примера в myResourceClass

Я выбрал последний вариант, потому что он должен работать независимо от конфигурации, и у меня есть только 3 таких файла, поэтому изменение заняло около 30 секунд ...

...