当两者都安装在一台服务器上时,如何通过 PHP 使用 Tika?

How to use Tika via PHP when both installed on one server?

从 PHP 调用 Tika 以便将上传文件的纯文本导入 PHP 的最佳方法是什么?

四处搜索我发现:

  1. PHP 调用 "Tika server" 的代码,例如使用 cURL
  2. PHP Tika 的包装器 类 似乎在安装了 PHP 的同一台服务器上使用 Tika,但我还没有让它们工作。
  3. 或者,我可以简单地通过 exec 命令调用 Tika。

但我不确定最简单的方法是什么。

如果它在您自己的托管服务器上,并且您知道 PHPTika 位置,只需使用 exec。 或者,如果您更喜欢更好的控制(我怀疑您不需要),请使用 shell_exec
如果您有一些性能问题,and/or 需要扩展这个东西,那么还有更详细的解决方案的余地。

更简单的方法(调用 API)

对于远程服务器上的 运行 我建议你使用 curlGuzzle 来调用地址(但你也可以简单地使用 file_get_contents 并传递它API 的 URL 将在远程服务器上调用 Tika

其他方法(在本地服务器上执行进程)

对于 运行 本地解析(TikaPHP 在同一服务器上)我使用 Synfony/Process.

就我个人而言,我不鼓励您只使用 exec


我要补充一点,在另一台服务器上安装 Tika 会强制您向该服务器发送用户上传的整个文件负载。 虽然更快的解决方案是只接收上传,执行 PHP,并直接从同一脚本(或至少从同一台机器)调用 Tika 进程。 否则你需要一个脚本:

  • 接收上传数据
  • 上传Tika服务器(可能作为API调用的有效载荷)
  • 告诉远程服务器上的Tika(通过API)解析文件
  • 下载响应解析数据
  • 使用它或显示它。

正如我强调的那样,两台服务器之间的通信会产生更多的开销;当要解析的文件可能是 35MB 的 pdf 文件时,这是不可取的,是吗? 用户将不得不等待,比方说,2 分钟上传,PLUS 其他,比方说,20 秒将文件发送到 Tika 服务器,然后是其他,比方说3秒得到文本格式的解析结果。

我强烈建议留在同一个 PHP 服务器上工作。