0

我正在尝试上传文件,我的前端应用程序是 PHP,后端引擎是 Java。它们都通过 PHP-Java_bridge 进行通信。

我的第一个动作是,当一个文件发布到 PHP 页面时,它将检索其内容。

$filedata= file_get_contents($tmpUploadedLocation);

然后将此信息传递给接受字节数组的Java EJB外观saveFileContents(byte[] contents)

这是我在 PHP 中如何将其转换$filedata为字节数组的方法。

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

最后调用Java服务(使用php-java-bridge检索Java服务对象)

$javaService->saveFileContents($bytearrayData);

如果文件大小较小,这可以正常工作,但如果大小增加 2.9 MB,我会收到错误消息,因此文件内容不会保存到磁盘上。

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 使用 PHP-Java-Bridge 与 Java 通信
  4. EJB 的方法由 PHP 访问以保存和检索信息。

上述组合一切正常,但现在关于上传和保存文档。它将用于任何前端应用程序(PHP 或通过远程接口(查找)的其他 java 应用程序)的 EJB(应用程序引擎访问点)。

我的问题是如何将 PHP 中的文件内容发送到 Java,它不会破坏任何东西(内存)?

4

1 回答 1

0

我没有将文件转换为数组,而是尝试将其作为字符串传递。在 PHP 中将字符串编码为 base64,在 Java 中将其解码为数组。

另一种选择是通过文件系统传递文件。一些 Linux 系统将 /dev/shm 或 /run/shm 挂载到 tmpfs,这通常是在程序之间传递临时数据而不会产生硬盘开销的好方法。一个典型的 tmpfs 算法是 1) 创建一个文件夹;2)从中删除旧文件(例如超过一分钟的文件);3) 保存新文件;4)将文件路径传递给Java;5) 删除文件。如果由于某种原因未完成步骤 3-5,步骤 2 很重要,以免浪费 RAM。

于 2014-04-01T14:07:13.790 回答