XML не создан на реальном сервере - PullRequest
0 голосов
/ 24 мая 2018

У меня есть следующий код, который создает файл CSV для пользователя, он отлично работает на моем локальном хосте для всех браузеров, когда я нажимаю кнопку, файл XML немедленно отправляется в браузер.Затем я попытался разместить этот код на своем живом веб-сервере Azure, но получаю следующую ошибку:

Сайт недоступен

Страница на https://www.xxx.be/export/export/exportUser/178, возможно, временнаяотключен или навсегда заменен на новый веб-адрес.

ERR_INVALID_RESPONSE

Вот мой код: Кнопка выглядит следующим образом:

<fieldset>
                    <legend>Your data</legend>
                    <?php
                    $downloadurl = base_url() . 'export/export/exportUser/' . $this->auth_user_id;
                    ?>
                    Download all data.
                    <a id="downloaaad_btn" class="btn btn-secondary f-right" href='<?=$downloadurl?>'>Download</a>
                </fieldset>

Это контроллер, который называется:

<?php
defined('BASEPATH') or exit('No direct script access allowed');

/**
 * Export controller
 *
 *  Controller which handles all the actions involving export of information for GDPR
 */

class Export extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();

        // Force SSL
        $this->force_ssl();

        $this->load->helper('export');
    }

    public function exportUser($userid)
    {
        $this->is_logged_in();

        //Check if user has correct permission to access this page
        $aclConfig = array('userID' => $this->auth_user_id);
        $this->load->library('acl', $aclConfig);
        $redirect_protocol = USE_SSL ? 'https' : NULL;

        if (!empty($this->auth_user_id) && ($this->auth_user_id == $userid)) {
            if ( $this->acl->hasPermission("export_user") ) {
                header('Content-type: text/xml');
                header('Content-Disposition: attachment; filename=userdata.xml');
                exportUser($userid);
            } else {
                //User does not have correct permission --> Go to 404
                redirect(site_url( 'error/my404', $redirect_protocol));
            }
        } else {
            //User is anonymous -> go to login page (and remember the current URL for redirecting again after log in)
            $this->session->set_flashdata('referred_from', uri_string());
            redirect(site_url( 'login?redirect=user', $redirect_protocol));
        }
    }
}

Тогда в моем классе помощников у меня есть следующий код:

<?php  
defined('BASEPATH') or exit('No direct script access allowed');

/**
 * Export Helper
 *
 *
 * @package     x
 * @author      x
 *
 */

// ------------------------------------------------------------------------


/**
 * Exports a user in XML format
 *
 * @param int userid        the user id of the user
 * @return XML file
 */
if( ! function_exists('exportUser') )
{
    function exportUser($userid) {
        // Load Models
        $CI = get_instance();
        $CI->load->model('perk/interests_model');
        $CI->load->model('perk/skills_model');
        $CI->load->model('perk/professions_model');
        $CI->load->model('perk/educations_model');
        $CI->load->model('perk/engagement_model');
        $CI->load->model('user/users_model');
        $CI->load->model('user/userInterests_model');
        $CI->load->model('user/userSavedVacancies_model');
        $CI->load->model('vacancy/vacancySubscriptions_model');
        $CI->load->model('user/userContacts_model');
        $CI->load->model('user/userOrgContacts_model');

        $user = $CI->users_model->get($userid);
        $allEngagements = $CI->engagement_model->getAll();
        foreach ($allEngagements as $engagement) {
            if ($engagement->engagement_id == $user->engagement) {
                $engagementFull = $engagement->description;
            }
        }

        $writer = new XMLWriter();
        $writer->openUri('php://output');
        $writer->startDocument('1.0','UTF-8');
        $writer->setIndent(true);
        $writer->startElement('user');
        $writer->startElement("userinfo");
        $writer->writeElement('id', $user->user_id);
        $writer->writeElement('firstname', $user->first_name);
        $writer->writeElement('lastname', $user->family_name);
        $writer->writeElement('username', $user->username);
        $writer->writeElement('email', $user->email);
        $writer->writeElement('birthdate', $user->birthdate);
        $writer->writeElement('gender', $user->gender);
        $writer->writeElement('nationality', $user->nationality);
        $writer->writeElement('language', $user->language);
        $writer->writeElement('location', $user->volunteer_location);
        $writer->writeElement('locationdistance', $user->volunteer_location_max_distance);
        $writer->writeElement('nationalnumber', $user->national_number);
        $writer->writeElement('phone', $user->phone);
        $writer->writeElement('bankaccount', $user->bank_account);
        $writer->writeElement('biccode', $user->bic_code);
        $writer->writeElement('engagement', $engagementFull);
        $writer->writeElement('profilepicture', $user->profile_picture);
        $writer->writeElement('introduction', $user->short_introduction);
        $writer->writeElement('description', $user->job_search_description);
        $writer->writeElement('created', $user->created_at);
        $writer->writeElement('lastlogin', $user->last_login);
        $writer->writeElement('lastmodified', $user->modified_at);
        $writer->writeElement('termsaccepted', $user->termsaccepted);
        $writer->endElement();
        $writer->endElement();
        $writer->endDocument();
        $writer->flush();
    }
}


// ------------------------------------------------------------------------

/* End of file export_helper.php */
/* Location: /application/helpers/export_helper.php */

Как я уже сказал, этот код отлично работает на моем локальном хосте.После некоторой отладки я выяснил, что ошибка вызвана (вероятно) моим живым сервером, который не распознает new XMLWriter(); Если я раскомментирую все до этой строки, он покажет мне переменную var_dump, которую я положил туда.Если я раскомментирую строку $writer = new XMLWriter();, я получу код ошибки ERR_INVALID_RESPONSE.

Мой сервер работает под управлением PHP 5.6.31

РЕДАКТИРОВАТЬ: LibXML включен в соответствии с phpinfo ():

libxml

поддержка libXML активна

Скомпилированная версия libXML 2.9.1

Загруженная версия libXML 20901

Включены потоки libXML

...