За последние 24 часа нас посетили 123082 программиста и 6483 робота. Сейчас ищет 1491 программист ...

Как в PHP указать тип данных LONG

Тема в разделе "PHP для новичков", создана пользователем Danil_III, 5 сен 2018.

Метки:
  1. Danil_III

    Danil_III Новичок

    С нами с:
    13 авг 2018
    Сообщения:
    22
    Симпатии:
    0
    Добрый день.
    есть код на С#/С++.

    Код (Text):
    1. string inData = textBox7.
    2. long outDateTime;
    3. Hybrid.GetTimeFromStart(inData, 0, 0, out outDateTime);
    Нужно на PHP тоже самое сделать, т.е. с помощь этой функции из COM-библиотеки.

    Пробую вот так:
    Код (Text):
    1. $inData = $textBOX2;
    2. $datetime = 0;
    3. $PHP_LIB->GetTimeFromStart($inData, 0, 0, &$datetime);

    В PHP не принимает последний параметр outDateTime.

    Пишет следующее:

    Код (Text):
    1. <!--error--><br />
    2. <b>Fatal error</b>:  Uncaught exception 'com_exception' with message 'Parameter 0: Несовпадение типов.
    3. ' in Z:\home\test\www\...
    4. Stack trace:
    5. #0 Z:\home\test\www\2.09\book\GetTimeFromStart.php(3): com->TSAGetTimeFromStart('-----BEGIN -...', 0, 0, 0)
    6. #1 Z:\home\test\www\2.09\2.php(79): include('Z:\home\test\ww...')
    7. #2 {main}
    8.   thrown in <b>Z:\home\test\www\2.09\book\GetTimeFromStart.php</b> on line <b>3</b><br />
    Функция в COM-библиотеке:

    Код (Text):
    1. STDMETHODIMP HybridCOM::GetTimeFromStart(BSTR inData, INT flags, INT sigId, DATE* outDateTime)
    2. {
    3. ...
    4. }
    Подскажите, что можно сделать?
     
    #1 Danil_III, 5 сен 2018
    Последнее редактирование: 5 сен 2018
  2. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    https://php.ru/manual/function.date.html
    https://php.ru/manual/class.datetime.html
    посмотри мануал, примеры!
     
  3. Danil_III

    Danil_III Новичок

    С нами с:
    13 авг 2018
    Сообщения:
    22
    Симпатии:
    0
    Пытался так... Загонял как
    Код (Text):
    1. $datetime = new DateTime();
    Функция не принимает объект

    и
    Код (Text):
    1. $datetime = date();
    Здесь надо аргументы внутри date()т указать, а какие именно я так и не понял

    В итоге не получилось
     
  4. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    я же проси
    я же просил, посмотреть примеры в мануале:
    PHP:
    1. <?php
    2. $today = date("H:i:s");                         // 17:16:18
    3. $today = date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (формат MySQL DATETIME)
    и вот такие примеры в низу статьи мануала.
     
  5. Danil_III

    Danil_III Новичок

    С нами с:
    13 авг 2018
    Сообщения:
    22
    Симпатии:
    0
    Ответ функции GetTimeFromStart приходит в секундах. С 1970 года. Число примерно ...1536143778...
     
  6. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    у тебя что в секундах приходит число?
    значит воспользуйся функцией time():
    https://php.ru/manual/function.time.html
     
  7. Danil_III

    Danil_III Новичок

    С нами с:
    13 авг 2018
    Сообщения:
    22
    Симпатии:
    0
    К сожалению не все так просто)))
    Я бы с радостью так сделал, да только мне нужно именно знать, когда началась заданная $inData. В зависимости от $inData будет выдаваться разные значения секундах.
     
  8. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    $inData - от куда эта переменная приходит?
    и какую роль она играет?
     
  9. Danil_III

    Danil_III Новичок

    С нами с:
    13 авг 2018
    Сообщения:
    22
    Симпатии:
    0
    Вводятся данные в <input type = "text" id = "inData">. Отправляются на сервер.
    Затем запрашиваем время отправки на сервер этих данных. В $PHP_LIB->GetTimeFromStart($inData, 0, 0, &$datetime); нужно указать точное $inData.... (если поменять хоть один символ, то уже должен выдавать ошибку)
     
  10. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    так же работать не должно)
    Вопрос: какие данные попадают в это поле цифры буквы число значения дата и т.д?
    покажи пример что ты в это поле вводишь!
    примерно должно быть так:
    PHP:
    1. <input type = "text" id = "inData" name="сюда передается переменная">
     
  11. Danil_III

    Danil_III Новичок

    С нами с:
    13 авг 2018
    Сообщения:
    22
    Симпатии:
    0
    Оно так и есть)))
    <input type = "text" id = "inData" name="inData">

    не дописал)
     
  12. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    а что ты в это поле пишешь какие данные попадают туда?
     
  13. Danil_III

    Danil_III Новичок

    С нами с:
    13 авг 2018
    Сообщения:
    22
    Симпатии:
    0
    Подписанный сертификат.

    И должна выводиться дата этой подписи.
     
  14. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    покажи на примере, я допустим не понял... в одно поле и сертификат и дата.
    может нужно 2 поля ввода создать?
    или же просто сертификат попал в поле, а дату ты сегодняшнюю записуешь в переменную и передаешь.
    PHP:
    1. $today = date("Y-m-d H:i:s"); # можно со временем
    2. $today = date("Y-m-d"); # можно без времени
     
  15. Danil_III

    Danil_III Новичок

    С нами с:
    13 авг 2018
    Сообщения:
    22
    Симпатии:
    0
    У меня 3 поля.
    В одно поле вводятся данные(например "Privet").
    Во втором поле эти данные подписываются сертификатом. (Там куча закодированных символов)
    А вот третье окно как раз отвечает за вывод информации (Вывод ошибок, вывод времени и еще разные... В зависимости, какая кнопка нажата )
    --- Добавлено ---
    В самой программе 21 функция.
    19 из них работают, все выводится)
    А вот с двумя у меня проблема...
     
  16. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    что означает вывод ошибок, ты ошибки выводишь в поле?
    вывод времени тоже в это поле пихаешь и еще разные что это)))
    показывай пример, не тяни кота за яйки.
    покажи форму полностью и кусок серверной части касающийся этой формы.
     
  17. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    так вас не спрашивают какой результат, вопрос - в каком формате должен параметр передаваться?
    вот какой там формат должен быть?
     
  18. Danil_III

    Danil_III Новичок

    С нами с:
    13 авг 2018
    Сообщения:
    22
    Симпатии:
    0
    Я предполагаю, что да! Вот такой
    Код (Text):
    1. DATE* outDateTime
    Просто в C# указан LONG...
     
  19. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    пока тяжело добиться какой либо инфы, нам твоя программа не нужна поверь, вот я например не знаю что храниться в outDateTime C# си шарп какие данные в секундах или реальное время.
     
  20. Danil_III

    Danil_III Новичок

    С нами с:
    13 авг 2018
    Сообщения:
    22
    Симпатии:
    0
    Вот файл HTML.
    Код (Text):
    1. <form name="form1" id="form1" action="2.php" method="post">
    2.  
    3.               <input type="button" id="signData"      name="signData"     value="Подписать данные" style="width: 280px" ><br>
    4.               <input type="button" id="verifyData"    name="verifyData"   value="Проверить данные" style="width: 280px" ><br>
    5.               <input type="button" id="getTimeSig"    name="getTimeSig"   value="Получить время подписи" style="width: 280px"><br><br>
    6.              
    7.             <!--__________________________________________3 выходных окна____________________________________-->
    8.           <tr><td colspan="3" style="width: 730px; height: 220px"><textarea name="textBOX1" class="result maxWidth" style="width: 730px; height: 220px"></textarea></td></tr>
    9.           <tr><td colspan="3" style="width: 730px; height: 220px"><textarea name="textBOX2" class="maxWidth" style="width: 730px; height: 220px"></textarea></td></tr>
    10.           <tr><td colspan="3" style="width: 730px; height: 120px"><textarea name="textBOX3" class="maxWidth" style="width: 730px; height: 120px"></textarea></td></
    11.      <input name="infoIden" id="infoIden" type="hidden" value="">
    12.    </form>

    Вот PHP:
    Код (Text):
    1. <? header('Content-Type:text/html; charset=utf-8');
    2.  
    3. $PHP_LIB = new COM('HybridLib.Hybrid') ;
    4. $textBOX1 = $_POST['textBOX1'];
    5. $textBOX2 = $_POST['textBOX2'];
    6. $infoIden = $_POST['infoIden'];
    7.  
    8.     if($infoIden == "Подписать данные")
    9.     {
    10.       $outSign = "";
    11.       $PHP_LIB-> SignData("256", 0, $textBOX1, &$outSign);
    12.       echo $outSign;
    13.     }
    14.     elseif($infoIden == "Получить время подписи")
    15.     {
    16.        <?php
    17.        $inData = $textBOX2;
    18.        $datetime = 0;
    19.        $PHP_LIB->TSAGetTimeFromSig($inData, 0, 0, &$datetime);
    20.        echo $datetime;
    21.     }
    22. ?>

    Вот JavaScript:
    Код (Text):
    1.      $(document).ready(function(){
    2.           $('body').on('click', '#signData', function(){
    3.             var form = $(this).parents('form#form1');
    4.             window.document.form1.infoIden.value = "Подписать данные" ;
    5.             $('textarea[name=textBOX2]').val('');
    6.               form.ajaxSubmit({
    7.                 beforeSubmit: function(){
    8.                   var ar_Field = form.find('input').fieldSerialize().split('&');
    9.                   for (var i = 0; i < ar_Field.length; i++)
    10.                   {
    11.                     var val = ar_Field[i].split('=');
    12.                   }
    13.                 },
    14.                 complete: function(xhr) {
    15.                   console.log(xhr);
    16.                   $('textarea[name=textBOX2]').val(xhr.responseText);
    17.                 }
    18.             });
    19.           });
    20.         });
    21.  
    22. $(document).ready(function(){
    23.           $('body').on('click', '#getTimeSig', function(){
    24.             var form = $(this).parents('form#form1');
    25.             window.document.form1.infoIden.value = "Получить время подписи" ;
    26.             $('textarea[name=textBOX3]').val('');
    27.                   form.ajaxSubmit({
    28.                     beforeSubmit: function(){
    29.                       var ar_Field = form.find('input').fieldSerialize().split('&');
    30.                       for (var i = 0; i < ar_Field.length; i++)
    31.                       {
    32.                         var val = ar_Field[i].split('=');
    33.                       }
    34.                     },
    35.                     complete: function(xhr) {
    36.                       console.log(xhr);
    37.                       $('textarea[name=textBOX3]').val(xhr.responseText);
    38.                     }
    39.               });    
    40.           });
    41.         });
    --- Добавлено ---
    А вот с#:
    Код (Text):
    1.   private void btn_GetTimeFromSig_Click(object sender, EventArgs e)
    2.         {
    3.             string inData = textBox2.Text;
    4.             long outDateTime = 0;
    5.             KalkanCOMTest.TSAGetTimeFromSig(inData, 0, 0, out outDateTime);
    6.          
    7.                 DateTime date = new DateTime(1970, 1, 1).AddSeconds(outDateTime).AddHours(6); //Добавим 6 часов - часовой пояс Алматы
    8.                 textBox8.Text += "Время подписи: " + date.ToString("dd.MM.yyyy HH-mm-ss") + " ALMT";
    9.         }
     
  21. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Вот теперь другое дело) правда я с js на вы)
    Теперь сгруппируемся и может кто сможет помочь)
     
  22. Danil_III

    Danil_III Новичок

    С нами с:
    13 авг 2018
    Сообщения:
    22
    Симпатии:
    0
    А вот с++ из COM-библиотеки:
    Код (Text):
    1. STDMETHODIMP HybridCOM::TSAGetTimeFromSig(BSTR inData, INT flags, INT sigId, DATE* outDateTime)
    2. {
    3.     time_t tmpOutDateTime = 0;
    4.     int tmpInDataLength = wcslen(inData) + 1;
    5.     std::vector<char> tmpInData(tmpInDataLength);
    6.  
    7.     WideCharToMultiByte(CP_UTF8, 0, (LPCWCH)inData, tmpInDataLength, (LPSTR)&tmpInData[0], tmpInDataLength, NULL, NULL);
    8.    
    9.     kc_funcs->KC_GetTimeFromSig(&tmpInData[0], tmpInDataLength, flags, sigId, &tmpOutDateTime);
    10.  
    11.     return S_OK;
    --- Добавлено ---
    JS тут вообще не нужен для функции в PHP. Через JS я только передаю данные из формы в PHP
    --- Добавлено ---
    Он есть. Почти в самом низу) В форме он имеет тип "hidden"(скрытый).
    Код (Text):
    1. <input name="infoIden" id="infoIden" type="hidden" value="">
     
  23. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Зачем в 16 строке открывается <?php ??? убрать!!!
    $datetime = 0 переписать на $datetime = date("Y-m-d H:i:s");
    в этом куске
    Код (Text):
    1. <? header('Content-Type:text/html; charset=utf-8');
    добавить <?php перед header
    --- Добавлено ---
    я заметил и удалил сообщение ты успел ответить на него)
     
  24. Danil_III

    Danil_III Новичок

    С нами с:
    13 авг 2018
    Сообщения:
    22
    Симпатии:
    0
    $datetime = date("Y-m-d H:i:s"); Так не воходит... Тоже самое, не совпадение типов.....
    "Зачем в 16 строке открывается <?php ??? убрать!!!"... Это случайно скопировал туда) Нет ее в программе)
     
  25. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    значит на $datetime = time(); замени