Как перенести файл из php в java используя php-java-bridge

Я пытаюсь загрузить файл, мое внешнее приложение на PHP, а внутреннее ядро ​​на Java. Они оба общаются через PHP-Java_bridge.

Моим первым действием было то, что когда файл публикуется на странице PHP, он извлекает его содержимое.

$filedata= file_get_contents($tmpUploadedLocation);

а затем передать эту информацию в фасад Java EJB, который принимает массив байтов saveFileContents(byte[] contents)

Вот как в PHP я преобразовал $filedata в байтовый массив.

$bytearrayData = unpack("C*",$filedata);

и, наконец, вызывается служба Java (объект службы Java был получен с использованием php-java-bridge)

$javaService->saveFileContents($bytearrayData);

Это прекрасно работает, если размер файла меньше, но если размер увеличивается на 2,9 МБ, я получаю сообщение об ошибке и, следовательно, содержимое файла не сохраняется на диск.

Fatal error: Allowed memory size of 134217728 bytes exhausted //This is PHP side error due to unpack

Я не уверен, как это сделать, выше метод не является точным, пожалуйста, у меня есть несколько ограничений.

  1. Движок (Java) отвечает за сохранение и извлечение содержимого.
  2. PHP-HTML - это приложение переднего плана, на данный момент это может быть что угодно, только PHP
  3. PHP общается с Java с помощью PHP-Java-Bridge
  4. Доступ к методам EJB осуществляется PHP для сохранения и получения информации.

С вышеупомянутой комбинацией все работало нормально, но теперь речь идет о загрузке и сохранении документов. Это EJB (точка доступа Application Engine), которая будет использоваться для любого интерфейсного приложения (PHP или другого Java-приложения через удаленный интерфейс (поиск)).

У меня вопрос, как содержимое файла из PHP может быть отправлено на Java, где он ничего не нарушает (память)?

1 ответ

Вместо преобразования файла в массив я бы попытался передать его как строку. Кодировать строку в base64 в PHP и декодировать в массив в Java.

Другой вариант - передать файл через файловую систему. В некоторых системах Linux / dev / shm или / run / shm смонтированы в tmpfs, что часто является хорошим способом передачи временных данных между программами без необходимости использовать жесткий диск. Типичный алгоритм tmpfs: 1) создать папку; 2) удалить из него старые файлы (например, файлы старше минуты); 3) сохранить новый файл; 4) передать путь к файлу в Java; 5) удалить файл. Шаг 2 важен для того, чтобы не тратить оперативную память, если шаги 3-5 не выполнены по какой-либо причине.

Другие вопросы по тегам