【发布时间】:2019-07-08 10:33:36
【问题描述】:
我对 Laravel 应用程序中的 exec 函数有一个奇怪的问题。使用 imagemagick 库,我必须合并两个 pdf 文件 - 相同的 shell 命令在终端中正常工作, exec() 与 tinker 中的此命令也可以正常工作。但是,当从 Laravel 应用程序中的作业或控制器调用时,它看起来根本看不到原始文件。可能是什么原因?所有文件都存储在生成的存储子文件夹中。
- 在修补程序中正常工作
- 在终端中正常工作
- 在 Laravel 应用程序外部的简单测试 php 文件中正常工作
- 在 Laravel 应用程序中的作业/控制器中不起作用(看起来它没有读取输入 file_1.pdf(输出文件仅使用覆盖文件生成,没有源“背景”) 已经尝试过 Process::class , exec 用于简化代码。权限设置正确。
exec('convert "/Users/robert/Sites/start-app/storage/documents/file_1.pdf" null: "/Users/robert/Sites/start-app/storage/documents/stamps/1.png" -gravity SouthEast -geometry +150+150 -compose over -layers composite "/Users/robert/Sites/start-app/storage/documents/processed/output_file_1.pdf"');
【问题讨论】:
-
如果您使用 PHP 中可用的类,它是否有效? php.net/manual/en/book.imagick.php
-
我还没有使用包装器对其进行测试,只想进行简单的命令行操作并且不敢相信 exec() 中的相同命令在修补程序、控制台中的行为方式不同并在 Laravel 应用程序中。我会检查它,也许它有帮助 - 感谢您的建议。
-
应用程序是否有权访问该文件?当您使用其他方法时,它们都会像您一样运行。 Laravel 将以运行 Web 服务的帐户运行命令。因此,在运行 apache 的 Ubuntu 上,您需要检查 www-data 是否可以访问这些文件。
标签: laravel imagemagick