Для корректной работы pjax необходимо иметь в заголовках X-Pjax и X-Pjax-Container.
В \yii\widgets\Pjax заголовки получаются следующим образом:
$headers = Yii::$app->getRequest()->getHeaders()
Если подробнее посмотреть в \yii\web\Request метод getHeaders, то заголовки получаются с помощью php функции getallheaders().
Так вот, проблема возникла в этом месте. На локальном веб-сервере, при разработке на PHP 7.0.13, функция возвращает верные заголовки и соответственно pjax отрабатывает верно. Но при переносе проекта на хостинг pjax перестал отрабатывать: в ответ приходило 200, но ответ был пустой - и поэтому страница перезагружалась.
Когда начала разбираться и дошла до функции getallheaders(), выяснилось, что на сервере эта функция возвращала массив, в котором в названии параметра добавлялся символ '\0'.
То есть, что должно приходить:
'Accept' => 'text/html, */*; q=0.01'
'X-Requested-With' => 'XMLHttpRequest'
'X-PJAX' => 'true'
'X-PJAX-Container' => '#pjax'
А приходит:
'Accept\0' => 'text/html, */*; q=0.01'
'X-Requested-With\0' => 'XMLHttpRequest'
'X-PJAX\0' => 'true'
'X-PJAX-Container\0' => '#pjax'
На хостинге тоже версия PHP 7.0.13. К тому же, были протестированы на том же хостинге и на разных заказах более поздние версии php (5.4, 5.6) - pjax работает и заголовки приходят нормальные, т.е. не работает именно при php 7.0.13 (смотрела на разных заказах). Так же yii2 и pjax протестировала на совершенно другом хостинге с той же версией php и там все работает.
То есть получается проблема в самом php на этом хостинге?
Списывалась с тех.поддержкой. Те разводят руками, и говорят, что мало информации и необходимо предоставить требования к спецификации php.
Посоветуйте куда смотреть? Какие именно требования должны быть, ведь, как я понимаю, это касается каких-то глобальных настроек php? В принципе, проблема решается простым str_replace, но это изменение в основных файлах самого фреймворка, и это нехорошо в целом, да и в частности хотелось бы иметь возможность yii обновлять.