Я очень опаздываю на вечеринку, но я расскажу об этом здесь, если кто-нибудь еще захочет узнать мое решение:
У меня была настоящая борьба с этой точной проблемой, но я нашел жизнеспособную
У меня была html-страница, которая запустила отдельный php-скрипт, который сгенерировал файл, а затем загрузил его. На html-странице я использовал следующий jquery в заголовке html (вам также нужно включить библиотеку jquery):
<script>
$(function(){
var iframe = $("<iframe>", {name: 'iframe', id: 'iframe',}).appendTo("body").hide();
$('#click').on('click', function(){
$('#iframe').attr('src', 'your_download_script.php');
});
$('iframe').load(function(){
$('#iframe').attr('src', 'your_download_script.php?download=yes'); <!--on first iframe load, run script again but download file instead-->
$('#iframe').unbind(); <!--unbinds the iframe. Helps prevent against infinite recursion if the script returns valid html (such as echoing out exceptions) -->
});
});
</script>
На вашем_download_script.php есть следующее:
function downloadFile($file_path) {
if (file_exists($file_path)) {
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename=' . basename($file_path));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file_path));
ob_clean();
flush();
readfile($file_path);
exit();
}
}
$_SESSION['your_file'] = path_to_file; //this is just how I chose to store the filepath
if (isset($_REQUEST['download']) && $_REQUEST['download'] == 'yes') {
downloadFile($_SESSION['your_file']);
} else {
*execute logic to create the file*
}
Чтобы прервать это, jquery сначала запускает ваш php-скрипт в iframe. Iframe загружается после создания файла. Затем jquery снова запускает скрипт с переменной запроса, сообщающей скрипту для загрузки файла.
Причина, по которой вы не можете выполнить загрузку и создание файлов за один раз, связана с заголовком php () функция. Если вы используете header (), вы меняете скрипт на что-то другое, кроме веб-страницы, и jquery никогда не распознает сценарий загрузки как «загруженный». Я знаю, что это может не обязательно обнаруживать, когда браузер получает файл, но ваша проблема была похожа на мою.
Файлы являются частью механизма привязки Visual SourceSafe. Файлы, которые можно безопасно удалить:
В дополнение к удалению вышеуказанных файлов я бы удалил информацию о привязке для всех файлов проекта (*. vbproj, * .csproj и т. д.), удалив следующие теги XML.
И, наконец, в файле решения (* .sln) удалите следующий раздел.
GlobalSection(SourceCodeControl) = preSolution
SccNumberOfProjects = 1
SccLocalPath0 = .
SccProjectUniqueName1 = ...
SccProjectName1 = ...
SccLocalPath1 = ...
EndGlobalSection
Это файлы, используемые MS Visual SourceSafe (VSS).
Возможно, не стоит просто удалять эти файлы, потому что файлы проекта вашего решения/кода могут все еще иметь некоторые привязки к этим файлам.
Я предлагаю вам просто сделать резервную копию файлов vssver.scc и удалить их. Если что-то сломается, вы сможете просто восстановить эти файлы.