У меня есть следующий код, который создает файл 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