Автор: Павел Грибов
Простой способ сохранить файл по нажатию кнопки на странице (HTML)
Задача: по нажатию кнопки на странице, чтоб вызывался диалог сохранения файла и собственно сохранялся произвольный файл с сервера.
Решение:
В коде html страницы упоминаем скрытую форму:
1 2 3 |
<form method="post" action="inc/csvExport.php"> <input type="hidden" name="csvBuffer" id="csvBuffer" value="" /> </form> |
Добавляем туда же обработчик нажатия вида:
1 2 3 4 5 6 7 |
$("#viewwork").click(function(){ document.forms[0].method='POST'; document.forms[0].action=save_file.php; document.forms[0].target='_self'; document.forms[0].submit(); return false; }); |
Ну код на сервере для:
save_file.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php // Данный код создан и распространяется по лицензии GPL v3 // Изначальный автор данного кода - Грибов Павел // http://грибовы.рф $ex= "1;2;3;4;5;6;7"; header("Content-type: application/msexcel"); header("Accept-Ranges: bytes"); header("Content-Length: " . strlen($ex)); header("Content-Disposition: attachment; filename=rep_by_addr.csv"); ?> |
csvExport.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php // Данный код создан и распространяется по лицензии GPL v3 // Изначальный автор данного кода - Грибов Павел // http://грибовы.рф header('Content-type: application/vnd.ms-excel'); if (isset($_GET["csv"])==true){ header("Content-Disposition: attachment; filename=file.csv"); } else { header("Content-Disposition: attachment; filename=file.xls"); }; header("Pragma: no-cache"); $buffer = $_POST['csvBuffer']; try{ echo $buffer; }catch(Exception $e){ } ?> |
php: Fatal error: Allowed memory size of 134217728 bytes exhausted
Эта ошибка может возникать при использовании больших массивов или строк большой величины.
Решение: увеличиваем размер памяти под скрипты php в php.ini (по умолчанию 128М), например до:
1 |
memory_limit = 256M |
mysql: delete из select
Казалось бы простая задача, удалить записи по выборке из select. Например:
1 2 |
mysql> delete from config_common where id in (select id from config_common group by nameparam having count(*)>1); ERROR 1093 (HY000): You can't specify target table 'config_common' for update in FROM clause |
Однако такая запись выдает ошибку. Исправляемся «костылем»:
1 |
delete from config_common where id in (select * from (select id from config_common group by nameparam having count(*)>1) as p); |
1C Бухгалтерия: учет комиссии при проведении документа «Поступление на р/с» на другом счете.
Решение не мое, подсмотрено. Но! Расскажу как реализовано, может кому пригодится.
Итак: в 1С Бухгалтерия приходят платежки из банка, с суммой, и выделенной в поле «назначение платежа» комиссией. Например:
1 2 |
Зачисление средств по операциям с МБК (на основании реестров платежей). Мерчант №121512049. Дата реестра 07.01.2018.СУММА 1215,53 В Т.Ч.Комиссия 24.31 Возврат покупки 0.00/0.00. НДС не облагается. |
Нужно чтоб движения документа выглядели так: