Этот код работает.До сих пор я нашел только одно исключение, которое нарушает его, и это происходит только на живом сервере, на локальном хосте он все еще работает все время.
Итак, в чем проблема.
По сути, я генерирую PDF-файл с TCPDF (обратите внимание, что файл довольно большой, более 700 страниц), используя AJAX, и вызов возвращает ссылку на файл, который я затем добавлю к модальному, чтобы позволить пользователю выбрать, хочет ли ончтобы перейти к файлу или загрузить его.
Это код AJAX.
$('#stampa-file').on('submit', function(event)
{
event.preventDefault();
$.ajax({
url:'stampa_file.php?act=stampa',
method: 'POST',
data: $('#stampa-file').serialize(),
success: function(data)
{
if($.trim(data) == 'query_error')
{
alert('Qualcosa è andato storto. Riprova.');
}
else if($.trim(data) == 'stampa_error')
{
alert('Seleziona almeno una sezione');
}
else
{
$('#stampa-file')[0].reset();
$('#loadingModal').modal('hide');
$('#document-link').empty();
$('#document-link-download').empty();
$('#document-link').append('<a href="files/<?php echo $_COOKIE['NomeDB'];?>/'+ data +'" class="btn btn-sm btn-success" target="_blank" style="width: 120px;"><i class="fas fa-eye"></i> Visualizza PDF</a>');
$('#document-link-download').append('<a href="files/<?php echo $_COOKIE['NomeDB'];?>/'+ data +'" class="btn btn-sm btn-success" target="_blank" style="width: 120px;" download><i class="fas fa-download"></i> Scarica PDF</a>');
$('#viewFile').modal('show');
}
}
});
});
Это код TCPDF.
//I generate the PDF above this comment. Below only the link generation, PDF output and save the file into the database.
//Close and output PDF document
$replace = array(" ", "'");
$replacer = array("");
$nome = strtolower($query_ente['nome']);
$now = date("Y_m_d_H_i_s", time());
$link = trim(str_replace($replace, $replacer, 'RDAT_'.$nome.'_'.$now.'.pdf'));
ob_clean();
$pdf -> Output($path_stampa_file.$link,'F');
$output = '';
$timestamp = time();
$result_inserimento = mysqli_query($mysqli, "INSERT INTO files (link, nome, timestamp, categoria) VALUES ('$link', '$link', '$timestamp', 'stampa_rdt')");
if($result_inserimento)
{
/*Registro Attività*/
include 'connessione_multi.php';
session_start();
$user_check = $_SESSION['login_user'];
$result_user_info = mysqli_query($conn, "SELECT * FROM sessioni_login WHERE session_id='$user_check'");
$query_user_info = mysqli_fetch_assoc($result_user_info);
$session_user_id = $query_user_info['id_utente'];
$id_utente = $session_user_id;
$descrizione = 'ha eseguito la stampa del file: '.$link.'';
$timestamp = time();
$indirizzo_ip = $_SERVER['REMOTE_ADDR'];
$result_attivita = mysqli_query($mysqli, "INSERT INTO attivita (id_utente, descrizione, timestamp, indirizzo_ip) VALUES ('$id_utente', '$descrizione', '$timestamp', '$indirizzo_ip')");
$output = $link;
}
else
{
$output = 'query_error';
}
echo $output;
Как я уже сказал, яу меня все работает нормально, но я не могу понять, почему в одном случае, для одного клиента и только на работающем сервере, а не на локальном, это дает сбой.В основном, когда это терпит неудачу, то, что я получаю в результате вызова AJAX, является пустым значением, и ссылка в модале выглядит следующим образом
www.mysite.com/files/customer_name/
вместо
www.mysite.com/files/customer_name/RDAT_customername_timestamp.pdf
Я пробовал кое-что, но я все еще не могу найти решение.
Вещи, которые я пробовал:
получитьссылку из базы данных, вызвав другой запрос AJAX внутри успешного первого вызова AJAX, напечатав ссылку в скрытом DIV внутри страницы и получив ссылку с помощью jQuery .text (), а затем добавьте ее в модальное состояние;
добавить ссылку в событие «complete» вызова AJAX вместо «success»;
получить ссылку из базы данных сразу после ее сохраненияв файле генерации TCPDF вместо использования одной и той же переменной $ link в том же файле;
удаляет каждое действие в событии успеха вызова AJAX и оставляет только события добавления;
Все эти тесты работают нормально все время, кромеЭто произойдет, если произойдет сбой на живом сервере.
У меня действительно нет другого выбора на данный момент.