Добрый день. есть код на С#/С++. Код (Text): string inData = textBox7. long outDateTime; Hybrid.GetTimeFromStart(inData, 0, 0, out outDateTime); Нужно на PHP тоже самое сделать, т.е. с помощь этой функции из COM-библиотеки. Пробую вот так: Код (Text): $inData = $textBOX2; $datetime = 0; $PHP_LIB->GetTimeFromStart($inData, 0, 0, &$datetime); В PHP не принимает последний параметр outDateTime. Пишет следующее: Код (Text): <!--error--><br /> <b>Fatal error</b>: Uncaught exception 'com_exception' with message 'Parameter 0: Несовпадение типов. ' in Z:\home\test\www\... Stack trace: #0 Z:\home\test\www\2.09\book\GetTimeFromStart.php(3): com->TSAGetTimeFromStart('-----BEGIN -...', 0, 0, 0) #1 Z:\home\test\www\2.09\2.php(79): include('Z:\home\test\ww...') #2 {main} thrown in <b>Z:\home\test\www\2.09\book\GetTimeFromStart.php</b> on line <b>3</b><br /> Функция в COM-библиотеке: Код (Text): STDMETHODIMP HybridCOM::GetTimeFromStart(BSTR inData, INT flags, INT sigId, DATE* outDateTime) { ... } Подскажите, что можно сделать?
https://php.ru/manual/function.date.html https://php.ru/manual/class.datetime.html посмотри мануал, примеры!
Пытался так... Загонял как Код (Text): $datetime = new DateTime(); Функция не принимает объект и Код (Text): $datetime = date(); Здесь надо аргументы внутри date()т указать, а какие именно я так и не понял В итоге не получилось
я же проси я же просил, посмотреть примеры в мануале: PHP: <?php $today = date("H:i:s"); // 17:16:18 $today = date("Y-m-d H:i:s"); // 2001-03-10 17:16:18 (формат MySQL DATETIME) и вот такие примеры в низу статьи мануала.
у тебя что в секундах приходит число? значит воспользуйся функцией time(): https://php.ru/manual/function.time.html
К сожалению не все так просто))) Я бы с радостью так сделал, да только мне нужно именно знать, когда началась заданная $inData. В зависимости от $inData будет выдаваться разные значения секундах.
Вводятся данные в <input type = "text" id = "inData">. Отправляются на сервер. Затем запрашиваем время отправки на сервер этих данных. В $PHP_LIB->GetTimeFromStart($inData, 0, 0, &$datetime); нужно указать точное $inData.... (если поменять хоть один символ, то уже должен выдавать ошибку)
так же работать не должно) Вопрос: какие данные попадают в это поле цифры буквы число значения дата и т.д? покажи пример что ты в это поле вводишь! примерно должно быть так: PHP: <input type = "text" id = "inData" name="сюда передается переменная">
покажи на примере, я допустим не понял... в одно поле и сертификат и дата. может нужно 2 поля ввода создать? или же просто сертификат попал в поле, а дату ты сегодняшнюю записуешь в переменную и передаешь. PHP: $today = date("Y-m-d H:i:s"); # можно со временем $today = date("Y-m-d"); # можно без времени
У меня 3 поля. В одно поле вводятся данные(например "Privet"). Во втором поле эти данные подписываются сертификатом. (Там куча закодированных символов) А вот третье окно как раз отвечает за вывод информации (Вывод ошибок, вывод времени и еще разные... В зависимости, какая кнопка нажата ) --- Добавлено --- В самой программе 21 функция. 19 из них работают, все выводится) А вот с двумя у меня проблема...
что означает вывод ошибок, ты ошибки выводишь в поле? вывод времени тоже в это поле пихаешь и еще разные что это))) показывай пример, не тяни кота за яйки. покажи форму полностью и кусок серверной части касающийся этой формы.
так вас не спрашивают какой результат, вопрос - в каком формате должен параметр передаваться? вот какой там формат должен быть?
пока тяжело добиться какой либо инфы, нам твоя программа не нужна поверь, вот я например не знаю что храниться в outDateTime C# си шарп какие данные в секундах или реальное время.
Вот файл HTML. Код (Text): <form name="form1" id="form1" action="2.php" method="post"> <input type="button" id="signData" name="signData" value="Подписать данные" style="width: 280px" ><br> <input type="button" id="verifyData" name="verifyData" value="Проверить данные" style="width: 280px" ><br> <input type="button" id="getTimeSig" name="getTimeSig" value="Получить время подписи" style="width: 280px"><br><br> <!--__________________________________________3 выходных окна____________________________________--> <tr><td colspan="3" style="width: 730px; height: 220px"><textarea name="textBOX1" class="result maxWidth" style="width: 730px; height: 220px"></textarea></td></tr> <tr><td colspan="3" style="width: 730px; height: 220px"><textarea name="textBOX2" class="maxWidth" style="width: 730px; height: 220px"></textarea></td></tr> <tr><td colspan="3" style="width: 730px; height: 120px"><textarea name="textBOX3" class="maxWidth" style="width: 730px; height: 120px"></textarea></td></ <input name="infoIden" id="infoIden" type="hidden" value=""> </form> Вот PHP: Код (Text): <? header('Content-Type:text/html; charset=utf-8'); $PHP_LIB = new COM('HybridLib.Hybrid') ; $textBOX1 = $_POST['textBOX1']; $textBOX2 = $_POST['textBOX2']; $infoIden = $_POST['infoIden']; if($infoIden == "Подписать данные") { $outSign = ""; $PHP_LIB-> SignData("256", 0, $textBOX1, &$outSign); echo $outSign; } elseif($infoIden == "Получить время подписи") { <?php $inData = $textBOX2; $datetime = 0; $PHP_LIB->TSAGetTimeFromSig($inData, 0, 0, &$datetime); echo $datetime; } ?> Вот JavaScript: Код (Text): $(document).ready(function(){ $('body').on('click', '#signData', function(){ var form = $(this).parents('form#form1'); window.document.form1.infoIden.value = "Подписать данные" ; $('textarea[name=textBOX2]').val(''); form.ajaxSubmit({ beforeSubmit: function(){ var ar_Field = form.find('input').fieldSerialize().split('&'); for (var i = 0; i < ar_Field.length; i++) { var val = ar_Field[i].split('='); } }, complete: function(xhr) { console.log(xhr); $('textarea[name=textBOX2]').val(xhr.responseText); } }); }); }); $(document).ready(function(){ $('body').on('click', '#getTimeSig', function(){ var form = $(this).parents('form#form1'); window.document.form1.infoIden.value = "Получить время подписи" ; $('textarea[name=textBOX3]').val(''); form.ajaxSubmit({ beforeSubmit: function(){ var ar_Field = form.find('input').fieldSerialize().split('&'); for (var i = 0; i < ar_Field.length; i++) { var val = ar_Field[i].split('='); } }, complete: function(xhr) { console.log(xhr); $('textarea[name=textBOX3]').val(xhr.responseText); } }); }); }); --- Добавлено --- А вот с#: Код (Text): private void btn_GetTimeFromSig_Click(object sender, EventArgs e) { string inData = textBox2.Text; long outDateTime = 0; KalkanCOMTest.TSAGetTimeFromSig(inData, 0, 0, out outDateTime); DateTime date = new DateTime(1970, 1, 1).AddSeconds(outDateTime).AddHours(6); //Добавим 6 часов - часовой пояс Алматы textBox8.Text += "Время подписи: " + date.ToString("dd.MM.yyyy HH-mm-ss") + " ALMT"; }
А вот с++ из COM-библиотеки: Код (Text): STDMETHODIMP HybridCOM::TSAGetTimeFromSig(BSTR inData, INT flags, INT sigId, DATE* outDateTime) { time_t tmpOutDateTime = 0; int tmpInDataLength = wcslen(inData) + 1; std::vector<char> tmpInData(tmpInDataLength); WideCharToMultiByte(CP_UTF8, 0, (LPCWCH)inData, tmpInDataLength, (LPSTR)&tmpInData[0], tmpInDataLength, NULL, NULL); kc_funcs->KC_GetTimeFromSig(&tmpInData[0], tmpInDataLength, flags, sigId, &tmpOutDateTime); return S_OK; --- Добавлено --- JS тут вообще не нужен для функции в PHP. Через JS я только передаю данные из формы в PHP --- Добавлено --- Он есть. Почти в самом низу) В форме он имеет тип "hidden"(скрытый). Код (Text): <input name="infoIden" id="infoIden" type="hidden" value="">
Зачем в 16 строке открывается <?php ??? убрать!!! $datetime = 0 переписать на $datetime = date("Y-m-d H:i:s"); в этом куске Код (Text): <? header('Content-Type:text/html; charset=utf-8'); добавить <?php перед header --- Добавлено --- я заметил и удалил сообщение ты успел ответить на него)
$datetime = date("Y-m-d H:i:s"); Так не воходит... Тоже самое, не совпадение типов..... "Зачем в 16 строке открывается <?php ??? убрать!!!"... Это случайно скопировал туда) Нет ее в программе)