当两者都安装在一台服务器上时,如何通过 PHP 使用 Tika?
How to use Tika via PHP when both installed on one server?
- 我需要创建一个内部网站,允许用户上传 .doc、.pdf、.xls 文件并在文本框中查看文本。
- 我已经在 PHP 中创建了网站,用户可以上传文件。
- 我已经在我的服务器上安装了 Tika,在命令行中可以键入
java -jar tika-app-1.10-SNAPSHOT.jar -m manu.pdf > output.txt
,它成功地在输出文件中创建了我需要的文本。
从 PHP 调用 Tika 以便将上传文件的纯文本导入 PHP 的最佳方法是什么?
四处搜索我发现:
- PHP 调用 "Tika server" 的代码,例如使用 cURL
- PHP Tika 的包装器 类 似乎在安装了 PHP 的同一台服务器上使用 Tika,但我还没有让它们工作。
- 或者,我可以简单地通过
exec
命令调用 Tika。
但我不确定最简单的方法是什么。
如果它在您自己的托管服务器上,并且您知道 PHP 和 Tika 位置,只需使用 exec
。
或者,如果您更喜欢更好的控制(我怀疑您不需要),请使用 shell_exec
如果您有一些性能问题,and/or 需要扩展这个东西,那么还有更详细的解决方案的余地。
更简单的方法(调用 API)
对于远程服务器上的 运行 我建议你使用 curl
或 Guzzle
来调用地址(但你也可以简单地使用 file_get_contents
并传递它API 的 URL 将在远程服务器上调用 Tika。
其他方法(在本地服务器上执行进程)
对于 运行 本地解析(Tika 和 PHP 在同一服务器上)我使用 Synfony/Process.
就我个人而言,我不鼓励您只使用 exec
。
我要补充一点,在另一台服务器上安装 Tika 会强制您向该服务器发送用户上传的整个文件负载。
虽然更快的解决方案是只接收上传,执行 PHP,并直接从同一脚本(或至少从同一台机器)调用 Tika 进程。
否则你需要一个脚本:
- 接收上传数据
- 上传到Tika服务器(可能作为API调用的有效载荷)
- 告诉远程服务器上的Tika(通过API)解析文件
- 下载响应解析数据
- 使用它或显示它。
正如我强调的那样,两台服务器之间的通信会产生更多的开销;当要解析的文件可能是 35MB 的 pdf 文件时,这是不可取的,是吗?
用户将不得不等待,比方说,2 分钟上传,PLUS 其他,比方说,20 秒将文件发送到 Tika 服务器,然后是其他,比方说3秒得到文本格式的解析结果。
我强烈建议留在同一个 PHP 服务器上工作。
- 我需要创建一个内部网站,允许用户上传 .doc、.pdf、.xls 文件并在文本框中查看文本。
- 我已经在 PHP 中创建了网站,用户可以上传文件。
- 我已经在我的服务器上安装了 Tika,在命令行中可以键入
java -jar tika-app-1.10-SNAPSHOT.jar -m manu.pdf > output.txt
,它成功地在输出文件中创建了我需要的文本。
从 PHP 调用 Tika 以便将上传文件的纯文本导入 PHP 的最佳方法是什么?
四处搜索我发现:
- PHP 调用 "Tika server" 的代码,例如使用 cURL
- PHP Tika 的包装器 类 似乎在安装了 PHP 的同一台服务器上使用 Tika,但我还没有让它们工作。
- 或者,我可以简单地通过
exec
命令调用 Tika。
但我不确定最简单的方法是什么。
如果它在您自己的托管服务器上,并且您知道 PHP 和 Tika 位置,只需使用 exec
。
或者,如果您更喜欢更好的控制(我怀疑您不需要),请使用 shell_exec
如果您有一些性能问题,and/or 需要扩展这个东西,那么还有更详细的解决方案的余地。
更简单的方法(调用 API)
对于远程服务器上的 运行 我建议你使用 curl
或 Guzzle
来调用地址(但你也可以简单地使用 file_get_contents
并传递它API 的 URL 将在远程服务器上调用 Tika。
其他方法(在本地服务器上执行进程)
对于 运行 本地解析(Tika 和 PHP 在同一服务器上)我使用 Synfony/Process.
就我个人而言,我不鼓励您只使用 exec
。
我要补充一点,在另一台服务器上安装 Tika 会强制您向该服务器发送用户上传的整个文件负载。 虽然更快的解决方案是只接收上传,执行 PHP,并直接从同一脚本(或至少从同一台机器)调用 Tika 进程。 否则你需要一个脚本:
- 接收上传数据
- 上传到Tika服务器(可能作为API调用的有效载荷)
- 告诉远程服务器上的Tika(通过API)解析文件
- 下载响应解析数据
- 使用它或显示它。
正如我强调的那样,两台服务器之间的通信会产生更多的开销;当要解析的文件可能是 35MB 的 pdf 文件时,这是不可取的,是吗? 用户将不得不等待,比方说,2 分钟上传,PLUS 其他,比方说,20 秒将文件发送到 Tika 服务器,然后是其他,比方说3秒得到文本格式的解析结果。
我强烈建议留在同一个 PHP 服务器上工作。