Использование PHP shell_exe c для возврата результатов выполнения программы Java - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть приложение Android, которое использует алгоритм FNV для отслеживания определенных состояний приложения. Время от времени мне приходится запускать приложение с моих серверов и указывать ему выполнять определенные действия для определенных состояний c приложения. Я использую PHP в качестве языка сценариев на стороне сервера. По моему опыту, кодирование ваших собственных хешей в PHP и последующее ожидание тех же значений, которые генерируются, скажем, Java, непросто. Чтобы убедиться, что я отправляю правильные FNV, я выбрал сгенерировать ha sh в Java и затем вызвать его из PHP. Вот что я сделал

Сначала мой Java код

public class fnv64 
{  
 private static Long fnv_64(String value) 
 {
  byte[] data = value.getBytes();
  Long hash = 0xcbf29ce484222325L;
  int len = data.length;

  for (int i = 0;i < len;i++) 
  {
   hash ^= (data[i] & 0xff);
   hash *= 0x100000001b3L;
  }
  return hash;
 }

 public static void main(String[] args)
 {
  String raw = args[0];   
  System.out.println(fnv_64(raw));
 }
}

Простой javac /path/to/fnv64.java Позже у меня есть необходимый fnv64.class файл, скомпилированный и доступный. Для удобства я запустил fnv64. java изнутри VSCode, чтобы убедиться, что он действительно возвращает результат.

Теперь вот пример PHP кода, из которого все это называется

<?php
 header("HTTP/1.1 200 OK");
 $headers = getallheaders();
 $subscribing = ('sub' == $headers['X-Reason']);
 $rawZuff = $headers['X-Channel-Id'];
 trigger_error($rawZuff);
 $zuffHash = shell_exec("java -cp .:/var/www/html/pubsub/fnv64 ".$rawZuff);
 trigger_error($zuffHash);    
?>

Когда я получаю доступ к этому сценарию из своего браузера - ну, на самом деле, к нему обращается клиент WebSocket, - а затем проверяет файл журнала, который я вижу, $rawZuff сообщил там, как и ожидалось. Howeverr, то второе утверждение ошибки упорно остается пустым - это как бы * программа * 1028 никогда не был бежать или не возвращается никакого результата

1015 * Очевидно, что я делаю что-то здесь не так.. Я был бы очень признателен всем, кто мог бы сказать мне, что это может быть.
...