Задать вопрос
djtahoma
@djtahoma
PHP Developer

Как настроить PHPStorm 10 + XDebug для кроссдоменных запросов?

Есть 2 проекта в PHPStorm: Site и Backend. Соответсвенно есть 2 локальных хоста для них: site.local и backend.local
В PHP происходит обращение от site.local к backend.local. При открытии backend.local напрямую брекпойнт отлавливается. Использую расширение для Chrome - XDebug Helper

Вопрос, Что и как нужно настроить, чтобы при открытии в браузере адреса site.local в коде котого есть запрос к backend.local, отлавливался брейкпойнт установленный в backend.local?

В php.ini пробовал разные рекомендованные настройки, прочел несколько статей. Пока ничего не вышло.
Есть ощущение, что нужно настраивать Deployment. Так ли это?

3ebbb047523542d18a1686bb84a26257.pngd1a7cddb94f8422f8d8bf572f2a7ae7f.pngphp.ini
xdebug.remote_enable=1
xdebug.profiler_enable=1


httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/Library/WebServer/Documents/backend/web/"
    ServerName backend.local
        <Directory "/Library/WebServer/Documents/backend/web">
            Options Indexes FollowSymLinks
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Library/WebServer/Documents/site/www/"
    ServerName site.local
        <Directory "/Library/WebServer/Documents/site/www">
            Options Indexes FollowSymLinks
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>
</VirtualHost>
  • Вопрос задан
  • 672 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@dimafanasev
Здесь ответ. Почему xDebug не отрабатывает на кросс доменном ajax запросе? Внутри есть ссылка на stackoverflow. Оказывается кроссдоменный запрос по-умолчанию не шлёт куки в т.ч. XDEBUG_SESSION, соответсвенно на целевой домен не приходит эта кука и xdebag не в курсе что надо заняться отладкой. А в PHPStorm надо настраивать конфигурацию PHP Remote debug.

... на следующий день...
Мне удалось добится дебага только для кроссдоменных запросов GET и POST.
В Angular это настраивается так:
app.config(function ($routeProvider, $httpProvider) {
        $httpProvider.defaults.withCredentials = true;
        //Reset headers to avoid OPTIONS request (aka preflight)
        $httpProvider.defaults.headers.post = {};
}

К сожалению, кроссдоменные запросы PUT и DELETE браузеры не пускают к северу вообще ни при каких условиях из-за withCredentials = true.
Да и фиг с ними. Переопределил их вот так:
var itemsResource = $resource(baseUrl + '/:id' + '/:action', {id: '@id'}, {
            query: {isArray: false},
            put: {
                method: 'POST'
            },
            delete: {
                method: 'POST'
            }
        });
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы